Vba 从另一个工作簿提取数据,但不提及工作表名称

Vba 从另一个工作簿提取数据,但不提及工作表名称,vba,excel,Vba,Excel,我有两本练习册。源工作簿和目标工作簿 我想从源工作簿中提取所有数据,具体取决于目标工作簿的标题 为此,我有以下代码。我想知道,如果可能的话,只提及工作簿名称而不提及工作表名称?每次我保存一个新的excel文件时,工作表都会保存为sheet1、sheet2。由于工作表名称的更改,我得到了一个下标错误 有人能帮我吗?我如何从工作表中提取数据而不提及工作表名称。在大多数情况下,在我的工作簿中,我只有一张工作表 Sub Extract() Dim DestinationWB As Workbook

我有两本练习册。源工作簿和目标工作簿

我想从源工作簿中提取所有数据,具体取决于目标工作簿的标题

为此,我有以下代码。我想知道,如果可能的话,只提及工作簿名称而不提及工作表名称?每次我保存一个新的excel文件时,工作表都会保存为sheet1、sheet2。由于工作表名称的更改,我得到了一个下标错误

有人能帮我吗?我如何从工作表中提取数据而不提及工作表名称。在大多数情况下,在我的工作簿中,我只有一张工作表

Sub Extract()
Dim DestinationWB As Workbook
    Dim OriginWB As Workbook
    Dim path1 As String
    Dim FileWithPath As String
    Dim Lastrow As Long, i As Long, LastCol As Long
    Dim TheHeader As String
    Dim cell As Range
    Set DestinationWB = ThisWorkbook

    ' get the path of this workbook
    path1 = DestinationWB.Path
    FileWithPath = path1 & "\Downloads\Sourcg.xlsx"
    Set OriginWB = Workbooks.Open(filename:=FileWithPath)

    'get the count of last row and column
     Lastrow = OriginWB.Worksheets("1").Cells(Rows.count, 1).End(xlUp).Row
    LastCol = OriginWB.Worksheets("1").Cells(1, Columns.count).End(xlToLeft).Column

    For i = 1 To LastCol
        'get the name of the field (names are in row 1)
        TheHeader = OriginWB.Worksheets("1").Cells(1, i).Value

        With DestinationWB.Worksheets("S").Range("A4:L4")
            'Find the name of the field (TheHeader) in the destination (in row 4)
            Set cell = .Find(TheHeader, LookIn:=xlValues)
        End With

        If Not cell Is Nothing Then
            OriginWB.Worksheets("1").Range(Cells(2, i), Cells(Lastrow, i)).Copy Destination:=DestinationWB.Worksheets("S_APQP").Cells(5, cell.Column)
        Else
            'handle the error
        End If
    Next i

    OriginWB.Close SaveChanges:=False
End Sub

Mikz,您使用的是
工作簿
的属性
工作表
。此属性包含(工作表的)普通VBA Excel集合。您可以通过集合的位置(整数)或键(字符串)访问任何集合的成员。您在代码中使用键,因为您使用的是字符串值。如果工作簿中只有一个工作表,则绝对应该使用position value,即1-
OriginWB.Worksheets(1)。
并且无论工作表的名称如何,它都会工作

如果您有多个工作表,则可以对原始工作表中的每个工作表使用
遍历集合


顺便说一句-我建议您使用operator for
OriginWB.Worksheets(“1”)
IMHO它将帮助您生成更短、更可读的代码。您可以将嵌套的
运算符一起使用。

您可以通过索引
引用第一个工作表。工作表(1)
。是的,1不带引号。换句话说,您应该使用
originWB.worksheets(1)
,但不能使用
originWB.worksheets(“1”)
。我尝试了这个方法,我正在获取对象不支持这个属性错误。您从
originWB.worksheets.Count中得到了什么?我脑子里唯一合理的解释是文件肯定出了问题。在执行了
Set originWB=Workbooks.Open(filename:=FileWithPath)
之后,是否可以检查VBA窗口的watchs部分中的对象变量
originWB
?这是错误号吗?或者您通过原始wb.Worksheets.Count获得此数字
?此操作返回工作簿中的工作表数:-)。。。