Excel 如何根据多个标准复制不同工作簿中的值?

Excel 如何根据多个标准复制不同工作簿中的值?,excel,vba,excel-2016,Excel,Vba,Excel 2016,我有复制值并提供值的代码,但不是我需要的值。我觉得我离得很近,但缺少了一些东西。代码复制工作簿的整个工作表,我需要符合标准的值 我有这个主工作簿,我想从具有相同格式的不同工作簿中获取信息,例如,我想在主工作簿中,根据前三列中的标准(“SSL”;“Baureihe”;“Produktionsjahr”)将值粘贴到某个范围内(“SSL”;“Baureihe”;“Produktionsjahr”) 这是我到现在为止所做的代码 Sub Transfer () Dim SSl

我有复制值并提供值的代码,但不是我需要的值。我觉得我离得很近,但缺少了一些东西。代码复制工作簿的整个工作表,我需要符合标准的值

我有这个主工作簿,我想从具有相同格式的不同工作簿中获取信息,例如,我想在主工作簿中,根据前三列中的标准(“SSL”;“Baureihe”;“Produktionsjahr”)将值粘贴到某个范围内(“SSL”;“Baureihe”;“Produktionsjahr”)

这是我到现在为止所做的代码


    Sub Transfer ()
    
    Dim SSl As String
    Dim Baureihe As String
    Dim Produktionsjahr As String
    Dim fileName As String
    Dim Tfile As Workbook
    Dim shData As Worksheet, shOutput As Worksheet
    Dim rg As Range, ra As Range
    Dim i As Long, row As Long, j As Long
    Set shData = ThisWorkbook.Worksheets("Transponieren")
    
    filename = Application.getOpenFilename("Excel file (*.xlsm),*.xlsm", , "Select File")
    
    If filename = Empty then
     Exit Sub
    End If
    
    Set Tfile = Application.Workbooks.Open(filename)
    Set shOutput = Tfile.Worksheets("Transponieren")
    Set rg = shData.Range("A1").CurrentRegion
    Set ra = shOutput.range("A1").CurrentRegion
    
    
    row = 2
    
    For i = 2 To rg.Rows.Count

            SSL = Sheets("Transponieren").Cells(i, 1).Value
            Baureihe = Sheets("Transponieren").Cells (i , 2).Value
            Produktionsjahr = Sheets("Transponieren") .Cells(i, 3).Value

        For j = 2 To ra.Rows.Count
    
            If ra.Cells(j, 1).Value = SSL And _
            ra.Cells(j, 2).Value = Baureihe And _
            ra.Cells(j, 3).Value = Produktionsjahr Then

   Tfile.Sheets("Transponieren").Range("A" & i & ":E" & i).Copy _ 
  Destination:=ThisWorkbook.Sheets("Transponieren").Range("K" & j & ":O" & j)

     row = row + 1
     Application.CutCopyMode = False

            End if
        Next j
    Next i
     
    End Sub

我是vba Excel的新手,我尝试了各种方法,但我似乎不明白为什么这段代码不复制我需要的值。提前感谢

这是帮助我完成任务的代码。只要有人需要

Option Explicit

Sub transfer()
 Dim fileName As Variant, a() As Variant, b() As Variant, c As Variant, i As Long, j As Long
 Dim sh1 As Worksheet, wb2 As Workbook, sh2 As Worksheet
 '
 Application.ScreenUpdating = False
 Set sh1 = Sheets("Transponieren")

 fileName = Application.GetOpenFilename("Excel file (*.xlsx),*.xlsx", , "Select File")
 If fileName = False Then Exit Sub
 Set wb2 = Application.Workbooks.Open(fileName)
 Set sh2 = wb2.Sheets("Transponieren")
 `
 a = sh1.Range("A2:C" & sh1.Range("A" & Rows.Count).End(xlUp).row)
 b = sh2.Range("A2:E" & sh2.Range("A" & Rows.Count).End(xlUp).row)
 ReDim c(1 To UBound(a), 1 To 5)
 For i = 1 To UBound(a)
   For j = 1 To UBound(b)
     If a(i, 1) = b(j, 1) And a(i, 2) = b(j, 2) And a(i, 3) = b(j, 3) Then
       c(i, 1) = b(j, 1)
       c(i, 2) = b(j, 2)
       c(i, 3) = b(j, 3)
       c(i, 4) = b(j, 4)
       c(i, 5) = b(j, 5)
       Exit For
     End If
   Next
 Next
 wb2.Close False
 sh1.Range("K2").Resize(UBound(a), 5).Value = c
End Sub 


这行看起来很奇怪
范围(“A”&i 6:E”&i)
对不起,它应该是范围
(“A”&i&“:E”&i)
。我现在将编辑它
destination
应该是目的地吗?尝试粘贴工作代码,而不是重新编写
应用程序。GetOpenFilename(“Word文件(*.xlsm),*.xlsm”,“选择文件”)
Word文件不是xlsm,“Wroksheet”不是东西,
arr
没有定义,“文件名”不应该分开