在我的宏中,我有一个子程序(使用for循环)遍历表中的行,并在列V中写入注释,具体取决于列中的内容S.在此循环中,它还计算S列中“New”的次数。现在,我想将此值传递给主宏,然后传递给另一个子例程。我该怎么做,或者我的方法在这里错了?如何在Excel VBA中将值从一个子项传递给另一个
如果我理解正确,通常不可能在excel VBA中从subs中返回值,但是可以从函数中返回。但是我不认为这里有一个函数是适合的(我可能会误解函数如何在VBA中工作和/或没有意识到它们的全部潜力!)。
那么我该如何走出变量/值从子和进入另一个?是唯一选项Global
还是Public
声明?
这里是我的代码一个非常粗略的例子:
Sub MainMacro()
Call CommentSub
Call NumberOfRowsToCopy
End sub
Sub CommentSub
Dim Counter As Integer
For Counter = 1 to 500
If Cells(Counter, "S") = "New" Then
NewOrderLineCounter = NewOrderLineCounter + 1
Cells(Counter, "V").Select
ActiveCell.FormulaR1C1 = "New Line"
End If
Next Counter
End sub
Sub NumberOfRowsToCopy
ActiveSheet.Range("$A$12:$T$1001").AutoFilter Field:=16, Criteria1:= _
"New"
ActiveSheet.Range("B15:N" & NewOrderLineCounter).SpecialCells(xlCellTypeVisible).Select
End sub
(顺便说一句,我知道,有可能“更好”的方式来获得需要(从而消除了在这里复制的行数需要在subs之间传递值),但我想我已经尝试了所有这些方法,但都没有成功,我认为它是excel工作表的格式,但这是另一个问题,你得和你的工作一样,对吧?)
我不明白你为什么不能使用函数? 你应该可以没有问题,使他们的第一个功能,并将计数器的结果作为CommentSub的输出作为输入传递给NumberOfRowsToCopy,并让NumberOfRowsToCopy有1个输入值用于计数器 –
我得到我错误地理解了VBA中的函数是如何工作的印象。从我读过的东西(在帮助文件等)我明白,功能被用来做计算。该示例几乎总是给出函数x和y,它将返回值z,例如面积或体积等。我没有看到它所说的任何地方:“在一个函数中,你可以完成你在子文件中做的事情,但是也返回一个值”。 –
到底什么是计算?一系列操作导致了特定的答案,这是否意味着你仅限于数学操作员?不,不是的。 在VBA中,函数和子函数的主要区别是函数是子函数,它将一个值返回给调用者,而子类只是被调用并以返回值结束。与C subs相比是无效功能。 –