首页 > 解决方案 > 如何在 excel VBA 用户窗体中显示 excel 工作表图表

问题描述

我有一个带有两个控件的用户窗体。一个名为的组合框ComboBox1和一个名为image1. 我正在尝试在更改事件image1期间在工作表上显示图表,如下所示ComboBox1

Private Sub ComboBox1_Change()
  Call UpdateChart
End Sub

Private Sub UpdateChart()

Dim sTempFile As String
Dim oChart As Chart

sTempFile = Environ("temp") & "\temp.gif"

Set oChart = Worksheets(UserForm1.ComboBox1.Value).ChartObjects("Chart 1").Chart

oChart.Export Filename:=sTempFile, FilterName:="GIF"

UserForm1.Image1.Picture = LoadPicture(sTempFile)

Kill sTempFile

End Sub

这工作得很好。但是,一旦我单击图像,ComboBox1更改事件就不再起作用了。换句话说,如果我单击图像,图表不会根据组合框的变化而变化。有谁知道为什么?PS:我从其他网站获取了上面的代码,并根据我的需要进行了修改。

编辑 1

ComboBox1Userform在初始化期间填充如下。

Private Sub UserForm_Initialize()
With UserForm1.ComboBox1
    Dim ws As Worksheet
    For Each ws In Worksheets
        Select Case ws.Name
            Case "MainPage", "Raw Data"

            Case Else
                .AddItem ws.Name
        End Select
    Next ws
End With
End Sub

ComboBox1values 是工作表名称

标签: excelvba

解决方案


试试这个 -Me.Repaint为我添加修复它

Private Sub UpdateChart()

    Dim sTempFile As String
    Dim oChart As Chart

    sTempFile = Environ("temp") & "\temp.gif"

    Set oChart = Worksheets(Me.ComboBox1.Value).ChartObjects("Chart 1").Chart

    oChart.Export Filename:=sTempFile, FilterName:="GIF"

    Me.Image1.Picture = LoadPicture(sTempFile)

    Me.Repaint   '<<<<<

    Kill sTempFile

End Sub

仅供参考,最好在表单代码中使用Me而不是(例如)UserForm1- 这样您可以在需要时重命名表单,而无需编辑所有代码。


推荐阅读