0

我需要帮助才能使两个不同的下拉菜单正常工作。每个菜单项都需要一个选项,以图像的形式给出答案。我可以让第一个菜单工作,但第二个菜单似乎不起作用。我知道我不能有两个同名的 Sub worksheet_calculates,但范围 (f1:f18) 也会出错。菜单的作用完全相同,但在不同的单元格中给出答案。我附上了我在 Visual Basic for Excel2010 中使用的代码。如果我删除 :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
4

1 回答 1

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

有关Worksheet_Change Events. _
有关更多信息,请参阅此内容Target

希望这可以帮助!

于 2013-11-06T15:36:37.690 回答