Excel VBA 用户在订阅者中共享变量
Excel VBA Sharing Variable Within Userfrom Subs
所以这不是什么大不了的事,但它让我很不爽。我正在尝试在 within 用户表单之间共享一个变量。声明 public 变量似乎是一种简单的方法,但显然,您不能从用户窗体中声明 public 变量。所以看起来我必须在一个完全不相关的模块中声明变量,我觉得这很烦人。这是在用户窗体中的子之间传递变量的唯一方法吗?
对于上下文,我试图在设置用户窗体上制作 "Ok"、"Apply" 和 "Cancel" 按钮,其中 "Ok" 和 "Apply" 按钮永久更改我在设置中所做的更改。
这是从列表框 (PathList) 中删除项目的按钮。列表框正在存储作品 sheet 上的数据,但我不希望这些项目在我点击 "Apply" 之前真正从 sheet 中删除。我想与 ApplyButton_Click 子例程共享 SelectedArray() 变量,以便 "Apply" 按钮实际上可以从 sheet 中删除单元格。注释代码是我希望 "Apply" 按钮执行的操作。
Private Sub RemovePathButton_Click()
Dim SelectedArray()
Dim ctr As Integer
ctr = 1
For intCount = PathList.ListCount - 1 To 0 Step -1
If PathList.Selected(intCount) = True Then
ReDim Preserve SelectedArray(ctr)
SelectedArray(ctr) = intCount
ctr = ctr + 1
End If
Next intCount
For i = 1 To UBound(SelectedArray)
' Dim num As Integer
' num = SelectedArray(i) + 4
' Worksheets("Settings").Range("A" + CStr(num)).Delete (xlShiftUp)
PathList.RemoveItem (SelectedArray(i))
Next
End Sub
如果您在用户窗体模块的顶部声明一个变量,该变量可以被用户窗体模块上的任何控件或过程访问。
插入一个用户窗体并在其上放置两个命令按钮,然后在用户窗体模块上放置以下代码。
启动用户窗体并单击两个命令按钮以查看如何以这种方式访问变量。
Option Explicit
Dim Str As String
Private Sub CommandButton1_Click()
MsgBox Str
End Sub
Private Sub CommandButton2_Click()
Call Test
End Sub
Private Sub UserForm_Initialize()
Str = "This variable can be accessed by any code on UserForm Module."
End Sub
Sub Test()
MsgBox Str
End Sub
所以这不是什么大不了的事,但它让我很不爽。我正在尝试在 within 用户表单之间共享一个变量。声明 public 变量似乎是一种简单的方法,但显然,您不能从用户窗体中声明 public 变量。所以看起来我必须在一个完全不相关的模块中声明变量,我觉得这很烦人。这是在用户窗体中的子之间传递变量的唯一方法吗?
对于上下文,我试图在设置用户窗体上制作 "Ok"、"Apply" 和 "Cancel" 按钮,其中 "Ok" 和 "Apply" 按钮永久更改我在设置中所做的更改。
这是从列表框 (PathList) 中删除项目的按钮。列表框正在存储作品 sheet 上的数据,但我不希望这些项目在我点击 "Apply" 之前真正从 sheet 中删除。我想与 ApplyButton_Click 子例程共享 SelectedArray() 变量,以便 "Apply" 按钮实际上可以从 sheet 中删除单元格。注释代码是我希望 "Apply" 按钮执行的操作。
Private Sub RemovePathButton_Click()
Dim SelectedArray()
Dim ctr As Integer
ctr = 1
For intCount = PathList.ListCount - 1 To 0 Step -1
If PathList.Selected(intCount) = True Then
ReDim Preserve SelectedArray(ctr)
SelectedArray(ctr) = intCount
ctr = ctr + 1
End If
Next intCount
For i = 1 To UBound(SelectedArray)
' Dim num As Integer
' num = SelectedArray(i) + 4
' Worksheets("Settings").Range("A" + CStr(num)).Delete (xlShiftUp)
PathList.RemoveItem (SelectedArray(i))
Next
End Sub
如果您在用户窗体模块的顶部声明一个变量,该变量可以被用户窗体模块上的任何控件或过程访问。
插入一个用户窗体并在其上放置两个命令按钮,然后在用户窗体模块上放置以下代码。 启动用户窗体并单击两个命令按钮以查看如何以这种方式访问变量。
Option Explicit
Dim Str As String
Private Sub CommandButton1_Click()
MsgBox Str
End Sub
Private Sub CommandButton2_Click()
Call Test
End Sub
Private Sub UserForm_Initialize()
Str = "This variable can be accessed by any code on UserForm Module."
End Sub
Sub Test()
MsgBox Str
End Sub