I have a userform with listbox. In the userform the user required to add values in several textboxs, the values automatically are added to an excel table, and the listbox supposed to show the specific values which were added by the user. I have tried to use with Dynamic range through the manager name, and set the rowsource of the listbox to contain the dynamic range, but the listbox is empty and doesn't show any value.
Please your hlp to understand what i'm doing wrong?
The dynamic range is:
Dyn_CurrentCA= =OFFSET(CA_list!$F$4,lists!$V$10,0,lists!$V$9,6)
This is my code:
Public Dep_CA As Integer
Public Target_CA As Integer
Private Sub CB_Add_Click()
Target_CA = Sheets("lists").Range("V8").Value + 1
If T_AuditDate.Value = "" Or CB_Grade.Value = "" Or
T_CAnum.Value = "" Or CB_Subject.Value = "" Or
T_Findings.Value = "" Then
MsgBox "Please fill Audit Date and Audit Result!",
vbRetryCancel + vbCritical, "Data is missing"
Else
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 0).Value = Target_CA
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 1).Value = L_Dep.Caption
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 2).Value = T_AuditDate.Value
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 3).Value = L_Contact.Caption
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 4).Value = L_Manager.Caption
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 5).Value = T_CAnum.Value
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 6).Value = CB_Subject.Value
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 7).Value = CB_SubSubject.Value
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 8).Value = T_Findings.Value
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 9).Value = T_DD.Value
Sheets("CA_list").Range("CA_Start").Offset(Target_CA, 10).Value = CB_Status.Value
Call clear_CA
Dep_CA = Dep_CA + 1
Sheets("lists").Range("V9").Value = Dep_CA
ListBox1.RowSource = Dyn_CurrentCA
End If
End Sub
Private Sub UserForm_Initialize()
Dep_CA = 0 'initialize no. of lines to 0
Sheets("lists").Range("V9").Value = Dep_CA
CurrentRaw = Sheets("lists").Range("V3").Value
Sheets("lists").Range("V10").Value = Sheets("lists").Range("V8").Value + 1
L_Dep.Caption = Sheets("lists").Range("V5").Value
L_Site.Caption = Sheets("Internal_Plan").Range("A_Start").Offset(CurrentRaw, 4).Value
L_PQ.Caption = Sheets("Internal_Plan").Range("A_Start").Offset(CurrentRaw, 5).Value
L_PYear.Caption = Sheets("Internal_Plan").Range("A_Start").Offset(CurrentRaw, 6).Value
L_Auditor.Caption = Sheets("Internal_Plan").Range("A_Start").Offset(CurrentRaw, 7).Value
L_Contact.Caption = Sheets("Internal_Plan").Range("A_Start").Offset(CurrentRaw, 2).Value
L_Manager.Caption = Sheets("Internal_Plan").Range("A_Start").Offset(CurrentRaw, 3).Value
Call clear_CA
With ListBox1
.ColumnWidths = "40;60;60;260;50;40"
.ColumnCount = 6
.RowSource = Dyn_CurrentCA
.ColumnHeads = True
End With
End Sub
Sub clear_CA()
With Update_Results 'name of userform
CB_Subject.Value = ""
CB_SubSubject.Value = ""
T_CAnum.Value = ""
T_DD.Value = ""
CB_Status.Value = "Open"
T_Findings.Value = ""
End With
End Sub
This is the userform with listbox:
Try with using the address of the dynamic range. You need to add the sheet name as well.
ListBox1.RowSource = Worksheets("CA_list").Range("Dyn_CurrentCA").Address(external:=True)
For ActiveX
ListBox1.ListFillRange = Worksheets("CA_list").Range("Dyn_CurrentCA").Address(external:=True)
Related
I have a simple user form that collects informations about persons.
Here an example of what I get when I added informations of 6 persons. I want to start the list of informations from the 3th row (since the 2 first ones are filled by Command button "Remplir formulaire" :
My issue is that I would like, at the calling of userForm, to have 14 headers names for each first 14 columns (the functions to fill the values into these columns will be done later in my code).
To set the names of the 14 fields (starting from row=3), I did :
Private Sub ResetForm()
'Monsieur by default
ComboBox1.Value = "Monsieur"
'Empty TextBox1
TextBox1.Value = ""
'Empty TextBox2
TextBox2.Value = ""
'Empty TextBox3
TextBox3.Value = ""
End Sub
Private Sub UserForm_Initialize()
'Create header for each colum
Dim HeaderName(14) As String
'Index to browse HeaderName array
Dim a As Integer
HeaderName(1) = "Civilité"
HeaderName(2) = "Nom"
HeaderName(3) = "Prénom"
HeaderName(4) = "Âge"
HeaderName(5) = "Fonction"
HeaderName(6) = "Entité"
HeaderName(7) = "Catégorie"
HeaderName(8) = "Adresse"
HeaderName(9) = "Code postal"
HeaderName(10) = "Ville"
HeaderName(11) = "Tél Fixe"
HeaderName(12) = "Tél Portable"
HeaderName(13) = "Email"
HeaderName(14) = "Autres infos"
'Initlialize headers : start from row = 3
Sheet1.Activate
With Sheet1
For a = 1 To 14
If (.Cells(3, a) <> "") Then
.Cells(3, a).Value = HeaderName(a)
End If
Debug.Print "a = " & a
Next a
End With
'Fill ComboBox
With ComboBox1
.AddItem "Monsieur"
.AddItem "Madame"
End With
'Set Elu by default
CheckBox1.Value = True
CheckBox2.Value = False
'Reset all inputs
Call ResetForm
End Sub
and into the same VBA source, I did for Command button" "Remplir Formulaire" :
Private Sub CommandButton1_Click()
Dim emptyRow As Long
Sheet1.Activate
With Sheet1
emptyRow = .UsedRange.Rows.Count + .UsedRange.Rows(1).Row - 1
If .Cells(emptyRow, 1).Value <> "" Then
emptyRow = emptyRow + 1
.Cells(emptyRow, 1).Value = ComboBox1.Value
.Cells(emptyRow, 2).Value = TextBox1.Value
.Cells(emptyRow, 3).Value = TextBox2.Value
.Cells(emptyRow, 4).Value = TextBox3.Value
.Cells(emptyRow, 5).Value = CheckBox1.Value
If CheckBox1.Value = True Then
.Cells(emptyRow, 5).Value = CheckBox1.Caption
Else
.Cells(emptyRow, 5).Value = CheckBox2.Caption
End If
End If
End With
End Sub
So I don't understand why I can't get the 14 names of each top column specified in function UserForm_Initialize() by HeaderName array; only the first four ones (Civilité, Nom, Prénom, Age) are displayed when I click on "Remplir Formulaire" command button, not the 10 others.
What might be wrong here?
Do you really need to check if the cell is empty? I would replace the 20+ lines of code with:
Sheet1.Range("A3").Resize(1, 14).Value = Array("Civilité", "Nom", "Prénom", "Âge", "Fonction", "Entité", "Catégorie", "Adresse", "Code postal", "Ville", "Tél Fixe", "Tél Portable", "Email", "Autres infos")
I have this code that transfers data to a sheet and creates a data base of : Name, DOB, Phone number, Insurance name, Insurance ID.
Dim strDataRange As Range
Dim keyRange As Range
Set strDataRange = Range("A1:h5000")
Set keyRange = Range("A1:h5000")
strDataRange.Sort Key1:=keyRange, Header:=xlYes
Dim tr As Worksheet
Set tr = Worksheets("Sheet16")
iRow = tr.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row
tr.Cells(iRow, 1).Value = Me.TextBox1.Value
tr.Cells(iRow, 2).Value = Me.TextBox2.Value
tr.Cells(iRow, 3).Value = Me.TextBox22.Value
tr.Cells(iRow, 4).Value = Me.TextBox23.Value
tr.Cells(iRow, 5).Value = Me.TextBox17.Value
tr.Cells(iRow, 6).Value = Me.ComboBox15.Value
tr.Cells(iRow, 7).Value = Me.TextBox21.Value
tr.Cells(iRow, 8).Value = Me.TextBox32.Value
Then on this code, I am able to call all that information enter before (above code) and its populates on textboxes:
Private Sub ComboBox13_Change()
On Error Resume Next
Me.TextBox1.Value = Me.ComboBox13.Column(0)
Me.TextBox2.Value = Me.ComboBox13.Column(1)
Me.TextBox22.Value = Me.ComboBox13.Column(2)
Me.TextBox23.Value = Me.ComboBox13.Column(3)
Me.TextBox17.Value = Me.ComboBox13.Column(4)
Me.ComboBox15.Value = Me.ComboBox13.Column(5)
Me.TextBox21.Value = Me.ComboBox13.Column(6)
Me.TextBox32.Value = Me.ComboBox13.Column(7)
On Error GoTo 0
End Sub
With ComboBox13
.ColumnCount = 1
.ColumnWidths = "120"
.ColumnHeads = False
.RowSource = "Sheet16!A2:h5200"
End With
What I can't do or I need to do is, If the data change on any of these
enter code heretext boxes and I need to update the information such as
: phone 'number or Insurance Id. How can I change it on those text boxes
and press a 'command button to update that new data enter?
Thanks a lot
After I click the command button, I want my excel to do:
Input what I type in text boxes / select in combo boxes in specific columns without deleting the one I previously entered
But at this moment, it does not work as I expected or enter any of input from text boxes and combo boxes.
The script I wrote is:
Private Sub
If TextBox1.Value = "" Or TextBox2.Value = "" Or TextBox3.Value = "" Then
If MsgBox ("There might one or more empty cells,
do you want to continue to proceed?", vbQuestion + vbYesNo) <> vbYes Then
Exit Sub
End If
End If
Dim invsheet As Worksheet
Dim pacsheet As Worksheet
Set invsheet = ThisWorkbook.Sheets("INV")
Set pacsheet = ThisWorkbook.Sheets("PAC")
invsheet.Range("A1").Value = TextBox6.Text
invsheet.Range("I5").Value = TextBox7.Text
invsheet.Range("A21").Value = TextBox5.Text
invsheet.Range("A25").Value = ComboBox1.Value
inv_nr = invsheet.Cells(Row.Count, 1).End(xlUp).Row +1
invsheet.Cells(inv_nr, 5).Value = Me.TextBox1
invsheet.Cells(inv_nr, 4).Value = Me.ComboBox2
pac_nr = pacsheet.Cells(Row.Count, 1).End(xlUp).Row +1
pacsheet.Cells(pac_nr, 5).Value = Me.TextBox2
pacsheet.Cells(pac_nr, 5).Value = Me.TextBox3
pacsheet.Cells(pac_nr, 5).Value = Me.TextBox4
Problem:
inv_nr = invsheet.Cells(Row.Count, 1).End(xlUp).Row +1
invsheet.Cells(inv_nr, 5).Value = Me.TextBox1
invsheet.Cells(inv_nr, 4).Value = Me.ComboBox2
pac_nr = pacsheet.Cells(Row.Count, 1).End(xlUp).Row +1
pacsheet.Cells(pac_nr, 5).Value = Me.TextBox2
pacsheet.Cells(pac_nr, 7).Value = Me.TextBox3 'mistyped it. supposed to be 7
pacsheet.Cells(pac_nr, 9).Value = Me.TextBox4 'mistyped it. supposed to be 9
This block of code does not work and create any output on the worksheet.
I will really appreciate your help.
Thank you!
You're not placing anything in column A (except A1, A21, and A25 of invsheet), so it's not a good idea to set your inv_nr and pac_nr variables based on the last used cell in column A.
Try basing it on one of the columns you are populating with data, e.g. column 5:
'Always qualify "Rows" (and don't mistype it as "Row")
inv_nr = invsheet.Cells(invsheet.Rows.Count, 5).End(xlUp).Row + 1
invsheet.Cells(inv_nr, 5).Value = Me.TextBox1
invsheet.Cells(inv_nr, 4).Value = Me.ComboBox2
'Always qualify "Rows" (and don't mistype it as "Row")
pac_nr = pacsheet.Cells(pacsheet.Rows.Count, 5).End(xlUp).Row + 1
pacsheet.Cells(pac_nr, 5).Value = Me.TextBox2 'Note: This is pointless because the next line overwrites it
pacsheet.Cells(pac_nr, 5).Value = Me.TextBox3 'Note: This is pointless because the next line overwrites it
pacsheet.Cells(pac_nr, 5).Value = Me.TextBox4
Getting errors when I run a user form in VBA. Created a user form in VBA to take input for multiple test variables. Would like to have user click 'CommandBUtton2' button and have data saved to a worksheet in Excel. Need to be able to clear form after saving data in order to continue updating worksheet with new test data.
UserForm1 receives input and has a button that switches to UserForm2. UserForm2 takes input and has a button to submit (which should save inputted data into excel worksheet..it should lol)
Module1 code:
' Code behind Module1 to store public values
Public myText1 As String
Public myText2 As String
Public myText3 As String
Public myText4 As String
Public myText5 As String
Public myText6 As String
Public myText7 As String
Public myText8 As String
Public myText9 As String
Public myText10 As String
Public myText11 As String
Public myText12 As String
Public myText13 As String
Public myText14 As String
Public myText15 As String
Public myText16 As String
Public myText17 As String
Public myText18 As String
Public myText19 As String
Public myText20 As String
Public myText21 As String
Public myText22 As String
Public myText23 As String
Public myText24 As String
Public myText25 As String
Public myText26 As String
Public myText27 As String
Public myText28 As String
Public myText29 As String
Public myText30 As String
Public myText31 As String
Public myText32 As String
Public myText33 As String
Public myText34 As String
Public myText35 As String
Public myText36 As String
Public myText37 As String
Public myText38 As String
Public myText39 As String
Public myText40 As String
Public myText41 As String
Public myText42 As String
Public myText43 As String
Public myText44 As String
Public myText45 As String
Public myText46 As String
Public myText47 As String
Public myText48 As String
Public myText49 As String
Public myText50 As String
Public myText51 As String
Public myText52 As String
Public myText53 As String
Public myText54 As String
Public myText55 As String
Public myText56 As String
Public myText57 As String
Public myText58 As String
Public myText59 As String
Public myText60 As String
Public myText61 As String
Public myText62 As String
Public myText63 As String
Public myText64 As String
Public myText65 As String
Public myText66 As String
Public myText67 As String
Public myText68 As String
Public myText69 As String
Public myText70 As String
Public AdditionalNotes As String
' Code behind Module1 to actually use the values
Public Sub PrintVals()
'Assign a macro to the OK button
Dim emptyRow As Long
'Make Sheet2 Active
Sheets(2).Activate
'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Export Data to worksheet
Cells(emptyRow, 1).Value = myText1
Cells(emptyRow, 2).Value = myText2
Cells(emptyRow, 3).Value = myText3
Cells(emptyRow, 4).Value = myText4
Cells(emptyRow, 5).Value = myText5
Cells(emptyRow, 6).Value = myText6
Cells(emptyRow, 7).Value = myText7
Cells(emptyRow, 8).Value = myText8
Cells(emptyRow, 9).Value = myText9
Cells(emptyRow, 10).Value = myText10
Cells(emptyRow, 11).Value = myText11
Cells(emptyRow, 12).Value = myText12
Cells(emptyRow, 13).Value = myText13
Cells(emptyRow, 14).Value = myText14
Cells(emptyRow, 15).Value = myText15
Cells(emptyRow, 16).Value = myText16
Cells(emptyRow, 17).Value = myText60
Cells(emptyRow, 18).Value = myText17
Cells(emptyRow, 19).Value = myText61
Cells(emptyRow, 20).Value = myText18
Cells(emptyRow, 21).Value = myText62
Cells(emptyRow, 22).Value = myText19
Cells(emptyRow, 23).Value = myText20
Cells(emptyRow, 24).Value = myText21
Cells(emptyRow, 25).Value = myText22
Cells(emptyRow, 26).Value = myText23
Cells(emptyRow, 27).Value = myText24
Cells(emptyRow, 28).Value = myText25
Cells(emptyRow, 29).Value = myText63
Cells(emptyRow, 30).Value = myText26
Cells(emptyRow, 31).Value = myText64
Cells(emptyRow, 32).Value = myText27
Cells(emptyRow, 33).Value = myText65
Cells(emptyRow, 34).Value = myText28
Cells(emptyRow, 35).Value = myText29
Cells(emptyRow, 36).Value = myText30
Cells(emptyRow, 37).Value = myText31
Cells(emptyRow, 38).Value = myText32
Cells(emptyRow, 39).Value = myText33
Cells(emptyRow, 40).Value = myText34
Cells(emptyRow, 41).Value = myText66
Cells(emptyRow, 42).Value = myText35
Cells(emptyRow, 43).Value = myText67
Cells(emptyRow, 44).Value = myText36
Cells(emptyRow, 45).Value = myText37
Cells(emptyRow, 46).Value = myText38
Cells(emptyRow, 47).Value = myText68
Cells(emptyRow, 48).Value = myText39
Cells(emptyRow, 49).Value = myText40
Cells(emptyRow, 50).Value = myText41
Cells(emptyRow, 51).Value = myText42
Cells(emptyRow, 52).Value = myText43
Cells(emptyRow, 53).Value = myText44
Cells(emptyRow, 54).Value = myText45
Cells(emptyRow, 55).Value = myText46
Cells(emptyRow, 56).Value = myText47
Cells(emptyRow, 57).Value = myText48
Cells(emptyRow, 58).Value = myText49
Cells(emptyRow, 59).Value = myText50
Cells(emptyRow, 60).Value = myText51
Cells(emptyRow, 61).Value = myText52
Cells(emptyRow, 62).Value = myText53
Cells(emptyRow, 63).Value = myText69
Cells(emptyRow, 64).Value = myText54
Cells(emptyRow, 65).Value = myText55
Cells(emptyRow, 66).Value = myText56
Cells(emptyRow, 67).Value = myText57
Cells(emptyRow, 68).Value = myText70
Cells(emptyRow, 69).Value = myText58
Cells(emptyRow, 70).Value = AdditionalNotes
End Sub
' Code behind Form1 Initialize text boxes
Private Sub UserForm1_Initialize(UserForm1)
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox6.Value = ""
TextBox7.Value = ""
TextBox8.Value = ""
TextBox9.Value = ""
TextBox10.Value = ""
TextBox11.Value = ""
TextBox12.Value = ""
TextBox13.Value = ""
TextBox14.Value = ""
TextBox15.Value = ""
TextBox16.Value = ""
TextBox17.Value = ""
TextBox18.Value = ""
TextBox19.Value = ""
TextBox20.Value = ""
TextBox21.Value = ""
TextBox22.Value = ""
TextBox23.Value = ""
TextBox24.Value = ""
TextBox25.Value = ""
TextBox26.Value = ""
TextBox27.Value = ""
TextBox28.Value = ""
TextBox29.Value = ""
TextBox30.Value = ""
TextBox31.Value = ""
TextBox33.Value = ""
TextBox34.Value = ""
TextBox35.Value = ""
TextBox36.Value = ""
TextBox37.Value = ""
TextBox38.Value = ""
TextBox39.Value = ""
TextBox40.Value = ""
TextBox41.Value = ""
TextBox42.Value = ""
TextBox43.Value = ""
TextBox44.Value = ""
TextBox45.Value = ""
TextBox46.Value = ""
TextBox47.Value = ""
TextBox48.Value = ""
TextBox49.Value = ""
TextBox50.Value = ""
TextBox51.Value = ""
TextBox52.Value = ""
TextBox53.Value = ""
TextBox54.Value = ""
TextBox55.Value = ""
TextBox56.Value = ""
TextBox57.Value = ""
TextBox58.Value = ""
TextBox59.Value = ""
'Good values
TextBox60.Value = "14"
TextBox61.Value = "Responds"
TextBox62.Value = "00 00 00 00 00 00 00 00"
TextBox63.Value = "< 0.005"
TextBox64.Value = "4.5"
TextBox65.Value = "2"
TextBox66.Value = "100"
TextBox67.Value = "11-16"
TextBox68.Value = "5"
TextBox69.Value = "6"
TextBox70.Value = "10-11"
End Sub
Private Sub UserForm2_Initialize(UserForm2)
'Empty Additional Notes
TextBoxAdditionalNotes.Value = ""
End Sub
' Code behind Form1 Set variables on module
Private Sub CommandButton1_Click(UserForm1)
Module1.myText1 = TextBox1.Value
Module1.myText2 = TextBox2.Value
Module1.myText3 = TextBox3.Value
Module1.myText4 = TextBox4.Value
Module1.myText5 = TextBox5.Value
Module1.myText6 = TextBox6.Value
Module1.myText7 = TextBox7.Value
Module1.myText8 = TextBox8.Value
Module1.myText9 = TextBox9.Value
Module1.myText10 = TextBox10.Value
Module1.myText11 = TextBox11.Value
Module1.myText12 = TextBox12.Value
Module1.myText13 = TextBox13.Value
Module1.myText14 = TextBox14.Value
Module1.myText15 = TextBox15.Value
Module1.myText16 = TextBox16.Value
Module1.myText17 = TextBox17.Value
Module1.myText18 = TextBox18.Value
Module1.myText19 = TextBox19.Value
Module1.myText20 = TextBox20.Value
Module1.myText21 = TextBox21.Value
Module1.myText22 = TextBox22.Value
Module1.myText23 = TextBox23.Value
Module1.myText24 = TextBox24.Value
Module1.myText25 = TextBox25.Value
Module1.myText26 = TextBox26.Value
Module1.myText27 = TextBox27.Value
Module1.myText28 = TextBox28.Value
Module1.myText29 = TextBox29.Value
Module1.myText30 = TextBox30.Value
Module1.myText31 = TextBox31.Value
Module1.myText32 = TextBox32.Value
Module1.myText33 = TextBox33.Value
Module1.myText34 = TextBox34.Value
Module1.myText35 = TextBox35.Value
Module1.myText36 = TextBox36.Value
Module1.myText37 = TextBox37.Value
Module1.myText38 = TextBox38.Value
Module1.myText39 = TextBox39.Value
Module1.myText40 = TextBox40.Value
Module1.myText41 = TextBox41.Value
Module1.myText42 = TextBox42.Value
Module1.myText43 = TextBox43.Value
Module1.myText44 = TextBox44.Value
Module1.myText45 = TextBox45.Value
Module1.myText46 = TextBox46.Value
Module1.myText47 = TextBox47.Value
Module1.myText48 = TextBox48.Value
Module1.myText49 = TextBox49.Value
Module1.myText50 = TextBox50.Value
Module1.myText51 = TextBox51.Value
Module1.myText52 = TextBox52.Value
Module1.myText53 = TextBox53.Value
Module1.myText54 = TextBox54.Value
Module1.myText55 = TextBox55.Value
Module1.myText56 = TextBox56.Value
Module1.myText57 = TextBox57.Value
Module1.myText58 = TextBox58.Value
Module1.myText59 = TextBox59.Value
Module1.myText60 = TextBox60.Value
Module1.myText61 = TextBox61.Value
Module1.myText62 = TextBox62.Value
Module1.myText63 = TextBox63.Value
Module1.myText64 = TextBox64.Value
Module1.myText65 = TextBox65.Value
Module1.myText66 = TextBox66.Value
Module1.myText67 = TextBox67.Value
Module1.myText68 = TextBox68.Value
Module1.myText69 = TextBox69.Value
Module1.myText70 = TextBox70.Value
Module1.AdditionalNotes = TextBoxAdditionalNotes.Value
UserForm2.Show
End Sub
' Code behind Form2 only calls module function
Private Sub CommandButton2_Click(UserForm2)
PrintVals
End Sub
When I run UserForm1 object: No errors but clicking commandbutton1 doesnt bring up UserForm2
Any help solving is appreciated! Thanks!
Public is very abnormal in VBA Forms. Your controls, like a TextBox, can be seen publicly from other forms. So for instance, UserForm1 can see the textbox value on UserForm2 and vice versa. So the following works if textboxes exist in both forms cases:
' Is the button that launches the second form
Private Sub CommandButton1_Click()
UserForm2.TextBox1.Value = Me.TextBox1.Value
UserForm2.TextBox2.Value = Me.TextBox2.Value
UserForm2.TextBox3.Value = Me.TextBox3.Value
UserForm2.Show
End Sub
Also, if no text boxes exist on UserForm2, UserForm2 should still be able to access the values directly from the text boxes in UserForm1 like:
Private Sub CommandButton1_Click()
'Assign a macro to the OK button
Dim emptyRow As Long
'Make Sheet2 Active
Sheets(2).Activate
'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Export Data to worksheet
Cells(emptyRow, 1).Value = UserForm1.TextBox1.Value
End Sub
But in many cases it is most useful to put your shared content on a Module instead. This way the public variables will be directly visible to all other forms, modules etc.
' Code behinde Module1 to store public values
Public myText1 As String
Public myText2 As String
' Code behind Module1 to actually use the values
Public Sub PrintVals()
'Assign a macro to the OK button
Dim emptyRow As Long
'Make Sheet2 Active
Sheets(2).Activate
'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Export Data to worksheet
Cells(emptyRow, 1).Value = myText1
Cells(emptyRow, 2).Value = myText2
End Sub
' Code behind Form1 Initialize text boxes
Private Sub Form_Initialize()
TextBox1.Value = "1234"
TextBox2.Value = "ABC"
End Sub
End Sub
' Code behind Form1 Set variables on module
Private Sub CommandButton1_Click()
Module1.myText1 = TextBox1.Value
Module1.myText2 = TextBox2.Value
UserForm2.Show
End Sub
' Code behind Form2 only calls module function
Private Sub CommandButton1_Click()
PrintVals
End Sub
[Edit after several posts]
Try starting a new excel file that doesn't have any of your current code. Create two new forms. Add just three textboxes onto UserForm1, and one command button onto both form 1 and form 2. Start with just the code from my solution above. And see if you can get that to work. If it works, then we can try to figure out what's different between the code above and your code and remove those differences if you can, or you can just flesh out the working example until it has all the textboxes you need. If it doesn't work then there may be something different between the excel versions or something fundamental like that.
My project window looks like this:
So the possibly important thing here is that all my forms are part of one Book. If your forms are in different books, we will have to modify the code to handle that.
i want to make a program that saves the text in textbox to excel file using loop because i want to insert multiple text to excel. i found codes but it only overwrites data in cells. i want the program to find the last row and insert new data to the next row. im stuck here, please someone help me how to do that in vb.net. here is my code:
Excel = CreateObject("Excel.Application")
Excel.screenupdating = True
Excel.Visible = True
'fieldnames
Dim xlWorkSheet As Object = Excel.workbooks.add
Excel.workbooks(1).worksheets(1).cells(1, 1).value = "TITLE"
Excel.workbooks(1).worksheets(1).cells(1, 2).value = "AUTHOR"
Excel.workbooks(1).worksheets(1).cells(1, 3).value = "EDITION"
Excel.workbooks(1).worksheets(1).cells(1, 4).value = "PUBLISHER"
Excel.workbooks(1).worksheets(1).cells(1, 5).value = "ISBN"
'i want to loop here the data in textboxes
Excel.workbooks(1).worksheets(1).cells(2, 1).value = txtTitle.Text
Excel.workbooks(1).worksheets(1).cells(2, 2).value = txtAuthor.Text
Excel.workbooks(1).worksheets(1).cells(2, 3).value = txtEdition.Text
Excel.workbooks(1).worksheets(1).cells(2, 4).value = txtPublisher.Text
Excel.workbooks(1).worksheets(1).cells(2, 5).value = txtISBN.Text
xlWorkSheet.SaveAs(FileName)
Excel.quit()
Excel = Nothing
you're going to need to dynamically set the value for the rowindex and the aplha column.
so something like this
dim currRow as integer = 0
Excel = CreateObject("Excel.Application")
Excel.screenupdating = True
Excel.Visible = True
'fieldnames
Dim xlWorkSheet As Object = Excel.workbooks.add
Excel.workbooks(1).worksheets(1).cells((currRow+1), 1).value = "TITLE"
Excel.workbooks(1).worksheets(1).cells((currRow+1), 2).value = "AUTHOR"
Excel.workbooks(1).worksheets(1).cells((currRow+1), 3).value = "EDITION"
Excel.workbooks(1).worksheets(1).cells((currRow+1), 4).value = "PUBLISHER"
Excel.workbooks(1).worksheets(1).cells((currRow+1), 5).value = "ISBN"
currRow += 1
for i as integer = currRow to 5
'i want to loop here the data in textboxes
Excel.workbooks(1).worksheets(1).cells((currRow + i), 1).value = txtTitle.Text
Excel.workbooks(1).worksheets(1).cells((currRow + i), 2).value = txtAuthor.Text
Excel.workbooks(1).worksheets(1).cells((currRow + i), 3).value = txtEdition.Text
Excel.workbooks(1).worksheets(1).cells((currRow + i), 4).value = txtPublisher.Text
Excel.workbooks(1).worksheets(1).cells((currRow + i), 5).value = txtISBN.Text
next
currRow += 1
xlWorkSheet.SaveAs(FileName)
Excel.quit()
Excel = Nothing
i don't know if this works but this is something to get you started.