我需要帮助才能使两个不同的下拉菜单工作。每个菜单项都需要一个选择,以图像的形式给出答案。我可以让第一个菜单工作,但第二个菜单似乎不起作用。我知道我不能有两个具有相同名称的Sub worksheet_calculates,但范围(f1:f18)也会出错。菜单完全相同,但在不同的单元格中给出答案。我已经附加了我在Excel2010的visual basic中使用的代码。如果我删除:f18,那么第一个菜单效果很好。我希望我能传达我的愿望和问题。感谢
Private Sub Worksheet_Calculate()
Dim oPic As Picture
Me.Pictures.Visible = False
With Range("F1:F18")
For Each oPic In Me.Pictures
If oPic.Name = .Text Then
oPic.Visible = True
oPic.Top = .Top
oPic.Left = .Left
Exit For
End If
Next oPic
End With
End Sub
答案 0 :(得分:0)
好的,根据你告诉我的内容,我修改了你的代码(见下文)。
经过测试并在Excel 2010中运行
无论您有哪些工作表,在VBEditor中,双击项目资源管理器中的工作表名称,然后将此代码粘贴到该工作表模块中。
Private Sub Worksheet_Change(ByVal Target As Range)
'This line checks to see whether the cell that changed is F1 or F18.
If Intersect(Target, Range("A8,A11")) Is Nothing Then Exit Sub
Dim oPic As Picture
'This line hides all the pictures on the sheet.
ActiveSheet.Pictures.Visible = False
'This line looks through all the pictures on the sheet and unhides the one _
'whose name matches the name in the drop down.
For Each oPic In ActiveSheet.Pictures
If oPic.Name = Target.Value Then
oPic.Visible = True
If Target.Address = Range("A8").Address Then
oPic.Top = Range("F1").Top
oPic.Left = Range("F1").Left
Else
oPic.Top = Range("F18").Top
oPic.Left = Range("F18").Left
End If
Exit For
End If
Next oPic
End Sub
备注强>
此代码仅在您启用Events
时才有效。检查此问题的一种快速方法是将其粘贴到立即窗口中,然后按Enter
(Ctrl+G
打开立即窗口):
?Application.EnableEvents
如果结果显示True
,那么你很高兴。如果它显示为False
,请将其粘贴到立即窗口中,然后按Enter
:
Application.EnableEvents = True
您在上面的代码中看到的Target
是指工作表中值已更改的单元格。只要该表中的任何单元格中的值发生更改,此代码就会触发。这就是为什么我在开头添加了第一个If Statement
来检查更改的单元格是F1
还是F18
。
See this了解有关Worksheet_Change Events
的更多信息
See this Target
有关{{1}}的更多信息。
希望这有帮助!