2013-11-22 43 views
0

如何通過字符串變量引用對象?我覺得自己好像已經在有辦法做到這一點除了比使用執行並失去明確的選項VbScript Reference Object by String變量

例(其中「有些事情是有問題的命令/法」:

Dim strObj 
Dim D1 : Set D1 = CreateObject("Scripting.Dictionary") 

strObj = "D1" 

Something(strObj).add "1" , "Car"  
msgbox Something(strObj).Item("1") 

感謝

+2

請退後一步,描述您嘗試解決的實際問題,而不是您認爲的解決方案。你爲什麼認爲你需要這個?什麼? –

+0

即使你不想退後一步並描述問題 - 試着理解你自己的問題,並向我們解釋它,因爲它完全不清楚你在說什麼。 – TheBlastOne

+0

你說得對,我的例子沒有任何意義。我糾正了它。所以問題在於,我在HTA中填充了2個不同來源的2個不同字典,但是希望能夠使用基於用戶選擇構建出Div的innerhtml的相同功能。將參數(字典對象名稱)傳遞給函數以確定要使用的對象,而不是使用if語句,並將所有代碼寫入HTML ...每個字典一次。問題是關於VB中的動態引用,如可以在html中使用getobjectbyid() – user3023537

回答

1

只有functions(和subs)可以被Set functionReference = GetRef("myFunction")引用,但不是對象。

如果你想有一個字符串引用,你必須創建一個你想引用的每個對象。您可以使用以下字典:

Dim foo, bar 

Dim StringObjectReference : Set StringObjectReference = CreateObject("Scripting.Dictionary") 

' Lets create some objects 
Set foo = CreateObject("System.Collections.ArrayList") 
Set bar = CreateObject("Scripting.Dictionary") 

' Register the objects for referral, now we can reference them by string! 
StringObjectReference.Add "foo", foo 
StringObjectReference.Add "bar", bar 

' Manipulate the objects through their string reference 
StringObjectReference("foo").Add "BMW" 
StringObjectReference("foo").Add "Chrysler" 
StringObjectReference("foo").Add "Audi" 
StringObjectReference("foo").Sort 

StringObjectReference("bar").Add "Bikes", array("Honda", "Thriumph") 
StringObjectReference("bar").Add "Quads", array("Honda", "Kawasaki", "BMW") 

' Retrieve values from the objects 
' real: 
msgbox "My Cars: " & join(foo.ToArray(), ", ") 
msgbox "My Bikes: " & join(bar("Bikes"), ", ") 
msgbox "My Quads: " & join(bar("Quads"), ", ") 

' From reference 
msgbox "My Cars: " & join(StringObjectReference("foo").ToArray(), ", ") 
msgbox "My Bikes: " & join(StringObjectReference("bar").Item("Bikes"), ", ") 

' Shorthand notation (without item) 
msgbox "My Quads: " & join(StringObjectReference("bar")("Quads"), ", ") 
+0

Holy Crap可以將Object實例存儲在scripting.dictionary對象中!!!?!頭腦風暴。丁丁...贏家!道具給你AutomatedChaos知道我在說什麼,即使是一個蹩腳的匆忙的例子! – user3023537

+0

感謝這很完美。 – user3023537

0

在您使用字符串變量的內容來引用代碼中的某些方法/函數/對象的時候,您會「失去」Option Explicit的好處,您可以在變量中放入任何內容,並且不會被測試,直到代碼被執行

Bu您可以使用Option Explicit with Execute。此代碼

Dim D1 
    Set D1 = CreateObject("Scripting.Dictionary") 

    Execute "Option Explicit : D1.Add ""1"",""car""" 
    Execute "Option Explicit : D2 = D1.Item(""1"")" 

    WScript.Echo D1.Item("1") 

會抱怨D2未被定義。但它會在運行時完成。註釋此行,您將看到Add方法按預期工作。