2016-07-26 86 views
0

我是VBA的新手。我正在編寫一個程序,用戶可以在其中以另一種用戶形式從2維數組中更改輸入。VBA Excel 2013:從另一個用戶窗體分配數組值

第一個用戶表單UserForm1允許用戶從文本字段輸入信息,並在按下保存命令按鈕時將其保存到相應的陣列行i。

當用戶按下OK命令按鈕時,會詢問用戶是否要添加另一組數據。如果他們拒絕,他們會被問及他們是否想要更改數據。如果他們說是,則打開另一個用戶表單UserForm2。

爲UserForm1上代碼類似於代碼如下:

Public MyArray as Variant, i as Integer 

    Sub Userform_Initialize() 
     ReDim MyArray(100,4) 
    End Sub 

    Sub SaveButton_click() 
     MyArray(i, 1) = TextField1.Value 
     MyArray(i, 2) = TextField2.Value 
     MyArray(i, 3) = TextField3.Value 
     MyArray(i, 4) = TextField4.Value 
    End Sub 

    Sub OKButton_click() 
     If msgbox("Do you want to add more data?", vbYesNo) = vbNo Then 
      If msgbox("Do you have corrections to be made?",vbYesNo) = vbYes Then 
       Load UserForm2 
       UserForm2.Show 
      Else: Exit Sub 
      End If 
     Else: i = i + 1 
      Exit Sub 
     End If 
    End Sub 

在UserForm2,用戶選擇的行數,I,從組合框中。選擇行號後,數組信息將自動填充到UserForm1的文本字段中。

當用戶按下保存命令按鈕時,它應該傳遞來自文本字段的信息並將其寫入相應的行。

爲UserForm2的代碼類似於下面的代碼:

Public j as integer 

    Sub Userform_Initialize() 
     For j = 1 to UserForm1.i 
      ComboBox1.AddItem (j) 
     Next 
    End Sub 

    Sub SaveButton_click() 
     UserForm1.MyArray(ComboBox1.Value, 1) = TextField1.Value 
     UserForm1.MyArray(ComboBox1.Value, 2) = TextField2.Value 
     UserForm1.MyArray(ComboBox1.Value, 3) = TextField3.Value 
     UserForm1.MyArray(ComboBox1.Value, 4) = TextField4.Value 
    End Sub 

通過代碼步進,從MYARRAY值應正確引用,我可以看到從UserForm1最初保存的值。但是,當我走到下一行時,這些值不會改變。

有沒有人有我的問題的解決方案?預先感謝您的幫助!

回答

0

我相信我找到了我的解決方案。我不得不在包含代碼的模塊中聲明數組,以作爲公共變量啓動程序。在我做了這些並修改了代碼之後,這些值被正確寫入了數組。

如果任何人有其他解決方案,但我想知道。我對VBA並不熟悉,所以我想聽聽其他解決方案。

相關問題