我有疑问:在尝试将工作表复制到另一个工作簿时,我收到错误(错误1004)。 这是我的代码:
Sub CopyWorksheet()
Application.ScreenUpdating = False
Dim BonusRatesWB As Workbook
Dim appExcel As Application
Set appExcel = New Application
appExcel.Visible = False
Set BonusRatesWB = appExcel.Workbooks.Open("D:\Documents\Overdraft\OVERDUE customers\HARD COLLECTION\Hard Collectors Bonus Calc\BonusRates\ProblemLoansOfficerBonusRates15Sep2017.xlsx")
With ThisWorkbook
BonusRatesWB.Sheets(1).Copy After:=.Sheets(.Sheets.Count)
End With
BonusRatesWB.Close
appExcel.Quit
Application.ScreenUpdating = True
End Sub
我认为我的对象变量存在缺失/错误,但我无法弄明白。帮助将受到高度赞赏。 非常感谢提前。
答案 0 :(得分:2)
将Dim更改为此
Dim ThisWB As Workbook
然后添加:
Set ThisWB = ActiveWorkbook
您的ThisWorkbook
对象已声明但未分配值,并且要为对象指定值,您需要使用Set [object] = [value expression]
。
如果ThisWorkbook
在运行时是ActiveWorkbook
,则此方法起作用。任何其他方案都将失败,因为您无法将不同的工作簿对象分配给内置对象的ThisWorkbook
。
只需使用内置对象即可。您收到了1004错误,因为您的Sheets.Count
符合新打开的工作簿,而不是ThisWorkbook
,如果BonusRatesWB.Sheets.Count > ThisWorkbook.Sheets.Count
,则会出错。为避免这种情况,始终将工作表,范围等限定为各自的父对象。下面使用With ThisWorkbook
块:
Sub CopyWorksheet()
Application.ScreenUpdating = False
Dim BonusRatesWB As Workbook
Dim appExcel As Application
Set appExcel = New Application
appExcel.Visible = False
Set BonusRatesWB = appExcel.Workbooks.Open("D:\Documents\Overdraft\OVERDUE customers\HARD COLLECTION\Hard Collectors Bonus Calc\BonusRates\ProblemLoansOfficerBonusRates15Sep2017.xlsx")
With ThisWorkbook
BonusRatesWB.Sheets(1).Copy After:=.Sheets(.Sheets.Count)
End With
BonusRatesWB.Close
appExcel.Quit
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)
扩展答案/修订版,似乎没有必要打开Excel.Application的新实例来打开/复制工作表(实际上这是你的1004错误的来源,见下文)。
在同一个实例中打开,同时包含其他答案:
Sub CopyWorksheet()
Application.ScreenUpdating = False
Dim BonusRatesWB As Workbook
Set BonusRatesWB = appExcel.Workbooks.Open("D:\Documents\Overdraft\OVERDUE customers\HARD COLLECTION\Hard Collectors Bonus Calc\BonusRates\ProblemLoansOfficerBonusRates15Sep2017.xlsx")
With ThisWorkbook
BonusRatesWB.Sheets(1).Copy After:=.Sheets(.Sheets.Count)
BonusRatesWB.Close
End With
Application.ScreenUpdating = True
End Sub
我不会在两个不同的Excel应用程序中认为你Copy
这样的工作表,这似乎是1004错误的来源。
我不知道为什么它不适用于新实例
注意:您无法在单独的Excel实例中打开的工作簿之间移动或复制工作表。如果在单独的Excel实例中打开工作簿 - 例如,当您从Windows SharePoint Services站点打开该工作簿时,可能会发生这种情况 - 请确保在同一个Excel实例中打开该工作簿,而不是在打开对话框(“文件”选项卡,“打开”)。
如果您必须在新实例中打开,那么您可以使用this answer中建议的解决方法,只需将工作表保存为新的/临时文件,然后从Excel的原始实例打开,以便复制/粘贴。它的开销更大,但如果你需要这样做,这是唯一的方法。