Excel 使用不同工作簿的参考资料
此代码的思想是从名为My list.xlsx的工作簿启动它,并在My list的工作表FX上创建一个列表;此列表将基于另一个已打开的名为Daily prices.xlsm的工作簿的电子表格 当我尝试到处玩的时候,它似乎不喜欢我引用其他工作簿上的列表来复制它的方式。这是我的密码:Excel 使用不同工作簿的参考资料,excel,vba,Excel,Vba,此代码的思想是从名为My list.xlsx的工作簿启动它,并在My list的工作表FX上创建一个列表;此列表将基于另一个已打开的名为Daily prices.xlsm的工作簿的电子表格 当我尝试到处玩的时候,它似乎不喜欢我引用其他工作簿上的列表来复制它的方式。这是我的密码: Sub forEachWs() Dim ws As Worksheet, dest As Worksheet Dim LastRow As Long Dim LastRowDestination
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
正如您所说,您并没有指出问题发生的确切位置,但我确实看到了一些潜在的错误区域,我将在违规行上方指出:
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中可能使用了其他未显示的代码。选择将更改Active工作簿的内容的代码
使用此方法设置工作簿变量要好得多,因为无论当前处于活动状态的工作簿是什么,都可以保证它是准确的-这是分配工作簿变量的首选方法
您的工作表假定在ActiveWorkbook中,同样,不保证当前活动工作簿中的任何内容都会有一个FX工作表。建议将其更改为设置Dest=ExRateWb.WorksheetsFX或设置Dest=DailyPrices.WorksheetsFX(视情况而定)
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是一个工作簿变量,其中包含一组工作表,您已在For Each中引用了这些工作表。。。语句,该语句创建了您当前所在的循环。再次引用它将无效。ws是对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
如果这些更改不能解决该问题,请具体说明错误的位置,以及错误的具体内容。在哪一行标记错误?
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