小编mki*_*son的帖子

Excel VBA代码竞争条件无法通过Wait,Sleep,DoEvents等修复

解决了!请参阅以下代码了解解决方案!

我有一个Excel文件,其中包含一系列文本旁边的多个形状对象.我编写了一个脚本来识别每个形状的位置,识别文本右侧和下方延伸的单元格数量,将其设置为范围,然后将其导入图表对象,以便将其保存为.jpg.

问题是在创建图表和粘贴字符串之间存在竞争条件.如果我单步执行脚本它工作正常,但是一旦我运行它我只得到空白图像.

我试过Application.ScreenUpdating = True; Application.PrintCommunication = True; 和DoEvents

我也尝试过Application.Wait,但即使让它等待十秒也不行,当踩过代码时,图表加载的时间不到2秒.

最近我也尝试了kernel32 sleep方法,但这似乎也没有用.同样,我让系统睡眠的时间远远超过了我的踩踏.我还在With语句中的每一行之间添加了所有上述方法(显然不是作为解决方案,而是作为测试),这也不起作用..

在这一点上,我完全不知所措.

如果我在.Chart.Paste停止然后运行脚本(F5),然后继续点击Run,那么脚本运行得非常好.我只是不希望用户必须坐在那里并运行600次.

在创建图表和粘贴文本之间存在明显的冗余.这一切都是为了让代码在运行时正常工作,一旦找到解决方案,大部分代码都将被删除.



    Option Explicit

    Public Function ChartCheck() As String

    ReCheckChart:
    DoEvents
    If ActiveWorkbook.ActiveSheet.ChartObjects.Count > 0 Then
    GoTo ContinuePaste:
    Else
    GoTo ReCheckChart:
    ContinuePaste:
    End If

    End Function


    Public Function GetFolder() As String

    Dim fldr As FileDialog
    Dim sItem As String

    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder to Save the Images In"
        .AllowMultiSelect = False
        If .Show  -1 Then GoTo NextCode:
        sItem = .SelectedItems(1) …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba race-condition

4
推荐指数
1
解决办法
525
查看次数

标签 统计

excel ×1

excel-vba ×1

race-condition ×1

vba ×1