2016-07-26 75 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并不熟悉,所以我想听听其他解决方案。

相关问题