Board logo

標題: [發問] 如何用迴圈的i呼叫變數 [打印本頁]

作者: PKKO    時間: 2015-1-14 02:00     標題: 如何用迴圈的i呼叫變數

我有一個程式碼,會需要重複使用
但裡面的文字敘述需要更改
因此我先將文字定義為
s1_1="我愛你"
s1_2="我不愛你"
s2_1="我想你"
s2_2="我不想你"

我的目的是希望簡略使用程式碼
我可以if i = 1 then s1 =s1_1.....但若是我的i就有一千個我會打死
因此是否可以如下使用
把變數與i合併使用,就快多了
  1.     For i = 1 To 2
  2.         s1 = "s1_" & i
  3.         s2 = "s2_" & i
  4.         Call check列出檔案
  5.     Next
複製代碼
當然目前上述程式碼是不能使用的因為s1會="s1_1"而不是等於"我愛你"

我只知道userform可以這樣使用例如set ctrl=controls("s" & i)
但不是userform的控制項,而是變數要如何達到我上述程式碼真的要達成的結果呢?
作者: 准提部林    時間: 2015-1-17 11:48

以下只是示例:
Dim SR(1 to 2, 1 to 99)
SR(1,1)="我愛你"
SR(1,2)="我不愛你"
SR(2,1)="我想你"
SR(2,2)="我不想你"
For i = 1 To 2
     s1 = SR(1,i)
     s2 = SR(2,i)
     Call check列出檔案
Next

一千個細項,可使用工作表列出明細對照。
作者: rbktwi    時間: 2015-1-17 12:39

請教Dim SR(1 to 2, 1 to 99)是多重陣列用法?
作者: PKKO    時間: 2015-1-17 21:03

回復 2# 准提部林


    感謝回復,平常只有想到用陣列帶入資料,沒有想過把變數的值帶入陣列,再由迴圈把陣列內容帶出來
雖然多一道工,不過仍然可完成需求! 感恩!
作者: diolin    時間: 2015-1-20 16:44

也可以用 Collection, 不用宣告很大的 Array, 也不用動態宣告Array
作者: PKKO    時間: 2015-1-20 22:32

本帖最後由 PKKO 於 2015-1-20 22:33 編輯

回復 5# diolin
感謝,又收穫了!
PO上範例說明

Collection 物件範例
本範例建立一個命名為 MyClasses 的 Collection,並且再建立一個對話方塊,讓使用者可從對話方塊中將物件新增到該集合物件中。若要觀察程式如何運作,請先在「插入」功能表上選取「物件類別模組」指令,然後在 Class1 的模組層次中宣告一個公用變數,命名為 InstanceName (Public InstanceName),此變數用來儲存每個物件類別執行個體的名稱。不要更改物件類別的預設名稱 Class1。將下列程式碼複製到另一個模組的「一般」區段中,然後在另一個程序中以 ClassNamer 陳述式來啟動之。(本範例只適用於有支援物件類別的主程式。)
  1. Sub ClassNamer()
  2.     Dim MyClasses As New Collection    ' 建立一個集合物件 (Collection)。
  3.     Dim Num    ' 記數用變數,用來記數物件個數。
  4.     Dim Msg As String    ' 提示訊息用變數。
  5.     Dim TheName, MyObject, NameList    ' 物件資訊用變數。
  6.     Do
  7.         Dim Inst As New Class1    ' 建立 Class1 的新執行個體。
  8.         Num = Num + 1    ' 把記數變數 Num 加一,然後要求使用者輸入新物件個體的名稱。
  9.         Msg = "Please enter a name for this object." & Chr(13) _
  10.          & "Press Cancel to see names in collection."
  11.         TheName = InputBox(Msg, "Name the Collection Items")
  12.         Inst.InstanceName = TheName    ' 將名稱指定給新物件個體。
  13.         ' 將使用者輸入的名稱加到集合物件中。
  14.         If Inst.InstanceName <> "" Then
  15.             ' 將新名稱加到集合物件中。
  16.             MyClasses.Add item := Inst, key := CStr(Num)
  17.         End If
  18.         ' 將現在物件的引用釋放掉,以對下一個物件做動作。
  19.         Set Inst = Nothing
  20.     Loop Until TheName = ""
  21.     For Each MyObject In MyClasses    ' 建立物件名稱清單。
  22.         NameList = NameList & MyObject.InstanceName & Chr(13)
  23.     Next MyObject
  24.     ' 將名稱清單以訊息方塊顯示出來。
  25.     MsgBox NameList, , "Instance Names In MyClasses Collection"

  26.     For Num = 1 To MyClasses.Count    ' 將各物件從集合物件中移除。
  27.         MyClasses.Remove 1    ' 因為每移除一個物件後,集合物件
  28.                 ' 本身會自動重排物件順序,故迴圈中只需要移除第一個
  29.     Next        ' 物件即可。
  30. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)