在工作簿之间使用复制目标vba

时间:2019-03-04 23:29:43

标签: excel vba multiple-columns copy-paste

使用记录的宏来处理项目以完成工作簿之间的复制和粘贴。录制的宏一直在起作用,但在阅读论坛时,人们在说复制/粘贴方法需要花费更多时间才能运行宏,并且效率很低。因此,我尝试敲出复制目标vba行,该行将复制从Range(A2:G2000)开始的几列,然后粘贴到从(B6:H2000)开始的范围区域。我不擅长此事,并试图了解更多效率。我想到两件事。我正在使用的一种简单的复制和粘贴方法。但是将使用直接的源=目标。能做到吗?阅读此内容后,您可能会看到另一个问题。为什么要选择第2000行并复制/粘贴?你的想法是正确的。有些报告(txt文件)有100行,约300行,不超过1000行,但是我选择了过多的副本,因为我不确定将来的txt文件。我在想,如果您可以只选择使用最后一行的列,那将很酷。这超出了我。我很高兴能找到一种有效复制/粘贴的新方法。
我会很感激任何人都可以提供的帮助。让我知道你的想法。 谢谢 潮人

enter code here
   Sub import_data()
   '
   '
    'import_data
    '
    Application.ScreenUpdating = False
    '
   'Opens the txt file in excel - text delimited and leaves file open until 
   we close at bottom of code. There is no        'name for this workbook.

    Workbooks.OpenText (Module33.FileDir + "\cf_data.txt"), Origin:=437, _
    StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
    , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), 
      _
     Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), 
   TrailingMinusNumbers:=True


  'The line below is where I'm selecting data from the current opened 
  workbook and copying to another workbook

   ActiveWindow.Sheet1.Range("A2:G2000").Copy 
    Destination:=Workbooks("Auto_Data.xlsm").Sheet2.Range       ("B6:H2000")



   'This info below is a (recorded marco).  All works if I rem out the above 
    line and open up all the below lines

    '    Range("A2:G2000").Select
    '    Selection.Copy
    '    Windows("Auto_Data.xlsm").Activate
    '    Sheet2.Select
   '    Range("B6:H6").Select
    '    ActiveSheet.Paste
    '    Selection.AutoFilter
    '    Application.CutCopyMode = False
    '    ActiveWindow.ActivateNext
    '    ActiveWindow.Close
    '    Range("B4").Select
    Application.ScreenUpdating = True

   End Sub

1 个答案:

答案 0 :(得分:1)

直接值传输通常比副本更快,并且由于不涉及剪贴板,因此使用的内存更少。

Sub import_data()

    dim lr as long, arr as variant
    dim wb1 as workbook

    set wb1 = Workbooks.OpenText(filename:=Module33.FileDir & "\cf_data.txt"), Origin:=437, _
                                 StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
                                 ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, _
                                 Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
                                 Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), 
                                 TrailingMinusNumbers:=True)

    with wb1.sheets(1)

        lr = .range("A:G").Find(what:="*", after:=.range("A1"), searchorder:=xlbyrows, _
                                searchdirection:=xlprevious).row
        .range(.cells(2, "A"), .cells(lr, "G")).value

    end with

    wb1.close

    Workbooks("Auto_Data.xlsm").Sheet2.Range("B6").resize(ubound(arr, 1), ubound(arr, 2)) = arr

end sub