【发布时间】:2020-04-04 22:57:32
【问题描述】:
我想让位于另一个模块中的 Sub 修改用户表单标签的 .Caption。
Private Sub UserForm_Activate()
Dim Vs_Label as string
Label_S.Caption = "something"
Call ChangeLabel(Vs_Label)
Label_S.Caption = Vs_Label
Call ChangeLabel(Label_S.Caption)
end
Sub ChangeLabel(Vs_Label)
Vs_Label = "something else"
end
第一次调用该过程时,它返回Vs_Label = "something else"。
第二次调用该过程时,它返回 Label_S.Capiton= "something"。
有人可以向我解释这里发生了什么吗?
【问题讨论】:
-
@Warcupine
Vs_Label参数(隐式)传递给ByRef,因此调用者确实看到了新值。 -
该声明毫无意义,第二次调用
ChangeLabel绝不会导致标题为“其他”以外的任何内容。 OP 一定在这里遗漏了重要的部分。 -
第二次调用不是将变量传递给函数,而是传递一个属性。可能是原因。属性返回一个临时变体/字符串女巫然后传递给子,所以只有临时变量被修改,而不是属性值。
-
@VincentG 是正确的。
ByRef指针实际上丢失了,第二次调用没有任何副作用。 -
旁注,其工作是获取某个表单上标签的标题的过程,可能应该在该表单的代码隐藏中。在 UI 代码中保留 UI 问题!
标签: vba ms-word external userform caption