我已经看过了约。 20个类似的问题,我无法将其全部链接起来,但遗憾的是无法将信息推断为我问题的解决方案:
如何将整数(或字符串)从模块33子进程2移动到另一个模块34子进程3,以便在进程2中定义并编号整数/字符串之后,我可以简单地在模块34子进程3之后使用后一个模块在模块33子进程2的末尾调用?
更具体,这是我的代码:
sub process2()
dim a as integer
dim b as integer
dim str as string
a = 10
b = 3
str = stringname
call process3(a, str) 'line x
end sub
sub process3()
dim c as integer
c = a * 2 +b
msgbox(c)
end sub
我试过x行: 调用process3(a,b)
定义dim a ..和dim b ..在sub process2之外/之上
答案 0 :(得分:0)
我在那里看到了你的答案,但我认为你可能对这种语法的工作方式存在误解:
关键是你将已知类型的变量的值传递给另一个子,但变量不一样;并且它们不需要相同的名称。这使得被调用的subs更加通用 - 它们可以使用不同的变量执行相同的例程,具体取决于它们的调用位置。请参阅下面的示例,该示例扩展了此概念。
sub process1()
dim totalPies as integer
dim totalCakes as integer
dim str as string
totalPies = 10
totalCakes = 3
str = "foo"
call process3(totalPies, totalCakes, str)
call process2
end sub
sub process2()
dim highCard as integer
dim lowCard as integer
dim str as string
highCard = 10
lowCard = 3
strrrr = "bar"
call process3(highCard, lowCard, strrrr)
end sub
sub process3(ByVal a as Integer, yVal b As Integer, ByVal str as String) 'adds 2 numbers and sends string to msgbox
dim c as integer
c = a * 2 + b
b = 0
msgbox(c&str)
end sub
在process1和process2中看到,参数作为不同的项传递,但是process3将对这些项的引用转换为'a'和'b'。这是一个非常重要的区别 - 它意味着无论你做什么和一个& process3中的b不会更改传递给它的初始变量。请注意,在process3中设置b = 0的情况下,这只是一个无意义的语句,因为在process3结束时,变量b将不再存在。
如果你想拥有'通用'变量,多个潜艇可以随意改变,你将需要它们成为全局变量(在其他地方查看以获取更多信息。简而言之,全局变量在完成时不会被'删除'对于给定的Sub,它们在工作簿保持打开状态时存储在内存中。
另请注意,我指定参数“a”,“b”和“str”传递“ByVal”。这意味着我没有传递原始的实际变量,我传递了该变量的值。
答案 1 :(得分:-1)
正如预期的那样语法问题,显然如果你想从某个模块中的一个子元素传递变量,你还需要告诉excel期望这些变量,因此成功的结果看起来像:
sub process2()
dim a as integer
dim b as integer
dim str as string
a = 10
b = 3
str = stringname
call process3(a, str) 'line x
end sub
sub process3(a, str)
dim c as integer
c = a * 2 +b
msgbox(c)
end sub
注意,需要传递变量的原因是由于编程效率低,代码在1个过程中第二次变得太长。希望这有助于未来的任何人。