基于细胞变化的宏观

时间:2017-06-19 13:19:29

标签: excel vba excel-vba

我找到了解决问题的各种解决方案,但是我需要过多的自主权:我正在编写我的第一个视觉基础程序,所以我不太了解。我尝试过这些解决方案,但它们不起作用,大概是因为我搞砸了建议代码的位置。

我想根据单元格何时更改为某个值来运行宏。当单元格从上述值变为其他值时,我想要一个不同的宏运行。所以我有一个带有值A,B和C的下拉列表,我希望在值变为A时运行macro_A,并在值变为A以外的值时运行macro_notA。

这是基本问题。从这里开始,我将提供一些关于到目前为止我尝试过的内容的更多信息,以及我遇到问题的地方。我目前正在使用具有以下基本结构的子:

Sub worksheet_change(ByVal target As Range)
    If Range("TargetCell").Value = "C" Then
        If Switch = "0" Then
            Switch = "1"
            Call Macro_A
        End If
    End If
    If Range("TargetCell").Value <> "C" Then
        If Switch = "1" Then
            Switch = "0"
            Call Macro_notA
        End If
    End If
End Sub

其中Switch是我在ThisWorkbook代码窗口中定义的变量,使用:

Private Sub Workbook_Open()
    Dim Switch

    If Range("TargetCell").Value <> "A" Then
        Switch = "1"
    End If

    If Range("TargetCell").Value = "A" Then
        Switch = "0"
    End If
End Sub

具体问题是我使用的子设备似乎无法识别Switch Variable。如果有人找到一种更有效的方法来解决我在第二段中提出的问题,那也很好。我确信我正在尝试的方式不是最有效的方式。

2 个答案:

答案 0 :(得分:1)

  1. 删除Dim Switch

  2. 创建一个新模块。

  3. 将其命名为modPublic

  4. 在那里写Public Switch as String

  5. 创建一个新的工作表。将其命名为tblSettings。 在单元格&#34; A1&#34;。

    中写入开关的值

    在新模块中,创建以下函数以获取开关:

    Public Function TellMeTheSwitch() As Boolean
        TellMeTheSwitch = tblSettings.Range("A1")
    End Function
    

    创建以下Sub以设置开关:

    Public Sub ChangeSwitch()
        tblSettings.Range("A1") = Not tblSettings.Range("A1")
    End Sub
    

    通常,不要将Switch用于变量名,它由VBEditor使用。考虑mySwitchSwitchMe或其他内容。

答案 1 :(得分:0)

删除Dim Switch,然后在子程序范围之外添加Public Switch as String,如果您希望其他子程序能够“看到”它。