此代码的想法是从名为" My list.xlsx
"的工作簿中启动它。并在工作表上创建一个列表" FX
"我的名单;此列表将基于另一个已打开的工作簿的电子表格,该工作簿名为" Daily prices.xlsm
"。
当我尝试玩游戏时,似乎它不像我引用其他工作簿上的列表来复制它的方式。这是我的代码:
Sub forEachWs()
Dim ws As Worksheet, dest As Worksheet
Dim LastRow As Long
Dim LastRowDestination As Long
Dim ExRateWb As Workbook
Dim DailyPrices As Workbook
Set ExRateWb = ActiveWorkbook
Set DailyPrices = Workbooks("Daily prices.xlsm")
Set dest = Worksheets("FX")
For Each ws In DailyPrices.Worksheets
Select Case ws.Name
Case "FX", "BBG prices", "PRICES"
Case Else
MsgBox DailyPrices.Name
LastRow = ws.UsedRange.Rows.Count
LastRowDestination = dest.UsedRange.Rows.Count + 2
DailyPrices.ws.Range(Cells(1, 1), Cells(LastRow, 5)).Copy
ExRateWb.dest.Cells(LastRowDestination, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Select
Next
End Sub
答案 0 :(得分:0)
作为kaybee99 mentioned,您没有准确指出问题发生的位置,但我确实看到了一些潜在的错误区域,我会在违规行上方注明:
Sub forEachWs()
Dim ws As Worksheet, dest As Worksheet
Dim LastRow As Long
Dim LastRowDestination As Long
Dim ExRateWb As Workbook
Dim DailyPrices As Workbook
假设这将指向此代码所在的工作簿。但是,我们无法保证仍然如此,因为其他代码(您的OP中未显示)可能使用了<workbook>.Select
,这会改变ActiveWorkbook
的内容
Set ExRateWb = ActiveWorkbook
使用此方法设置“工作簿”变量要好得多,因为无论当前哪个工作簿处于活动状态,它都保证准确无误 - 这是分配
Workbook
变量的首选方法。
Set DailyPrices = Workbooks("Daily prices.xlsm")
假设您的工作表位于ActiveWorkbook
,同样,无法保证当前活动工作簿中的任何内容都会包含FX
工作表。建议酌情将其更改为Set Dest = ExRateWb.Worksheets("FX")
或Set Dest = DailyPrices.WorkSheets("FX")
Set dest = Worksheets("FX")
For Each ws In DailyPrices.Worksheets
Select Case ws.Name
Case "FX", "BBG prices", "PRICES"
我建议至少在此处发表评论,承认您故意不为这三个工作表做任何事情。帮助防止下次您(或其他人)通过您的代码时出现问题。想知道什么意外删除......
Case Else
MsgBox DailyPrices.Name
LastRow = ws.UsedRange.Rows.Count
LastRowDestination = dest.UsedRange.Rows.Count + 2
DailyPrices
是一个Workbook变量,其中包含您已在For Each...
语句中引用的工作表集合,该语句创建了您当前所在的循环。再次引用它将无效。 ws
是对DailyPrices
工作簿中当前(在此循环中)工作表的引用。删除下面的DailyPrices.
参考
DailyPrices.ws.Range(Cells(1, 1), Cells(LastRow, 5)).Copy
与上述注释类似,Dest
已被定义为属于特定工作簿的工作表,因此ExRateWb
限定符是不必要的,实际上是无效的。删除它。
ExRateWb.dest.Cells(LastRowDestination, 1).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Select
Next
End Sub
如果这些更改无法解决问题,请详细说明您收到错误的位置,以及错误的确切位置。