Excel VBA代码,用于移动带有图像添加屏幕更新和it错误的工作表

Excel VBA代码,用于移动带有图像添加屏幕更新和it错误的工作表,vba,excel,Vba,Excel,我有一个Excel 2010宏,它打开给定文件夹中的所有工作簿,并将Sheet1从新工作簿移动到主工作簿中,主工作簿工作正常,但速度非常慢。今天我对它进行了更新,添加了Application.screenUpdate=False,以减少处理时间。Sheet1上有一个徽标,随着屏幕更新添加,徽标现在显示以下错误: “当前无法显示此图像。” 我做了一些研究,并没有发现关于这个具体错误的任何东西。一个解决方案建议我在处理过程中更改为空白页,而不进行屏幕更新,但是它不起作用。根据其他帖子,如果复制工作表

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

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

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

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

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
Sub-GetSheets()
Application.DisplayAlerts=False
Application.ScreenUpdating=False
Path=“G:\Project Dashboards\Testing Folder\”
Filename=Dir(路径&“*.xls”)
文件名“”时执行此操作
工作簿。打开文件名:=路径和文件名,更新链接:=真,只读:=真
工作簿(文件名)。激活
工作表(1)。在以下位置移动:=此工作簿。工作表(1)
ActiveSheet.Name=ActiveSheet.Cells(2,17).Value
工作簿(文件名)。关闭False
Filename=Dir()
环
活动工作簿。保存
Application.ScreenUpdating=True
端接头

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

好的,因此我不知道确切原因(对不起,我还没有看到对此的解释),但我知道2010年会出现此问题。我知道有两种可能的解决办法:

1) 在打开屏幕更新之前,您可以尝试不关闭源工作簿。我觉得这有点像货物崇拜,因为我不知道这背后的确切机制。此外,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
Sub-GetSheets()
Application.DisplayAlerts=False
Application.ScreenUpdating=False
Path=“G:\Project Dashboards\Testing Folder\”
Filename=Dir(路径&“*.xls”)
文件名“”时执行此操作
工作簿。打开文件名:=路径和文件名,更新链接:=真,只读:=真
工作簿(文件名)。激活
工作表(1).移动(在:=ThisWorkbook.Sheets(1)之后).名称=ActiveSheet.Cells(2,17).值
'工作簿(文件名)。关闭False
Filename=Dir()
环
此工作簿。保存
Application.ScreenUpdating=True
将书籍作为工作簿
对于工作簿中的每本书
如果不是此工作簿,则为Book.Close False
下一个
端接头
备选案文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
Sub-GetSheets()
Application.DisplayAlerts=False
Application.ScreenUpdating=False
Path=“G:\Project Dashboards\Testing Folder\”
作为工作簿的Dim SourceBook
将TargetBook设置为工作簿
将旧图纸调整为工作表
将新闻纸变暗为工作表
Filename=Dir(路径&“*.xls”)
文件名“”时执行此操作
设置TargetBook=此工作簿
设置Sourcebook=Workbooks.Open文件名:=路径和文件名,UpdateLink:=真,只读:=真
'工作簿(文件名)。激活
Set OldSheet=Sourcebook.Sheets(1)
Set NewSheet=TargetBook.Worksheets.Add(之后:=TargetBook.Sheets(1))
NewSheet.Name=OldSheet.Cells(2,17).Value
OldSheet.Cells.Copy目标:=新闻纸.Cells(1,1)
原始资料。关闭错误
Filename=Dir()
环
TargetBook.Save'我以为您想保存添加工作表的工作簿
Application.ScreenUpdating=True
端接头

您正在使用excel 2010吗。xlsx格式?抱歉,注意到您的格式在上面的代码示例中是.xls-但是,这是2010年吗?如果是,我想我可能有一个解决方案。@CBRF23是的,我正在使用excel 2010谢谢,这是一个奇怪的解决方法,但选项1进行了以下调整:
if Book.name thiswook.name then Book.Close False
@SarahVBA-我刚刚编辑了我的代码,查看使用
IS
操作符对对象进行布尔比较是否有效。如果它仍然不起作用,并且您需要依赖于比较属性,我建议使用
FullName
而不是
Name
,以防有两个从不同路径打开的同名工作簿。