2016-05-16 15 views
-1

Ich habe ein Problem mit einem Benutzerformular in Excel 2010. Hier ist der Code:Excel 2010 Userforms vba

Private Sub Label1_Click() 

End Sub 

Private Sub Userform_Initialize() 

'EmptyRoleTextbox 
RoleTextBox.Value = "" 

'EmptyNameTextBox1 
NameTextBox1.Value = "" 

'EmptyDirTextbox1 
DirTextBox1.Value = "" 

'EmptyRemarksTextBox1 
RemarksTextBox1.Value = "" 

'EmptyAWSComboBox 
AWSComboBox.Clear 

'FillAWSComboBox 
With AWSComboBox 
    .AddItem "MA" 
    .AddItem "Combat" 
    .AddItem "Cbt Sp" 
    .AddItem "CSS" 
    .AddItem "Comd Sp" 
    .AddItem "AM" 
    .AddItem "Medical" 
    .AddItem "Military Police" 
    .AddItem "Baker Street" 
    .AddItem "Putney" 
    .AddItem "Sloane Square" 
    .AddItem "Kings Cross" 
    .AddItem "Whitechapel" 
    .AddItem "Holland Park" 
End With 


End Sub 

Private Sub Add_Click() 

Dim emptyRow As Long 

Dim LastRow As Long 

LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 

ActiveSheet.Cells(LastRow + 1, "A").Value = ActiveSheet.Cells(LastRow, "A").Value + 1 


'Transfer information 
If AWSComboBox.Value = "MA" Then 
Sheet1.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Combat" Then 
Sheet2.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Cbt Sp" Then 
Sheet3.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "CSS" Then 
Sheet4.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Comd Sp" Then 
Sheet5.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "AM" Then 
Sheet6.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Medical" Then 
Sheet7.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Military Police" Then 
Sheet8.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Baker Street" Then 
Sheet9.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Putney" Then 
Sheet10.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Sloane Square" Then 
Sheet11.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Kings Cross" Then 
Sheet12.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Whitechapel" Then 
Sheet13.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

ElseIf AWSComboBox.Value = "Holland Park" Then 
Sheet14.Activate 
emptyRow = WorksheetFunction.CountA(Range("A:A")) 
LastRow = WorksheetFunction.CountA(Range("A:A")) 
Cells(emptyRow, 2).Value = RoleTextBox.Value 
Cells(emptyRow, 3).Value = NameTextBox1.Value 
Cells(emptyRow, 4).Value = DirTextBox1.Value 
Cells(emptyRow, 5).Value = RemarksTextBox1.Value 
ActiveSheet.Cells(ActiveSheet.Rows.Count, Selection.Column).End(xlUp).Select 

End If 

Unload Me 

End Sub 

Private Sub Cancel_Click() 

    enter code here 

Unload Me 

End Sub 

Grundsätzlich kann jedes Element in der Combo-Box ist ein separates Arbeitsblatt. Wenn ich Informationen in das Feld einfüge, möchte ich, dass es in das richtige Arbeitsblatt in der leeren Zeile eingeht. Aber Spalte A in allen Blättern ist die Seriennummern der Elemente, so dass der Teil über die LastRow an einer zusätzlichen Nummer in dieser Spalte automatisch angibt.

Nun ist mein Problem, wenn ich ein anderes Arbeitsblatt (d. H. "MA") auswähle, aber ich fülle Details aus, um zum Blatt "Cbt" zu gehen, überschreibt es die letzte Zeile in diesem Blatt. Aber wenn ich schon das richtige Blatt auswähle, dann funktioniert das kein Problem.

Ich habe das Gefühl, es ist mit dem ActiveSheet zu tun. Keine Ahnung, wie man es beheben kann.

+0

immer den Bereich und die Zellen mit Eigentümer Objekt verwenden, d.h. Sheet1.Range ("A: A"), Sheet1.Cells (emptyRow, 2). – smozgur

+0

Oder mit ActiveSheet, da Sie bereits das Blatt in jedem Abschnitt ActiveSheet.Range ("A: A") aktivieren, ActiveSheet.Cells (emptyRow, 2). Side Kommentar: Ihr Code könnte A LOT verkürzt werden. – smozgur

+0

Erklären Sie und arbeiten Sie direkt an den Objekten, die Sie automatisieren möchten. [Vermeiden Sie die Auswahl] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros). – L42

Antwort

0

Anstatt ActiveSheet zu verwenden (weil Sie feststellen, dass es sich ändern könnte, was Sie wollen), erstellen Sie einen Verweis auf das erforderliche Arbeitsblatt und arbeiten Sie daran. Beispiel unten: -

Private Sub MyWorkSheet() 
Dim WkSht As Excel.Worksheet 

set WkSht = ThisWorkbook.WorkSheets(Me.AWSComboBox.Value) 
    LastRow = WkSht.Range("A" & Rows.Count).End(xlUp).Row 
Set WkSht = Nothing 

End Sub 
Verwandte Themen