我找到了解决问题的各种解决方案,但是我需要过多的自主权:我正在编写我的第一个视觉基础程序,所以我不太了解。我尝试过这些解决方案,但它们不起作用,大概是因为我搞砸了建议代码的位置。
我想根据单元格何时更改为某个值来运行宏。当单元格从上述值变为其他值时,我想要一个不同的宏运行。所以我有一个带有值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。如果有人找到一种更有效的方法来解决我在第二段中提出的问题,那也很好。我确信我正在尝试的方式不是最有效的方式。
答案 0 :(得分:1)
删除Dim Switch
。
创建一个新模块。
将其命名为modPublic
。
在那里写Public Switch as String
。
或强>
创建一个新的工作表。将其命名为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使用。考虑mySwitch
或SwitchMe
或其他内容。
答案 1 :(得分:0)
删除Dim Switch
,然后在子程序范围之外添加Public Switch as String
,如果您希望其他子程序能够“看到”它。