excel VBA图表在MSGBOX处于活动状态时不会显示

3lxsmp7m  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(156)

嗨,我的问题与刚才未回答的问题相同
MsgBox caused charts to appear as blank
基本上,我在Excel中进行一些质量控制,并尝试利用VBA使其变得更容易,我的代码遍历一列,直到找到下一块标记的数据,然后创建该数据和周围数据的图表以供目视检查,然后添加了一个错误框,供用户输入他们是否认为该数据的错误标记应该删除,然而,图表不会实际显示或呈现,直到用户与msgbox交互,因为图表可以在后台查看我希望用户可以只使用这个宏,快速查看图表,说是或否,错误标志要么删除或不删除,然后脚本移动到下一个标记的数据系列。第一次使用此功能时,请随时告诉我是否有任何格式不正确的地方。代码如下:

Dim SelRange As Range
Dim ExtRange As Range
Dim cht As Object
Dim errorflag As String


Selection.End(xlDown).Select

errorflag = ActiveCell

Range(Selection, Selection.End(xlDown)).Select
Selection.Offset(0, -1).Select

Set SelRange = Selection

Set ExtRange = SelRange.Offset(-SelRange.Rows.Count).Resize(3 * SelRange.Rows.Count)

ExtRange.Select

Set cht = ActiveSheet.Shapes.AddChart2
cht.Chart.SetSourceData Source:=ExtRange
cht.Chart.ChartType = xlXYScatterSmoothNoMarkers
cht.Chart.ChartTitle.Text = errorflag & " error flag of hydrograph of " & Cells(1, ActiveCell.Column).Value


MsgBox "Do you wish to delete the selected error flags?", vbYesNo

If Result = vbYes Then
SelRange.Clear

End If

我试过作为单独的子函数,但是我不能删除我想要的变量,因为它们在前一个子函数中声明了。
我试过加停顿。
我尝试添加第二个中间msgbox。

r1zk6ea1

r1zk6ea11#

您需要允许Excel在您创建图表之后和消息框之前处理图表。实现此目的的函数是DoEvents
在这种情况下(以及其他一些情况下),需要调用DoEvents两次。
演示

Sub Demo()
    Dim rng As Range
    Dim cht As Shape
    Set rng = [c4:d8]
    Set cht = ActiveSheet.Shapes.AddChart2
    cht.Chart.SetSourceData Source:=rng
    cht.Chart.ChartType = xlXYScatterSmoothNoMarkers
    
    DoEvents
    DoEvents
    
    MsgBox "Hello"
End Sub

wbrvyc0a

wbrvyc0a2#

将您的消息放在它自己的Sub中,以及来自答案的操作。

Sub YourMessage()
    If MsgBox("Do you wish to delete the selected error flags?", vbYesNo) = vbYes Then
        ...
    End If
End Sub

那就这么叫吧

Application.OnTime Now, "YourMessage"

注意,在这个调用中不能使用局部变量。

相关问题