2011-12-21 59 views
1

我有數組的數目:使用一個變量來調用第二

mIOSconfig = Array(" ! *** SRMS *** ", "int *** PORT ***") 
mCATOSconfig = Array(" ! *** SRMS *** ", "set port name *** DESC *** *** PORT *** ") 

,我想調用這些使用外部的用戶輸入。

因此,假設用戶輸入「IOS」,我想在未來的代碼中使用mIOSconfig

因此,讓我們將用戶的輸入存儲在變量x中。

x="IOS" 
    usedarray = "m" + x + "config" 

somevarible = somefunction(usedarray) 

msgbox (somevarible) 

但是,這並不工作,因爲usedarray變量是一個字符串,這是傳遞給函數不是數組。我如何使用創建的usedarray varible將在開始創建的數組傳遞給函數?

乾杯

亞倫

回答

1

作爲一種解決方法,您可以使用集合來做你想做的事。使用「IOS」,「CATOS」等作爲集合的關鍵字,將數組創建爲集合對象並將數組創建到集合。

正如@Justin在他的評論中指出的,你特別想做的事情不被VBA支持。

+0

乾杯,是的,我以前使用過這種方法,似乎是最好的方法。我將在未來將其移植到純VB.net或c#中,在那裏我可能會實現一個數據庫來做到這一點,因爲這可能會導致許多數組都帶有hundrads或元素,我假設將它們全部加載到一個集合可能不是最高效的編程。但同時,感謝你的幫助,因爲這會給我帶來的靈活性。 – DevilWAH 2011-12-21 23:11:34

0

爲什麼不只是有一個數組,你填充基於輸入,從數據庫或配置文件?

然後在整個代碼中使用相同的數組名稱?

下面我敲了VB.Net,但看不出爲什麼不VBA。你爲什麼要讓用戶輸入自由文本?爲什麼不是可用配置的組合框/列表?

Dim myStrings As New List(Of String) 
Private Enum ArrayType 
    IOS = 1 
    CATOS = 2 
End Enum 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim strInput As String 
    Dim theInputtedType As ArrayType 

    strInput = InputBox("Enter Value", "Enter the value") 

    Select Case strInput 
     Case Is = "IOS" 
      theInputtedType = ArrayType.IOS 
     Case Is = "CATOS" 
      theInputtedType = ArrayType.CATOS 
     Case Else 
      MessageBox.Show("Value not recognised") 
      Exit Sub 
    End Select 

    PopulateMyList(theInputtedType) 

    For Each s As String In myStrings 
     MessageBox.Show(s) 
    Next 
End Sub 

Private Sub PopulateMyList(ByVal InputtedType As ArrayType) 
    Select Case InputtedType 
     Case ArrayType.IOS 
      'This would be a config read or DB read!!!! 
      myStrings.Add(" ! *** SRMS *** ") 
      myStrings.Add("int *** PORT ***") 
     Case ArrayType.CATOS 
    End Select 
End Sub 
+0

雖然仍然有相同的問題?根據用戶輸入的內容,只需要使用單個陣列或配置的一部分。有很多方法可以解決這個問題,我可以使用。但是我想知道的是,如果我創建一個包含第二個變量名稱的變量。我怎麼能用這個來調用第二個變量,而不是把它看作一個簡單的字符串。 – DevilWAH 2011-12-21 13:55:48

+0

如果僅用輸入參數的值填充列表/數組,則不行? – 2011-12-21 14:28:35

+0

@DevilWAH - 您的問題的答案是否定的,您不能使用字符串的值來引用VBA中的變量。在其他一些語言(如VB.NET)中,這是可能的;它被稱爲「反思」。 – Justin 2011-12-21 14:50:05

1
Sub GetOptionsByName() 

    Dim opts As Object, strOpt As String 
    Set opts = CreateObject("scripting.dictionary") 

    'load the various alternatives 
    opts.Add "IOS", Array(" ! *** SRMS *** ", "int *** PORT ***") 
    opts.Add "CATOS", Array(" ! *** SRMS *** ", _ 
          "set port name *** DESC *** *** PORT *** ") 

    strOpt = "IOS" 

    Debug.Print Join(opts(strOpt), "::") 


End Sub 
+0

您好,歡迎提供代碼,就像我說我已經使用這種方法來收集字符串而不是數組。正如我所說的最終版本,我可能需要一個更強大的方法。但是對於這個演示,這將會很好。謝謝 – DevilWAH 2011-12-21 23:14:05

相關問題