【问题标题】:Excel vba selection.copy from hidden workbook app doesn't workExcel vba selection.copy 从隐藏的工作簿应用程序不起作用
【发布时间】:2017-08-03 17:48:06
【问题描述】:

我有一个包含宏的主工作簿和一个包含如下打开的数据的隐藏工作簿:

Dim ExcelApp As Object
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = False
ExcelApp.ScreenUpdating =  False
ExcelApp.DisplayAlerts = False
ExcelApp.EnableEvents = False
Dim creditsWorkbook As Workbook
Set creditsWorkbook = ExcelApp.Application.Workbooks.Open("P:\2017\" & DATA & ".xlsx")

稍后在代码中,我在该数据工作簿中选择一个范围并将其复制,然后将其粘贴到主工作簿中:

creditsWorkbook.Worksheets("List1").Range(creditsWorkbook.Worksheets("List1").Cells(5, 1), creditsWorkbook.Worksheets("List1").Cells(lastStr3, lastStb3)).Select
creditsWorkbook.Worksheets("List1").Activate
'creditsWorkbook.Worksheets("List1").Selection.Copy   '<--- error
Selection.Copy  <--- works, but copies from the Main workbook wrong stuff
Windows("Main.xlsm").Activate
Sheets("Credit portfolio").Select
Range("a4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

lastStr3lastStb3 只是包含要从creditsWorkbook 中选择的行数和列数的整数。选择工作正常(打开可见性时我可以看到它),但复制方法变得混乱。

我先尝试激活creditWorkbook,然后尝试像creditsWorkbook.Worksheets("List1").Selection.Copy 那样指定要复制的内容,但它只会给出错误object doesn't support this property or method。我不确定我应该怎么做才能获得所需的结果。

感谢任何帮助。

【问题讨论】:

  • 为什么选择 > 激活 > 复制。将您的第一个选择更改为复制creditsWorkbook.Worksheets("List1").Range(creditsWorkbook.Worksheets("List1").Cells(5, 1), creditsWorkbook.Worksheets("List1").Cells(lastStr3, lastStb3)).Copy
  • @Tim Wilkinson,我按照您的建议将其更改为复制,但现在粘贴时出现错误:Pastespecial method of range class failed。不知道为什么。如果它复制了范围,粘贴它有什么问题?

标签: vba excel


【解决方案1】:

尽可能避免使用Select

With creditsWorkbook.Worksheets("List1")
    .Range(.Cells(5, 1), .Cells(lastStr3, lastStb3)).Copy
End With
Windows("Main.xlsm").Sheets("Credit portfolio").Range("A4").PasteSpecial_ 
    Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

【讨论】:

  • 它在这一行给出一个错误:Windows("Main.xlsm").Sheets("Credit portfolio").Range("A4").PasteSpecial_ Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False:Object doesn't support this property or method
  • 而不是Windows("Main.xlsm").Sheets("Credit portfolio")... 尝试ThisWorkbook.Worksheets("Credit portfolio").Range...。这是假设你的宏在 Main.xlsm
  • 我刚刚尝试过,这对我有用。您可以尝试使用相同的方法从您的活动工作簿中复制一些内容吗
  • @Zac,我让隐藏的应用程序可见并尝试手动复制粘贴。我想的是,当我打开主工作簿并尝试粘贴到 A4 单元格中时,会出现一条消息,指出我尝试粘贴的范围具有将作为值粘贴的公式。也许有人尝试从受保护模式或其他 Excel 应用程序中粘贴公式。看起来我的情况是我尝试从一个 excel 应用程序粘贴到另一个,这就是出现该消息的原因。当我点击确定时它可以工作,但我想知道你为什么没有收到消息以及如何摆脱它的代码。
  • 在尝试复制之前尝试添加:Application.DisplayAlerts = False。复制后记得设置回True
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多