所以我有这个代码将打开几个csv工作簿(让我们称之为“源文件”)列在“RefData”表中,然后将其内容复制到目标文件。
我有这个代码工作,但我对它的编码方式并没有留下深刻的印象。我相信有更好的方法。
Private Sub OpenDL()
Dim i As Integer
Dim wrk As Workbook
Dim this As Workbook
lastrow = Sheets("RefData").Cells(Rows.Count, 1).End(xlUp).Row
Set wrk = ThisWorkbook
Sheets("RefData").Select
For i = 1 To lastrow
'open workbook
On Error Resume Next
Sheets(Sheets("RefData").Cells(i, 1).Value).Select
Workbooks.Open Filename:=Application.ActiveWorkbook.Path & "\" & "HistoricalPrices_" & Sheets("RefData").Cells(i, 1).Value & ".csv"
'copy Date, Open, High, Low, Close & Volume
Range("A1:" & Range("F1048576").End(xlUp).Address).Select
Selection.Copy
wrk.Activate
Sheets(Sheets("RefData").Cells(i, 1).Value).Select
Range("A1").Select
ActiveSheet.Paste
'close csv file
Application.DisplayAlerts = False
Workbooks("HistoricalPrices_" & Sheets("RefData").Cells(i, 1).Value & ".csv").Close
Application.DisplayAlerts = True
Next i
End Sub
我编码的方式是这样的:
RefData表格的屏幕截图
我的问题是有一种简单的方法可以消除步骤2和3,它会手动选择范围然后复制它吗?
我有一个想法,不确定它是否可行。它是这样的:
sourcefile.sheets(sheets("refdata").cells(i,1).value).range("A1:F" & lastrow of the destination file).value **=** destinationfile.activesheets.range("A1:F" & lastrow of the destination file).value
类似的东西:
目标文件的值> Sheet(Refdata).cells(I,1)>范围(A1到F(x)等于源文件>活动表格>范围A1到F(x)的值
其中x =源文件的最后一行?
我不确定这是否可行。任何帮助表示赞赏
答案 0 :(得分:1)
wsDest.Range("A1:" & Range("F1048576").End(xlUp).Address).value = wsOrgn.Range("A1:" & Range("F1048576").End(xlUp).Address).value
但是,您需要声明并设置wsDest
(目标工作表)和wsOrgn
(原始工作表)。你可以从:
Dim wsDest As Worksheet, wsOrgn As Worksheet
并根据流程的流程设置Worksheet
:
'before you open the source, set the destination first
Set wsDest = wrk.Sheets(Sheets("RefData").Cells(i, 1).value)
'codes
'...
'once the source file opened and active on the sheet.
Set wsOrgn = ActiveSheet
'Transfer info from source to destination sheet
wsDest.Range("A1:" & Range("F1048576").End(xlUp).Address).value = wsOrgn.Range("A1:" & Range("F1048576").End(xlUp).Address).value
通过从原点获取最后一行并在Range
和wsDest
上使用它,可以更准确地 wsOrgn
。
P.S。 LOL那些PSE股票。