例如圖里 ,但是會報錯要求物件。
只能把控制元件名稱作為字串通過controls進行傳遞,有大佬解惑嗎,是為什么。
新人只有20分,見笑了
uj5u.com熱心網友回復:
先不說別的,你的sub ttt( )的代碼肯定是錯的!a 的“型別”是 object ,而 a.listcount (假設實參有這個屬性)的型別肯定是“整數”。
試想:一個“整數”,豈能賦值給一個 Object ???

uj5u.com熱心網友回復:
不知道 C# 可不可以這樣寫。
uj5u.com熱心網友回復:
圖呢?圖呢?
圖呢?
uj5u.com熱心網友回復:
試試這樣:
sub ttt(byref obj as object)
msgbox obj.listcount
end sub
sub tt()
ttt(fmdatamerge.lblot)
end sub
uj5u.com熱心網友回復:
引數宣告的是object 是一個物件指標,而不是一個字串。代碼里面的名稱字串只是為了讓人看明白,編譯以后,這些名字都是各種物件、暫存器的記憶體地址,這是讓CPU看的。所以你如果很明確的傳遞一個名字進去是不行的,除非你自己在函式里面再進行一次名字和物件的對應轉換。如果非要說傳名字,有一個 CallByName 具體的用法查MSDN,那也只是對某個物件的屬性方法可以用字串來call,物件本身還是要用指標傳入。
uj5u.com熱心網友回復:
a=a.listcount是我寫錯了,換成其他變數也不可以uj5u.com熱心網友回復:
也不可以uj5u.com熱心網友回復:
謝謝,明白一些了。對向本身用指標傳入要用什么方法呢,能簡單說一下思路嗎。其實我的本意例如:有多個按鈕相同的功能,只是涉及的listbox不一樣,我想只寫一段代碼,靠傳遞控制元件名稱的方法執行。uj5u.com熱心網友回復:
我剛才寫了段代碼來試了下。
發現你的“錯誤”原因是你的代碼寫法問題。
你把那行代碼: ttt(tt)
改成: call ttt(tt)
或者把括號去掉試試。

uj5u.com熱心網友回復:
覺得你需要的是控制元件陣列
uj5u.com熱心網友回復:
用脫褲子放屁的方式使用字串呼叫物件:表單上兩個textbox,一個按鈕,試試下面這個代碼
Option Explicit
Dim allCtl As New Collection
Private Sub Form_Load()
Dim ctl
'初始化,把所有控制元件放到集合里,并用控制元件名作為物件的索引key
For Each ctl In Me.Controls
allCtl.Add ctl, ctl.Name
Next
End Sub
Private Sub Command1_Click()
Call test("Text1", "這是一個測驗")
Call test("Text2", "測驗結果看這里")
End Sub
Private Sub test(ByVal strObj As String, ByVal strDisp As String)
'用控制元件名提取控制元件物件,并操作物件的text屬性
allCtl(strObj).Text = strDisp
End Sub
uj5u.com熱心網友回復:
回9樓,我試了下,真的跟括號有關系!加了括號就報錯,搞不明白;回樓上,確實是脫了褲子放屁,因為Controls本來就可以Controls("Name")這么用,不用另外再放到集合中了;
代碼如下:
Option Explicit
Private Sub Command1_Click()
tt
End Sub
Sub ttt(ByRef obj As Object)
MsgBox obj.ListCount
End Sub
Sub tt()
ttt fmDataMerge.lbLot
'ttt (fmDataMerge.lbLot) ' 會出錯!
End Sub
Private Sub Command2_Click()
Controls("lbLot").AddItem Rnd
End Sub
運行示例:


下載地址:
鏈接:https://pan.baidu.com/s/1dwPn-IT-gpr9C2oA1swWtg
提取碼:e1p7
uj5u.com熱心網友回復:
回樓上ttt x 傳遞的實參是tt
ttt (x) 傳遞的是實參是 (x) 運算式 這里的() 是運算子 ,而因為是運算式 其結果保存在臨時變數中,與所呼叫的形參 型別不一樣 當然報錯!!
所以不要用 ttt (x) 這種寫法
要么 ttt x
要么 Call ttt (x)
uj5u.com熱心網友回復:
回樓上
ttt x 傳遞的實參是tt
ttt (x) 傳遞的是實參是 (x) 運算式 這里的() 是運算子 ,而因為是運算式 其結果保存在臨時變數中,與所呼叫的形參 型別不一樣 當然報錯!!
所以不要用 ttt (x) 這種寫法
要么 ttt x
要么 Call ttt (x)
哦,原來如此.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/35200.html
標籤:VBA
上一篇:VBA萌新求助
下一篇:跪求各位大神
