在我的宏中,我有一個子程序(使用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相比是無效功能。 –