arrays - 在用户窗体终止/关闭 VBA 时调用数组

标签 arrays excel vba userform

我有一个问题,当用户窗体关闭时,我想将用户窗体的内容存储在数组中。我认为我的语法正确,但似乎不会在用户窗体初始化时重新填充。我尝试将数组放入其自己的模块中,但这也不起作用。有人愿意启发我吗?

示例代码:

Public Sub DPArrayStuff()

Dim DP(2)
DP(0) = Block1
DP(1) = Block2
DP(2) = Block3

End Sub

Private Sub userform_terminate()

If Block1.Value <> vbNullString Then Call DPArrayStuff

End Sub

Private Sub userform_Initialize()

If DP(0) <> vbNUllString Then 
    Block1 = DP(0)
    Block2 = DP(1)
    Block3 = DP(2)
End If

End Sub 

最佳答案

特别是对于用户表单

正如@Ralph 所指出的,您可以仅使用户窗体不可见,而不是关闭用户窗体。这将保留表单上的所有信息,而无需将数据传输到其他变量,并且假设不需要关闭表单,这可能是最简单的选项。

如果您的变量只需要在工作簿打开时保留:

您可以在子程序运行后维护变量,方法是在声明子程序之前在模块级别将该变量声明为 Public。例如,下面的模块代码在整个工作簿的持续时间内保存 i 的值,并且每次单击任一按钮时,都会对 i 进行操作并保留以供进一步使用。

Public i As Integer

Sub Button1_Click()
    i = i + 1
    Range("A1").Value = i
End Sub

Sub Button2_Click()
    i = i + 1
    Range("A1").Value = i
End Sub

请注意,尽可能长时间地限制公共(public)变量的使用通常被认为是良好的做法;坚持使用在子例程级别声明的变量可以让用户更轻松地识别运行代码实际需要哪些变量,特别是因为在 VBA 中使用尚未声明的变量是很常见的(尽管做法不佳)。不必要地使用公共(public)变量可能会鼓励懒惰。

如果您的变量需要在工作簿关闭和打开后继续存在:

如果您想在打开和关闭工作簿之间存储这样的数据,您可以通过几个选项来实现,以便您的用户[出于各种原因]看不到这些数据:

- 您可以保留一个放入数组值的空工作表,然后隐藏和保护该工作表。只要不考虑 secret 性,这是存储数据数组的最简单方法之一[因为无论工作簿是否受密码保护,存储在工作表中的数据都可以被忠诚的用户轻松访问]

- 您可以将数据存储在另一个文件中,然后 Excel 在启动时将其拉入数组中。这样做的优点是可以使原始文件更小,如果担心 secret 性,您可以将附加文件存储在只有某些用户可以访问的网络位置。

-您可以创建不可见的形状并编辑这些形状的内部属性,例如它们的标题。这些数据可能是可访问的,但对用户来说并不显眼;对于数据数组来说可能不是一个很好的选择,但它可能是。

关于arrays - 在用户窗体终止/关闭 VBA 时调用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35458356/

相关文章:

c++ - 如何将二维数组传递给函数以便代码可以编译

php - 如何从Mysql返回PHP数组

Java Excel自动化单元格背景颜色重复setFillForegroundColor

vba - 随着报告的增长,代码变慢

excel - 尝试访问字典中的排序列表时出现类型不匹配错误

c++ - 数组和搜索它们

PHP/MYSQL - 检索多个结果并创建数组

r - 卡方检验 R 和 excel

VBA "Compile Error: Label not defined"

vba - 打开/关闭标志以更改名称