【问题标题】:Passing 1 of 3 values to a Sub将 3 个值中的 1 个传递给 Sub
【发布时间】:2017-02-16 21:02:06
【问题描述】:

我想更新 Sub 中的单个(3 个中的 1 个)变量。

3 个变量已经赋值,但我想更新其中一个变量。

请参阅下面的脚本,了解在不同 Macros 中的 sub 之间传递 strings 的简单示例

在宏 1 中

Sub Sub1()

Text1 = "First Text"
Text2 = "Second Text"
Text3 = "Third Text"

Call Macro2.Sub2(Text1, Text2, Text3)

End Sub

在宏 2 中

Public PassedText1, PassedText2, PassedText3 As String
Sub Sub2(ByVal r1 As String, ByVal r2 As String, ByVal r3 As String)

PassedText1 = r1
PassedText2 = r2
PassedText3 = r3

End Sub
'=======================

我知道我可以在 Macro2 中创建另一个 sub,然后我可以传递一个 string,然后将它分配给 Public 变量。

如果没有其他方法?

我想到了类似的东西:

Sub Sub3()

SomeText = "New Text"

Call Sub2(r1:=SomeText)

End Sub

【问题讨论】:

  • 为什么不使用 Macro2 并为您不想更改的值发送空字符串(或一些奇怪的字符,例如 '###')?然后,您可以在 Macro2 中使用 IF 语句来查看哪些值需要更新。或者在 Sub 定义中使用 Optional!
  • 感谢@MiguelH,您的建议与 R3uK 的回答类似。与 If 语句。然而,只需要在各个点调用一个带有单个变量的子对我来说似乎更有效。

标签: vba excel ms-word


【解决方案1】:

如果你这样定义你的子,你可以使用你建议的:

Sub Sub2(Optional ByVal r1 As Variant, Optional ByVal r2 As Variant, Optional  ByVal r3 As Variant)

因此,每个参数Optional ByVal r1 As Variant 有 2 处更改:

  1. Optional 会说话

  2. As Variant,因为您需要使用 IsMissing() 方法测试参数是否存在于您的调用中,但为此需要将参数定义为 Variant

对于 proc 中的 3 个参数,就像这样:

If Not IsMissing(r1) Then PassedText1 = r1

【讨论】:

  • 很高兴我能帮上忙! ;) 尽情享受吧!
  • 要是在 3 个月前知道这一点就好了。哈哈哈
  • 是的,开发人员有这种感觉是经典的,只有停止学习才会停止,所以这是个好兆头!邦尼继续! ;)
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2018-01-17
相关资源
最近更新 更多