vba - Excel VBA代码移动带有图像的工作表添加屏幕更新和错误

标签 vba excel

我有一个 Excel 2010 宏,可以打开给定文件夹中的所有工作簿,并将 Sheet1 从新工作簿移动到主工作簿中,该工作簿正在工作但速度极慢。今天我更新了它以包含 Application.ScreenUpdating = False以减少处理时间。 Sheet1 上有一个 Logo ,并且随着屏幕更新添加,该 Logo 现在显示以下错误:

“目前无法显示此图像。”

我做了一些研究,没有发现任何关于这个特定错误的信息。一种解决方案建议我在处理过程中更改为空白页面而不进行屏幕更新,但它不起作用。根据其他帖子,如果您复制工作表而不是移动它,则会经常发生错误,因为图像不是单元格的一部分。

下面是我正在使用的代码的简化版本,它仍然会导致错误:

Sub GetSheets()

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Path = "G:\Project Dashboards\Testing Folder\"

Filename = Dir(Path & "*.xls")
Do While Filename <> ""

Workbooks.Open Filename:=Path & Filename, UpdateLinks:=True, ReadOnly:=True
Workbooks(Filename).Activate

Sheets(1).Move after:=ThisWorkbook.Sheets(1)
ActiveSheet.Name = ActiveSheet.Cells(2, 17).Value

Workbooks(Filename).Close False
Filename = Dir()
Loop

ActiveWorkbook.Save
Application.ScreenUpdating = True

End Sub

如果您注释掉 Application.ScreenUpdating = False图像根据需要随工作表一起移动。

最佳答案

好的,所以我不知道确切的原因(抱歉 - 我还没有看到对此的解释)但我知道在 2010 年存在这个问题。我知道两种可能的解决方法:

1)您可以尝试在打开屏幕更新之前不要关闭源工作簿。这对我来说有点像 cargo 崇拜,因为我不知道它为什么起作用的确切机制。此外,IIRC 我认为它不适用于作为链接插入的图像。
2)您可以尝试使用 Range.Copy,它应该适用于任何图像

代码示例:

代码示例完全未经测试
选项1:

Sub GetSheets()

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Path = "G:\Project Dashboards\Testing Folder\"

Filename = Dir(Path & "*.xls")
Do While Filename <> ""

    Workbooks.Open Filename:=Path & Filename, UpdateLinks:=True, ReadOnly:=True
    Workbooks(Filename).Activate

    Sheets(1).Move (after:=ThisWorkbook.Sheets(1)).Name = ActiveSheet.Cells(2, 17).Value

    'Workbooks(Filename).Close False
    Filename = Dir()
Loop

ThisWorkbook.Save
Application.ScreenUpdating = True

Dim Book as Workbook
For Each Book in Workbooks
    If Not Book Is ThisWorkbook then Book.Close False
Next

End Sub

选项2:
Sub GetSheets()

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Path = "G:\Project Dashboards\Testing Folder\"

Dim SourceBook as Workbook
Dim TargetBook as Workbook
Dim OldSheet as Worksheet
Dim NewSheet as Worksheet

Filename = Dir(Path & "*.xls")
Do While Filename <> ""
    Set TargetBook=ThisWorkbook
    Set Sourcebook=Workbooks.Open Filename:=Path & Filename, UpdateLinks:=True, ReadOnly:=True
    'Workbooks(Filename).Activate
    Set OldSheet=Sourcebook.Sheets(1)
    Set NewSheet=TargetBook.Worksheets.Add (After:=TargetBook.Sheets(1))
    NewSheet.Name = OldSheet.Cells(2, 17).Value
    OldSheet.Cells.Copy Destination:=NewSheet.Cells(1,1)
    Sourcebook.Close False
    Filename = Dir()
Loop

TargetBook.Save 'I assumed you wanted to save the workbook you added sheets to
Application.ScreenUpdating = True

End Sub

关于vba - Excel VBA代码移动带有图像的工作表添加屏幕更新和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551700/

相关文章:

vba - 如何使用 VBA 创建在 powerpoint 中具有菜单的加载项?

c# - 使用后期绑定(bind)创建和填充 Excel 工作表

python - 将 unicode 字符串写入 Excel 2007

VBA复制按钮从文本框中复制文本

Python - 使用 pandas 将数据格式化为 Excel 电子表格

vba - Excel VBA 创建所有可能的组合(不重复)

vba - 嵌套循环和If,不执行循环

vba - 如何更改 Excel VBA 项目中的全局变量名称?

excel - 使用 Excel 的 Powershell 脚本运行缓慢

excel - 如果单元格范围已满,则复制