使用记录的宏来处理项目以完成工作簿之间的复制和粘贴。录制的宏一直在起作用,但在阅读论坛时,人们在说复制/粘贴方法需要花费更多时间才能运行宏,并且效率很低。因此,我尝试敲出复制目标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
答案 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