Excel VBA从外部工作表导入数据-变量工作表名称
我希望做到以下几点:Excel VBA从外部工作表导入数据-变量工作表名称,excel,vba,import,filenames,worksheet,Excel,Vba,Import,Filenames,Worksheet,我希望做到以下几点: 目标工作表中的CommandButton打开源文件(选择哪个文件的对话框) 在源文件中查找工作表(始终使用相同的名称-“性能”) 复制一个单元格区域(实际上是两个单独的区域-待添加) 确保目标工作表(与源工作表中的单元格I2同名)存在 将值粘贴到目标工作表中的相同范围 关闭源文件 到目前为止,我有: Private Sub CommandButton1_Click() Dim SourceFile As String Dim SourceBook As Workbook
Private Sub CommandButton1_Click()
Dim SourceFile As String
Dim SourceBook As Workbook
Dim DestinationBook As Workbook
Dim desiredName As String
Set DestinationBook = ThisWorkbook
SourceFile = Application.GetOpenFilename(fileFilter:="Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
Set SourceBook = Workbooks.Open(SourceFile)
SourceBook.Sheets("Performance").Activate
desiredName = ActiveSheet.Range("I2")
Application.CutCopyMode = True
SourceBook.ActiveSheet.Range("E25:I64").Copy
DestinationBook.Activate
If WorksheetExists = False Then
MsgBox "Couldn't find " & desiredName & " sheet within destination workbook"
Call SourceBook.Close(False)
Exit Sub
Else
Range("E25:I64").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Call SourceBook.Close(False)
End If
End Sub
Function WorksheetExists() As Boolean
Dim sh As Object
For Each sh In DestinationBook.Worksheets
If sh.Name = desiredName Then WorksheetExists = True: sh.Activate
Exit For
Next
End Function
我收到运行时错误“424”:需要对象
有什么建议吗
提前谢谢 这里是对您最新代码的修改。注意这些添加:1)“Option Explicit”确保您正确声明了所有变量,2)变量已分配给重要的工作簿、工作表和范围,3)所需变量将传递给
工作表列表
函数。为此,应在目标手册
中提供名为“性能”和“测试表”的工作表,并在源代码手册
的I2
中提供名为“测试表”的工作表。请记住,这只是一个尝试“让你走”,所以我希望你需要修改
Option Explicit
Sub test()
Dim SourceFile As String
Dim SourceBook As Workbook, performanceSh As Worksheet
Dim DestinationBook As Workbook
Dim desiredName As String
Set DestinationBook = ThisWorkbook
SourceFile = Application.GetOpenFilename(fileFilter:="Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
Set SourceBook = Workbooks.Open(SourceFile)
Set performanceSh = SourceBook.Sheets("Performance")
desiredName = performanceSh.Range("I2")
Application.CutCopyMode = True
performanceSh.Range("E25:I64").Copy
If WorksheetExists(DestinationBook, desiredName) = False Then
MsgBox "Couldn't find " & desiredName & " sheet within destination workbook"
SourceBook.Close(False)
Exit Sub
Else
Range("E25:I64").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
SourceBook.Close(False)
End If
End Sub
Function WorksheetExists(destWk As Workbook, theName As String) As Boolean
Dim sh As Object
For Each sh In destWk.Worksheets
If sh.Name = theName Then WorksheetExists = True: sh.Activate
Exit For
Next
End Function
谢谢Tony,重点是我想让它自己确保正确的目的地工作表处于活动状态。右侧目标工作表的名称等于刚刚打开的源文件中源工作表中单元格I2的内容。从技术上讲,它应该返回到正确的目标工作表,因为这是按钮所在的位置,但我想绝对确保它不会意外更改-目标文件中有多个工作表,并且必须分别对每个工作表执行相同的操作。它们的格式都完全相同,所以容易混淆好吧,我添加了更多代码来解决这个问题。希望它能帮上忙。就快到了,但它似乎在刚打开的源代码工作簿中寻找工作表,但找不到。为了澄清,单元格I2位于源工作簿和名为“性能”的源工作表中,目标文件中的目标工作表与源工作表中I2的内容相同。假设源工作表在I2中显示STACK,我希望它在目标工作簿中找到名为STACK的工作表并粘贴到那里。我现在修改了代码以解决您的问题。谢谢Tony,我按原样复制,目前它不起作用-弹出消息框(未找到…),尽管工作表确实存在,但没有错误。那么,问题就出在函数中了,因为它说这是错误的——可能是它在源工作簿中搜索目标工作表,而不是目标工作簿?如果是,我如何将其定向回搜索目的地?