2014-07-15 131 views
1

我在Access 07嘗試將變量傳遞給一行代碼。目的是創建一個字段名稱數組,然後遍歷數組,在每個字段上執行相同的操作。我簡化了它以避免數組或循環中的任何潛在問題。 在我熟悉的任何其他語言中都會很簡單,但我似乎無法在VB中對其進行格式化。訪問vba將變量傳入代碼

Me.FeildName.Locked = True 

將是靜態代碼,我覺得變量的代碼會是這個樣子:

Dim Temp as String 
Temp="FieldName" 
Me.[Temp].Locked = True 

,但它不斷給我,說:「找不到字段「錯誤| 「在你的表達式中引用「,所以它沒有讀取變量的值。
如何讓它讀取命令中的變量?

另外,我試圖連接字符串成一行代碼:

Dim CodeLine As String 
Dim TestName As String 
TestName = "FieldName" 
CodeLine = "Me.[" & TestName & "].Locked = True" 

這將創建一個字符串,它看起來像功能的代碼,但我會如何運行呢?

感謝

+0

可能重複的[如何通過「字符串名稱」獲取控件屬性?](http://stackoverflow.com/questions/15076975/how-to-get-control-property-by-string-name) – EvenPrime

回答

2

如果Me是一個形式,你需要

Temp = "FieldName" 
Me.Controls(Temp).Locked = True 
+0

「 Controls()「...這正是我需要的!我知道這只是一些我不知道的術語。我嘗試過「Fields()」和其他一些我沒有發現的東西。謝謝! –

0

迪克Kusleika的答案是要走的路,但爲了完整起見,你也可以做這樣的事情:

For i = LBound(strControlNames) To UBound(strControlNames) 
    CallByName Forms![MyFormName].Controls(strControlNames(i)), "Locked", VbLet, "True" 
Next 

strControlNames將是您的控件名稱的數組。

+0

這看起來類似於我的代碼,但我想試驗一下差異,看看我是否可以學到任何東西。 「VbLet」是做什麼的? 我無法在我擁有的圖書或網絡搜索中找到該圖書。 謝謝 –

+0

@ charles_m80:CallByName可以運行一個方法或設置屬性值(http://msdn.microsoft.com/en-us/library/office/gg278760%28v=office.15%29.aspx)。 vbLet是一個常量,告訴函數我們希望有問題的屬性Locked在這種情況下被設置爲True(與vbGet相反,這表示我們想要提取值)。如果您在VB或VBA中完成任何類編程,Let/Get就是您設置/獲取自定義類屬性的方式。 – VBlades