2016-07-26 3 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, пользователь выбирает номер строки, т.е., из выпадающего списка. Когда номер строки выбран, информация о массиве автоматически заполняется в текстовых полях из 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 

Stepping через код, значение из MyArray должно быть надлежащим образом ссылаться, и я могу видеть значения первоначально сохраненных от UserForm1. Однако значения не меняются при переходе к следующей строке.

У кого-нибудь есть решение для моей проблемы? Заранее спасибо за вашу помощь!

ответ

0

Я считаю, что нашел свое решение. Мне пришлось объявить массив в модуле, содержащем код, чтобы запустить программу как общедоступную переменную. После того как я это сделал и изменил код, значения были правильно записаны в массив.

Если у кого-то есть другие решения, я бы хотел знать. Я не так разбираюсь в VBA, поэтому хочу услышать другие решения.