excel - 如何在 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
ComboBox1
Userform
在初始化期间填充如下。
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
ComboBox1
values 是工作表名称
解决方案
试试这个 -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
- 这样您可以在需要时重命名表单,而无需编辑所有代码。
推荐阅读
- php - 无法在端口可用的 XAMPP 上启动 Apache 服务器
- linux - 通过网络获取最新版本 rpm 的最有效方法
- varnish - 尽管将 TTL 设置为 0,但清漆会在一段时间后重置
- codeigniter - 页面浏览量 mysql
- ios - 如何从 swift5 的 web 视图中删除 iOS 内部的滚动?
- android - 如何为我的 gps 交互器类编写单元测试?
- sql - SQL - 棘手的合并
- php - 改变属性Wordpress 中的评论表单
- python - 计算更多的元素然后它应该是
- android - 使用 WSDL Importer 调用 Web 服务时出现问题