使用 VBA 的数组更新 VISIO 中的文本框
Updating Text Boxes in VISIO using an array with VBA
我正在尝试使用分配的数组更新文本框值。看来我可以更新“项目”本身而不是对象?有人对如何更好地解决这个问题有一些建议吗?
这就是我目前所拥有的。我也不确定如何将对象正确设置为数组。
Dim spcList(1 To 3) As Integer
Dim item As Variant
spcList(1) = Me.txt1.Value
spcList(2) = Me.txt2.Value
spcList(3) = Me.txt3.Value
' Spacing Error Handling
For Each item In spcList:
item = 0.875
Debug.Print item
Next
我的 VBA 已经生锈了,但我相信为此目的,事情的工作原理与 VB.Net 中的几乎相同,我对后者更熟悉一些。免责声明到此为止,让我们继续。
如果你想替换数组中的值,就像问题中的代码试图做的那样,无论是整数还是像引用这样更复杂的东西,你必须使用传统的 For
循环:
Dim i As Integer
For i = 1 To 3
spcList(i) = 0.875
Next
这是因为 For Each
语句中的循环变量从集合中获取值的 copy。所以对于一个整数,就像这里一样,原始代码只会对变量中保存的副本进行赋值。
为了进一步说明正在发生的事情并希望加深您对该语言的理解,我们还来看看原始代码如何处理引用类型。在这种情况下,循环变量 仍然获得一个副本 ,但不是整个对象的副本:仅引用 。这是可行的,因为副本仍然引用内存中的 相同对象 。
因此,为循环变量分配一个新的对象引用与更简单的 Integer 类型具有相同的结果,并且数组中的对象引用不会改变,因为我们只是替换了副本。然而,如果你要在循环变量上调用一个方法,或者分配给对象的 属性,这些事情会像你期望的那样工作,因为(再次)循环变量中复制的引用仍然引用内存中的同一对象,因此您正在对该对象的状态进行操作。
我正在尝试使用分配的数组更新文本框值。看来我可以更新“项目”本身而不是对象?有人对如何更好地解决这个问题有一些建议吗?
这就是我目前所拥有的。我也不确定如何将对象正确设置为数组。
Dim spcList(1 To 3) As Integer
Dim item As Variant
spcList(1) = Me.txt1.Value
spcList(2) = Me.txt2.Value
spcList(3) = Me.txt3.Value
' Spacing Error Handling
For Each item In spcList:
item = 0.875
Debug.Print item
Next
我的 VBA 已经生锈了,但我相信为此目的,事情的工作原理与 VB.Net 中的几乎相同,我对后者更熟悉一些。免责声明到此为止,让我们继续。
如果你想替换数组中的值,就像问题中的代码试图做的那样,无论是整数还是像引用这样更复杂的东西,你必须使用传统的 For
循环:
Dim i As Integer
For i = 1 To 3
spcList(i) = 0.875
Next
这是因为 For Each
语句中的循环变量从集合中获取值的 copy。所以对于一个整数,就像这里一样,原始代码只会对变量中保存的副本进行赋值。
为了进一步说明正在发生的事情并希望加深您对该语言的理解,我们还来看看原始代码如何处理引用类型。在这种情况下,循环变量 仍然获得一个副本 ,但不是整个对象的副本:仅引用 。这是可行的,因为副本仍然引用内存中的 相同对象 。
因此,为循环变量分配一个新的对象引用与更简单的 Integer 类型具有相同的结果,并且数组中的对象引用不会改变,因为我们只是替换了副本。然而,如果你要在循环变量上调用一个方法,或者分配给对象的 属性,这些事情会像你期望的那样工作,因为(再次)循环变量中复制的引用仍然引用内存中的同一对象,因此您正在对该对象的状态进行操作。