在EXCEL中的图片,能按条件显示,前提是先要将图片的名字先变号。然后用下面的函数:
注:引号里面的为条件。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, ML, MT, MW, MH
On Error Resume Next
ActiveSheet.DrawingObjects.Delete
If Cells(1, 1) = "亚特兰大" Then 'Cells(1, 1):括号前面数字表示行号、后面数字表示列号 ;
Sheets(2).Shapes(1).Copy 'Sheets(2)表示工作表“Sheet2”;Shapes(1)表示工作表“Sheet2”里的第一个插入的图片,即“图片1”
Set rng = Cells(1, 2)
With rng
ML = .Left
MT = .Top
MW = .Width
MH = .Height
.Select
ActiveSheet.Paste
End With
End If
With Selection.ShapeRange
.LockAspectRatio = msoFalse '取消锁定纵横选项
.Left = ML
.Top = MT
.Width = MW
.Height = MH
End With
If Cells(2, 1) = "博洛尼亚" Then '要继续增加,就从这里复制
Sheets(2).Shapes(2).Copy
Set rng = Cells(2, 2)
With rng
ML = .Left
MT = .Top
MW = .Width
MH = .Height
.Select
ActiveSheet.Paste
End With
End If
With Selection.ShapeRange
.LockAspectRatio = msoFalse '取消锁定纵横选项
.Left = ML
.Top = MT
.Width = MW
.Height = MH
End With '到这里结束,里面的图片名和行号、列号自己改就是了。
End Sub
用宏写是没问题,只是楼主要决定何时触发,比如,设定在工作簿打开和A1 change事件发生时触发运行:,请下载参考附件
新建模块,插入代码:
Sub ProcessPic()
ThisWorkbook.Sheets(1).Shapes(1).Visible = ThisWorkbook.Sheets(1).Cells(1, 1)
End Sub
工作簿打开事件
Private Sub Workbook_Open()
ProcessPic
End Sub
Sheet1 Change事件
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then ProcessPic
End Sub
Sub tesxt()
If [a1] = 1 Then
Sheet1.Shapes("图片名").Visible = True
Else
Sheet1.Shapes("图片名").Visible = False
End If
End Sub
要用到宏才行吧。