VBA选择与值匹配的列并将数据复制到另一个工作簿

时间:2016-06-16 10:10:49

标签: excel vba excel-vba

我有两个excel工作簿, rh 摘要。我在摘要中有代码,用于检查 rh 文件,以根据其中的文本查找特定列。我需要找到这些列,复制它们并将数据发送到摘要表。

Sub Main()

' Declare hr workbook file
Dim rh As Excel.Workbook

' initialise hr workbook file
Set rh = Workbooks.Open("C:\Users\AC74338\Desktop\ac\rh")

'select the rh file
rh.Select

'select the open worksheet
Sheets("Open").Select

' search for the column header that matches e.g. "Org Level 6"
OrgLevel6 = WorksheetFunction.Match("Org Level 6", Rows("1:1"), 0)
OrgLevel7 = WorksheetFunction.Match("Org Level 7", Rows("1:1"), 0)

'activate this workbook where the code is
ThisWorkbook.Activate

'paste the data that was copied to this workbook in the NxNOpen worksheet
ThisWorkbook.Sheets("NxNOpen").Columns(OrgLevel6).Copy Destination:=Sheets("Sheet2").Range("A1")
ThisWorkbook.Sheets("NxNOpen").Columns(OrgLevel7).Copy Destination:=Sheets("Sheet2").Range("B1")

End Sub

我已经调试并在将数据分配给OrgLevel6变量时出错。任何人有任何关于如何解决此问题的建议?对VB不是很了解,所以可能是一个简单的错误。

4 个答案:

答案 0 :(得分:3)

当您在VBA中使用WorksheetFunction时,您仍然需要使用VBA Range引用,因此您需要引用VBA代码中的行,而不是使用Rows(1:1)。例如:

OrgLevel6 = WorksheetFunction.Match("Org Level 6", rh.Sheets("Open").Rows(1), 0)
OrgLevel7 = WorksheetFunction.Match("Org Level 7", rh.Sheets("Open").Rows(1), 0)

答案 1 :(得分:0)

Rows("1:1")更改为Rows(1)

您正在名为“打开”的工作表上应用匹配功能,但您正在复制工作表“NxNOpen”中的数据。右栏,错误表

答案 2 :(得分:0)

我已经测试了你的OrgLevel6 =行,它可以在一张纸上正常工作,因此它可能在没有正确的工作表激活的情况下执行,因此无法找到“Org Level 6”。

尝试将Sheets("Open").Select更改为Sheets("Open").Activate

答案 3 :(得分:0)

请尝试以下代码:

Sub Main()

' Declare hr workbook file
Dim rh As Excel.Workbook
Dim sum As Excel.Workbook

Dim b As Integer

' initialise hr workbook file
Set rh = Workbooks.Open("C:\Users\AC74338\Desktop\ac\rh")
Set sum = ThisWorkbook


b = 1

lcol = rh.Sheets("Open").Cells(1, Columns.Count).End(xlToLeft).Column

For i = 1 To lcol

If rh.Sheets("Open").Cells(1, i).Value = "Org Level 6" Or "Org Level 7" Then

rh.Sheets("Open").Columns(i).Copy sum.Sheets("Sheet2").Cells(1, b)
b = b + 1

End If

Next i

End Sub