循环到复制粘贴列会复制它们所需的次数

时间:2016-11-18 16:51:42

标签: excel-vba loops macros vba excel

我在不同的工作簿中有几个数据库(表),对于每个表,需要将几个特定的​​列复制到一个工作表中。此外,每列应粘贴在收件人/主工作表的特定列中。由于我是宏的新手,我正在逐步编写代码。最重要的是,我让代码复制一个表的列并将其粘贴到主表中。但是,列被复制3次,与前一列相同,我不知道为什么。我只想复制一次列。

以下是代码

Dim f As Range, WB As Workbook
Dim arrSht, Arrcol As Variant, j As Long

arrSht = Array("a","b","c")
Arrcol = Array(5, 6, 8)

Set WB = Workbooks.Open(Filename:= _
     "C:\Users\gustavo\Documents\Minambiente\TUA\2015\CARDER\CARDER.xls")

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
 End With

For j = LBound(arrSht) To UBound(arrSht)

  Set f = WB.Sheets(1).Cells.Find(arrSht(j), searchorder:=xlByRows, LookAt:=xlPart)

 If Not f Is Nothing Then
    WB.Sheets(1).Range(f.Offset(1, 0), Sheets(1).Cells(Rows.Count, f.Column).End(xlUp)).Copy
      ThisWorkbook.Sheets(1).Cells(Rows.Count, Arrcol(j)).End(xlUp).Offset(1, 0).PasteSpecial
      Else
      MsgBox arrSht(j) & "Header not found!"
 End If

  With Application
  .ScreenUpdating = False
  .DisplayAlerts = False
  End With
Next j    

2 个答案:

答案 0 :(得分:0)

我不知道您文件的结构或内容。但在我看来,你的问题来自使用LookAt:= xlPart。因为在第一次迭代期间,如果搜索范围中的一个单元格包含" a",那么

If Not f Is Nothing Then 

已选中。 并且在第二次迭代期间,如果其中一个单元格包含字母" b"

If Not f Is Nothing Then 

检查条件。 等等... 尝试使用:

LookAt: = xlWhole.

希望这可以提供帮助。

答案 1 :(得分:0)

抱歉,我再次检查了代码,这是我的新手错误。我已经运行了三次代码:P