根据可变的用户定义路径复制已关闭工作簿中的数据

use*_*289 3 excel vba excel-2007 excel-vba xlm

我已经耗尽了我的搜索功能,正在寻找解决方案.以下是我想要做的概述:

  • 用户打开启用宏的Excel文件
  • 即时提示显示用户输入或选择所需工作簿的文件路径.他们需要选择两个文件,文件名可能不一致
  • 输入文件的位置后,从第一个文件选择第一个工作表将被复制到启用宏的工作簿的第一个工作表,第二个文件选择的第一个工作表将被复制到启用宏的工作簿的第二个工作表.

我遇到过一些ADO的引用,但我还不熟悉它.

编辑:我找到了一个从已关闭文件导入数据的代码.我需要调整范围以返回变量结果.

    Private Function GetValue(path, file, sheet, ref)

    path = "C:\Users\crathbun\Desktop"
    file = "test.xlsx"
    sheet = "Sheet1"
    ref = "A1:R30"

     '   Retrieves a value from a closed workbook
    Dim arg As String

     '   Make sure the file exists
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File Not Found"
        Exit Function
    End If

     '   Create the argument
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
    Range(ref).Range("A1").Address(, , xlR1C1)

     '   Execute an XLM macro
    GetValue = ExecuteExcel4Macro(arg)
End Function

Sub TestGetValue()

    path = "C:\Users\crathbun\Desktop"
    file = "test"
    sheet = "Sheet1"

    Application.ScreenUpdating = False
    For r = 1 To 30
        For C = 1 To 18
            a = Cells(r, C).Address
            Cells(r, C) = GetValue(path, file, sheet, a)
        Next C
    Next r

    Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)

现在,我需要一个命令按钮或用户窗体,它将立即提示用户定义文件路径,并从该文件导入数据.

Sid*_*out 11

我不介意在处理期间是否打开文件.我只是不希望用户必须单独打开文件.我只需要它们就可以选择或导航到所需的文件

这是一个基本代码.此代码要求用户选择两个文件,然后将相关工作表导入当前工作簿.我有两个选择.拿你的选择:)

经过试验和测试

选项1(直接导入表格而不是复制到sheet1和2)

Option Explicit

Sub Sample()
    Dim wb1 As Workbook, wb2 As Workbook
    Dim Ret1, Ret2

    Set wb1 = ActiveWorkbook

    '~~> Get the first File
    Ret1 = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", _
    , "Please select first file")
    If Ret1 = False Then Exit Sub

    '~~> Get the 2nd File
    Ret2 = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", _
    , "Please select Second file")
    If Ret2 = False Then Exit Sub

    Set wb2 = Workbooks.Open(Ret1)
    wb2.Sheets(1).Copy Before:=wb1.Sheets(1)
    ActiveSheet.Name = "Blah Blah 1"
    wb2.Close SaveChanges:=False

    Set wb2 = Workbooks.Open(Ret2)
    wb2.Sheets(1).Copy After:=wb1.Sheets(1)
    ActiveSheet.Name = "Blah Blah 2"
    wb2.Close SaveChanges:=False

    Set wb2 = Nothing
    Set wb1 = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

选项2(将表格内容导入表1和表2)

Option Explicit

Sub Sample()
    Dim wb1 As Workbook, wb2 As Workbook
    Dim Ret1, Ret2

    Set wb1 = ActiveWorkbook

    '~~> Get the first File
    Ret1 = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", _
    , "Please select first file")
    If Ret1 = False Then Exit Sub

    '~~> Get the 2nd File
    Ret2 = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", _
    , "Please select Second file")
    If Ret2 = False Then Exit Sub

    Set wb2 = Workbooks.Open(Ret1)
    wb2.Sheets(1).Cells.Copy wb1.Sheets(1).Cells
    wb2.Close SaveChanges:=False

    Set wb2 = Workbooks.Open(Ret2)
    wb2.Sheets(1).Cells.Copy wb1.Sheets(2).Cells
    wb2.Close SaveChanges:=False

    Set wb2 = Nothing
    Set wb1 = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)