2015-09-11 3 views
4

В рамках Excel VBA У меня есть форма пользователя, подобное приведенному ниже, где пользователь вводит идентификационный номер, а затем отображаются данные в форме пользователя:передачи данных между UserForms

Private Sub btnIDNo_Click() 
Dim IDNo As Long 
If txtIDNo.Text <> "" Then 
    If IsNumeric(txtIDNo.Text) = True Then 
     lblError.Caption = "" 
     IDNo = txtIDNo.Text 
     Worksheets("Details").Activate 
     Range("B4").Select 
     While ActiveCell.Value <> "" And ActiveCell.Value <> IDNo 
      ActiveCell.Offset(1, 0).Select 
     Wend 
     If ActiveCell.Value = IDNo Then 
      txtName.Value = ActiveCell.Offset(0, 1).Value 
      txtPhone.Value = ActiveCell.Offset(0, 2).Value 
     Else 
      lblError.Caption = "Cannot find ID nummber" 
     End If 
    Else 
     lblError.Caption = "Please enter the ID Number in numeric form" 
    End If 
End If 
End Sub 

На Детали пользователя форме, У меня есть кнопка «Изменить». Нажатие кнопки «Изменить» откроет другую форму пользователя, в которой пользователь может изменить данные этого идентификационного номера, но, очевидно, не сам идентификационный номер. Для этого мне нужно передать идентификационный номер из формы «Сведения о пользователе» в «Редактировать пользовательскую форму». Есть ли способ сделать это?

Дно на Show Details User Form, чтобы открыть форму редактирования пользователя похож на следующее:

Private Sub CommandButton1_Click() 
Dim IDNo As Long 
If txtIDNo.Text <> "" Then 
    If IsNumeric(txtIDNo.Text) = True Then 
     lblError.Caption = "" 
     IDNo= txtIDNo.Text 
     ufmEditDetails.Show 
     ufmShowDetails.Hide 
    Else 
     lblError.Caption = "Please enter the ID Number in numeric form" 
    End If 
Range("B4").Select 
End If 
End Sub 

Я уже посмотрел на следующие ссылки, но они, кажется, не поможет:

http://www.mrexcel.com/forum/excel-questions/671964-visual-basic-applications-pass-variables-between-user-forms.html

http://gregmaxey.mvps.org/word_tip_pages/userform_pass_data.html

http://peltiertech.com/Excel/PropertyProcedures.html

+0

Рассматривали ли вы реализации ваших 2 текущие формы в виде одной формы с многостраничный контроль? Вы можете поместить поля в настоящее время в свою первую форму на странице 1 многостраничной страницы и поля, находящиеся в вашей второй форме на стр. 2. Вы можете сделать страницу 2 невидимой по умолчанию и контролировать код внутри одной формы, если хотите для отображения страницы 2 –

ответ

8

Есть много много способов ... Вот некоторые ...

Way 1

  1. Объявление Public Variabl e в модуле
  2. Назначьте эту переменную в Userform1, а затем запустите Userform2. Эта переменная сохранит ее значение.Пример

В UserForm1

Private Sub CommandButton1_Click() 
    MyVal = "Sid" 
    UserForm2.Show 
End Sub 

В Userform2

Private Sub CommandButton1_Click() 
    MsgBox MyVal 
End Sub 

В модуле

Public MyVal 

Способ 2

Используйте .Tag свойства пользовательской формы

В UserForm1

Private Sub CommandButton1_Click() 
    UserForm2.Tag = "Sid" 
    UserForm2.Show 
End Sub 

В Userform2

Private Sub CommandButton1_Click() 
    MsgBox Me.Tag 
End Sub 

Way 3

Добавить в Userform2 в Label и установить его видно свойство False

В UserForm1

Private Sub CommandButton1_Click() 
    UserForm2.Label1.Caption = "Sid" 
    UserForm2.Show 
End Sub 

В Userform2

Private Sub CommandButton1_Click() 
    MsgBox Label1.Caption 
End Sub 
+1

Не самый простой способ быть 'UserForm2.Txtbox.Text = UserForm1.txtIDNo.Text' – DragonSamu

+0

Да, это было бы :) Я ответил на вопрос «Как передать данные между пользовательскими формами? " Что касается вашего ответа, я уже продемонстрировал аналогичную концепцию в «Пути 3» :) –

1

Имеются серверные способы решения этой проблемы. Тот, который я использую это объявить глобальную или открытую переменную в модуле

Пример:

Public commonVariable As String 

затем в UserForm можно присвоить или получить значение из этой переменной. Например в UserForm1:

Private Sub btnIDNo_Click() 
    commonVariable = "UserId" 
End Sub 

в UserForm2:

Private Sub CommandButton1_Click() 
    me.txtIDNo.Text = commonVariable 
End Sub 
+0

++ Really Nice :) –

1

Самым простым способом является:

UserForm2.TxtIDNo.Text = UserForm1.txtIDNo.Text