excel - 基于单元格值显示的 Excel 图像
问题描述
我在 excel 上有 2 张工作表,一张叫做 Raw,一张叫做 Graphs。我想要做的是在 Raw 中有一些单元格,它们 =TRUE 然后我想要一个形状出现在 Graphs 页面上。
我对 VBA 很陌生,所以我没有尝试太多:(
Private Sub Worksheet_Calculate()
With Worksheets("Graph")
If Me.Range("FK45").Value = True Then
.Shapes("Test1").Visible = True
Exit Sub
ElseIf Me.Range("FK45").Value = False Then
.Shapes("Test1").Visible = False
Exit Sub
End If
End With
End Sub
我可以让它工作,所以如果 FK45 为 TRUE,图像会显示,但如果 FK45 为 FALSE,它不会,但我想要做的是添加更多,例如
Private Sub Worksheet_Calculate()
With Worksheets("Graph")
If Me.Range("FK45").Value = True Then
.Shapes("Test1").Visible = True
Exit Sub
ElseIf Me.Range("FK45").Value = False Then
.Shapes("Test1").Visible = False
Exit Sub
End If
End With
With Worksheets("Graph")
If Me.Range("FK46").Value = True Then
.Shapes("Test2").Visible = True
Exit Sub
ElseIf Me.Range("FK46").Value = False Then
.Shapes("Test2").Visible = False
Exit Sub
End If
End With
End Sub
我希望它们都相互独立,并在必要时能够添加更多
如果 FK45 为 TRUE Image1 显示 如果 FK45 为 FALSE Image1 不显示和/或如果 FK46 为 TRUE Image2 显示 如果 FK46 为 FALSE Image2 不显示和/或如果 FK47 为 TRUE Image3 显示 如果 FK47 为 FALSE Image3 不显示节目
等等...
解决方案
我会这样做
在 VB 编辑器中找到您的Worksheet和Shape对象,并在各自的属性窗口中将它们的系统名称重命名为直观的名称。
这样您就可以摆脱With Worksheets("Graph")
构造,而是可以通过系统名称来调用它们,例如With Graph
. 如果您希望重命名工作表或形状,这也会派上用场。
请注意,Exit Sub
在每次单元格检查后,您的程序会在第一个单元格之后停止,并且不会继续进行。
我建议使用Worksheet.Change而不是Worksheet.Calculate事件。这样你就可以一个一个地遍历你的单元格。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngCell As Range
Dim shpImage As Shape
For Each rngCell In Target.Cells
' check if change was made in "FK"
If Not Intersect(rngCell, Me.Columns("FK")) Is Nothing Then
Select Case rngCell.Row
Case 45: Set shpImage = Graph.MyImage_1
Case 46: Set shpImage = Graph.MyImage_2
End Select
' if only boolean values present, no need for IF construction
shpImage.Visible = rngCell.Value : Set shpImage = Nothing
End If
Next
End Sub
如果您有单独的图像名称列,那会容易得多,您可以像这样检查(例如,形状名称位于“FL”列中)
Graph.Shapes(rngCell.Offset(0, 1).Value).Visible = rngCell.Value
推荐阅读
- ruby-on-rails - 提交和周边问题时 URL 已更改
- sonarqube - SonarQube:不可恢复的索引失败
- sql - 在 EDW_UPDATE_NOTE 列中一个接一个地附加更新日期
- angular - 检测Angular中组件内部的属性变化
- postgresql - 为什么这个全文搜索在 PostgreSQL 中不匹配?
- linux - cp 命令在 azure devops 的构建管道中的 Bash 脚本中不起作用
- javascript - 将字符串格式的数组转换为javascript数组
- azure - 如何仅在 AzureDevops 中下载最新的带有视图名称的 UniversalPackage?
- typescript - 如何使电子通道更安全?
- angular - 无法在 Angular 中访问 formArray 的值