Visual Basic for Excel2010代码错误

时间:2013-10-29 15:48:48

标签: image excel excel-vba excel-2010 vba

我需要帮助才能使两个不同的下拉菜单工作。每个菜单项都需要一个选择,以图像的形式给出答案。我可以让第一个菜单工作,但第二个菜单似乎不起作用。我知道我不能有两个具有相同名称的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

1 个答案:

答案 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时才有效。检查此问题的一种快速方法是将其粘贴到立即窗口中,然后按EnterCtrl+G打开立即窗口):

?Application.EnableEvents

如果结果显示True,那么你很高兴。如果它显示为False,请将其粘贴到立即窗口中,然后按Enter

Application.EnableEvents = True

您在上面的代码中看到的Target是指工作表中值已更改的单元格。只要该表中的任何单元格中的值发生更改,此代码就会触发。这就是为什么我在开头添加了第一个If Statement来检查更改的单元格是F1还是F18

See this了解有关Worksheet_Change Events的更多信息 See this Target有关{{1}}的更多信息。

希望这有帮助!