在用户表单中调用数组终止/closuresVBA

我有一个问题,我想在用户窗体closures时将用户窗体的内容存储在数组中。 我以为我有正确的语法,但似乎不重新填充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 

对于用户forms尤其如此

正如@Ralph所指出的,不是closures用户窗体,而只是使用户窗体不可见。 这将保留表单上的所有信息,而不需要将数据传输到其他variables,并且可能是最简单的选项,假设closures表单是没有必要的。

如果您的variables只需要在工作簿打开时存活:

您可以在子运行之后维护variables,方法是在声明Sub之前,在模块级声明该variables为Public。 例如,下面的模块代码在整个工作簿的持续时间中保存了i的值,并且每当单击任一button时,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 

请注意,尽可能长时间限制公共variables的使用通常被认为是良好的做法; 在子程序级别声明的variables的粘贴允许用户更容易地识别哪些variables实际上是需要运行的代码,特别是因为在VBA中使用还没有被声明的variables是常见的(虽然不好的做法)。 不必要地使用公共variables可能会鼓励懒惰。

如果您的variables需要在工作簿closures和打开时存活:

如果您希望在打开和closures工作簿之间存储这样的数据,则有几个选项可以使数据对用户不可见[出于各种原因]:

– 你可以保留一个空的表单,这些表单中的值落入数组中,然后隐藏和保护该表单。 这是存储数据数组的最简单的方法之一,只要保密性不是问题[因为存储在工作表中的数据可以由承诺的用户平均访问,无论工作簿是否受密码保护]

– 您可以将数据存储在另一个文件中,然后Excel将在启动时将其拉入数组中。 这样做的好处是保持原始文件更小,并且如果需要考虑机密性,则可以将附加文件存储在只有一些用户才能访问的networking位置。

– 您可以创build不可见的形状,并编辑这些形状的内部属性,如标题。 这些数据对于用户来说可能是可访问但不显眼的; 可能不是一个数据arrays的好select,但它可能是。

不幸的是,当代码超出范围时,VBA不支持持久性内存存储(例如,子例程结束执行)。 将价值直接写到记忆中有一些非常古老的方法,但对于那些不熟悉这种方法的人来说,这些方法非常麻烦和危险。

我能想到的可能的解决scheme是从表单中直接或通过数组获取数据,并将其写入Excel中的隐藏工作表。 您也可以将数据存储在数据库中或将其写入文本文件。

由于您已经在Excel参考库中工作,隐藏的工作表更容易编码。 写入数据库或文本文件意味着设置或创build对适用参考库的引用,并了解如何执行这些操作的语法。