In der Anlage habe ich mal mein Projekt angefügt. Eine erste Frage wurde mir schon beantwortet und konnte ich schon umsetzen. Das Projekt möchte ich gerne weiterentwickeln und würde gerne auch auf Eure Hilfe zurückgreifen.
Was bereits funktioniert ist, dass ich über eine ComboBox Aktenzeichen suchen kann und dann der komplette Datensatz angezeigt wird. Die Suche ist allerdings doch sehr beschränkt. Man könnte ja auch auf die Idee kommen mal nach Namen zu suchen oder nach der ID-Nr.. Mit der ComboBox bin ich aber auch eigentlich nicht ganz zufrieden. Lieber wäre mir, ich könnte in einem oder mehreren Textfeldern was eingeben und dann per Button suchen. Vielleicht kann mir mal einer für das Feld Name ein Beispiel erstellen und nach Möglichkeit die Sache auskommentieren, damit ich verstehe welcher Code was macht.
29.06.2015, 20:37 (Dieser Beitrag wurde zuletzt bearbeitet: 30.06.2015, 22:49 von Rabe.
Bearbeitungsgrund: Code eingerückt
)
Jut... Selbst ist der Mann :32:
Habe im Userform6 die Combox entfernt und kann nun schon über CommandButton die Suche auslösen und mit weiterem Button das Formular löschen. Theoretisch und Praktisch lässt sich damit für meinen Anwendungsfall die Suche abwickeln, muss aber noch optimiert werden. Kommt noch.
Folgenden Code habe ich "gebastelt":
Code:
Private Sub CommandButton1_Click()
On Error GoTo EERR Dim AAAZ As Long Dim AAAC As Long
If TextBox1 <> "" Then Dim SUCHENWAS As Variant SUCHENWAS = TextBox1.Value ActiveSheet.Range("a12:a1048576").Cells.Find(What:=SUCHENWAS, lookat:=xlWhole).Activate
Nun ist es aber so, dass ich wenn ich z.B. das Aktenzeichen 123456 eingebe, nur einen Datensatz angezeigt bekomme. Möchte ich alle Sätze mit 123456 angezeigt bekommen, dann müsste ich wohl mit ListBox arbeiten?
Ich hab mir jetzt für den Anfang Excel-VBA für Dummies gekauft und melde mich dann wieder, wenn ich das durchgearbeitet habe. Dann verstehe ich auch was ich frage
Dim AAAZ As Long Dim AAAC As Long ... AAAZ = CDbl(ActiveCell.Row) AAAC = CDbl(ActiveCell.Column)
Du definierst hier Variablen, von denen Du später eventuell nicht mehr weist, wozu die gut sind - geht jedenfalls aus dem Namen nicht hervor - als Long und versuchst dann, die Werte über eine Umwandlungsfunktion als Double zuzuweisen. Du brauchst hier nichts umzuwandeln.
Wenn nicht gefunden wird, dann läuft Dein code auf einen Fehler. Da gibt es verschiedene Wege, gegenzusteuern.
Die Listbox wäre ok, das hast Du richtig erkannt. Die füllst Du dann mit einer Schleife, musst natürlich ach nach dem nächsten Treffer suchen, schaue dazu mal nach FindNext. Alternativ, wenn die Daten sortiert sind, könnte man nach dem ersten Treffer auch mit einer Schleiffe den Zellinhalt mit dem Suchbegriff vergleichen und solange durchschleifen, wie der Suchtext enthalten ist.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Danke für den Tipp. Hab meinen Code mal korrigiert und das was ich wollte funktioniert auch erstmal. Schön ist der Code noch nicht. Aber das soll erstmal egal sein. Feintuning kommt noch
Korrektur... Funktioniert fast. Den Code schieb ich noch nach, wenn gebraucht, aber mal ne Frage zu Userform, Tabellenblatt und Berechnung. Per Userform befülle ich ein Tabellenblatt. Das funktioniert. Auf einem weiteren Blatt habe ich Formeln hinterlegt, die sich aus dem mit Userform befülltem Blatt Daten holen sollen und dann berechnen. Und hier ist der Haken. Gebe ich händisch, also ohne Userform direkt die Daten ins Tabellenblatt ein, dann berechnet er mir die Formeln, mache ich das über Userform, dann macht er mir die Berechnung nicht. Eine Idee ohne den Code zu sehen? Eine Einstellungsfrage? Unter Optionen habe ich schon geschaut. Automatisches Berechnen ist aktiviert.
Mmmh... Also ich finde nichts und dennoch will es nicht. Ich füge dann doch mal meinen Code und die Datei bei. Mit Sicherheit muss ich den noch aufräumen. Ich will auch gar nicht erst behaupten, dass ich hier viel selber "programmiert" hätte. Dafür fehlt mir dann doch noch das Verständnis... Hoffe Ihr könnt mal drüber schauen und vielleicht findet wer das Problem.
Schon jetzt vielen Dank!!!
Code:
Option Explicit Dim rngFind As Range
Private Sub CommandButton10_Click() 'Formular löschen!###### Dim ctrElement As Control
For Each ctrElement In Controls Select Case TypeName(ctrElement) Case "TextBox": ctrElement = "" Case "ListBox": ctrElement = "" End Select Next
Private Sub CommandButton13_Click() 'Änderungen an Daten speichern
' ' ändern '
Dim lLetzte As Long Dim ctrElement As Control
If TextBox27.Text = "" Then MsgBox "Sie müssen Aktenzeichen eingeben - Danke.", _ 48, " Hinweis für " & Application.UserName TextBox27.SetFocus Exit Sub End If If TextBox28.Text = "" Then MsgBox "Sie müssen einen Namen eingeben - Danke.", _ 48, " Hinweis für " & Application.UserName TextBox28.SetFocus Exit Sub End If
If TextBox29.Text = "" Then MsgBox "Sie müssen einen Vornamen eingeben - Danke.", _ 48, " Hinweis für " & Application.UserName TextBox28.SetFocus Exit Sub End If
' ' die Daten sind geprüft und können in die Tabelle eingetragen werden ' Application.ScreenUpdating = True
lLetzte = IIf(.Range("A65536") <> "", 65536, .Range("A65536").End(xlUp).Row) + 1 If lLetzte < 2 Then lLetzte = 2
End With
'Application.ScreenUpdating = True
'Formular Löschen For Each ctrElement In Controls Select Case TypeName(ctrElement) Case "TextBox": ctrElement = "" 'Case "ListBox": ctrElement = "" End Select Next
Private Sub CommandButton3_Click() 'Variable deklarieren Dim letzte_Zeile As Long
With Worksheets("Daten_WS")
'Die letzte beschrieben Zeile in Spalte A ermitteln letzte_Zeile = .Range("A65536").End(xlUp).Offset(1, 0).Row 'Eintrag aus TextBox1 (W-Listen-Nr.) in erste freie Zelle übertragen .Cells(letzte_Zeile, 1) = TextBox1.Text 'Eintrag aus TextBox2 (Aktenzeichen) in erste frei Zeile übertragen .Cells(letzte_Zeile, 2) = TextBox2.Text 'Eintrag aus TextBox3 (Name) in erste frei Zeile übertragen .Cells(letzte_Zeile, 3) = TextBox3.Text 'Eintrag aus TextBox4 (Vorname) in erste freie Zelle übertragen .Cells(letzte_Zeile, 4) = TextBox4.Text 'Eintrag aus TextBox5 (Wohn A/B/C) in erste freie Zelle übertragen .Cells(letzte_Zeile, 5) = TextBox5.Text 'Eintrag aus TextBox6 (Bescheid vom) in erste freie Zelle übertragen .Cells(letzte_Zeile, 6) = TextBox6.Text 'Eintrag aus TextBox7 (Bescheid Nr.) in erste freie Zelle übertragen .Cells(letzte_Zeile, 7) = TextBox7.Text 'Eintrag aus TextBox8 (Widerspruchsrate) in erste freie Zelle übertragen .Cells(letzte_Zeile, 8) = TextBox8.Text 'Eintrag aus TextBox9 (Rückforderung) in erste freie Zelle übertragen .Cells(letzte_Zeile, 9) = TextBox9.Text 'Eintrag aus TextBox10 (Widerspruch vom) in erste freie Zelle übertragen .Cells(letzte_Zeile, 10) = TextBox10.Text 'Eintrag aus TextBox11(Eingang 1. Instanz) in erste freie Zelle übertragen .Cells(letzte_Zeile, 11) = TextBox11.Text 'Eintrag aus TextBox12 (Eingang 2. Instanz) in erste freie Zelle übertragen .Cells(letzte_Zeile, 12) = TextBox12.Text 'Eintrag aus TextBox13 (Erledigt am) in erste freie Zelle übertragen .Cells(letzte_Zeile, 13) = TextBox13.Text 'Eintrag aus TextBox14 (Erledigungsart) in erste freie Zelle übertragen .Cells(letzte_Zeile, 14) = TextBox14.Text 'Eintrag aus TextBox15 (Standort) in erste freie Zelle übertragen .Cells(letzte_Zeile, 15) = TextBox15.Text 'Eintrag aus TextBox16 (Vermerk) in erste freie Zelle übertragen .Cells(letzte_Zeile, 16) = TextBox16.Text
End With
ClearAll
End Sub
Private Sub CommandButton14_Click() Unload Me UserForm4.Show
End Sub
Private Sub CommandButton15_Click() Unload Me UserForm1.Show
Private Sub CommandButton5_Click() If TextBox1.Text = "" Then 'UserForm schließen Unload UserForm2 Exit Sub Else If MsgBox("Den angezeigten Datensatz speichern ?", 36, "Sicherheitsabfrage") = vbYes Then CommandButton3_Click End If Unload UserForm1 End If End Sub
Private Sub CommandButton1_Click() Dim sSearch As String
'Datensatz suchen
If TextBox1.Text = "" Then MsgBox "Geben Sie bitte eine W-Listen-Nr. ein !" Exit Sub
Else sSearch = TextBox1.Text Set rngFind = Columns("A:A").Find(what:=sSearch, lookat:=xlWhole, LookIn:=xlValues) If rngFind Is Nothing Then If MsgBox("Diese W-Listen-Nr. existiert noch nicht !" & vbCrLf & vbCrLf & " Möchten Sie eine neue P-Nr. anlegen ?", vbQuestion + vbYesNo, "Nachfragen") = vbNo Then TextBox1.Text = "" TextBox1.SetFocus Exit Sub End If
Private Sub CommandButton2_Click() Dim sSearch As String Dim firstAddress Dim i As Integer
'Datensatz suchen
If TextBox2.Text = "" Then MsgBox "Geben Sie bitte ein Aktenzeichen ein !" Exit Sub
Else sSearch = TextBox2.Text Set rngFind = Columns("B:B").Find(what:=sSearch, lookat:=xlWhole, LookIn:=xlValues) If rngFind Is Nothing Then If MsgBox("Dieses Aktenzeichen existiert noch nicht !" & vbCrLf & vbCrLf & " Möchten Sie das Aktenzeichen anlegen ?", vbQuestion + vbYesNo, "Nachfragen") = vbNo Then TextBox2.Text = "" TextBox2.SetFocus Exit Sub
Private Sub CommandButton7_Click() Dim sSearch As String Dim firstAddress Dim i As Integer
'Datensatz suchen
If TextBox3.Text = "" Then MsgBox "Geben Sie bitte einen Namen ein !" Exit Sub
Else sSearch = TextBox3.Text Set rngFind = Columns("C:C").Find(what:=sSearch, lookat:=xlWhole, LookIn:=xlValues) If rngFind Is Nothing Then If MsgBox("Dieser Name existiert noch nicht !" & vbCrLf & vbCrLf & " Möchten Sie einen neuen Namen anlegen ?", vbQuestion + vbYesNo, "Nachfragen") = vbNo Then TextBox3.Text = "" TextBox3.SetFocus Exit Sub
Private Sub CommandButton8_Click() 'UserForm schließen und anderes UserForm starten##### UserForm2.Hide UserForm5.Show '##### End Sub
Private Sub CommandButton9_Click()
End Sub
Private Sub ListBox1_Click() Dim sSearch As String
If ListBox1.ListCount > 1 Then sSearch = ListBox1.List(ListBox1.ListIndex, 0) Set rngFind = Columns("A:A").Find(what:=sSearch, lookat:=xlWhole, LookIn:=xlValues)
'Textfelder, Schalter sperren, entsperren und sichtbar und unsichtbar machen CommandButton18.Visible = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'Fehlermeldung, wenn versucht wird, die UserForm über das 'Schließenkreuz oben rechts zu schließen If CloseMode = 0 Then Cancel = 1 MsgBox "Bitte verlassen Sie die Eingabemaske nur mit der Schaltfläche - Beenden.", _ vbOKOnly + vbInformation, "Bitte Schaltfläche betätigen." End If
End Sub
Public Sub UserForm_Initialize()
On Error GoTo EERR With UserForm1 .Height = 700 .Width = 900 End With
'Variable deklarieren Dim Wiederholungen As Integer Sheets("Daten_WS").Select
12.07.2015, 17:10 (Dieser Beitrag wurde zuletzt bearbeitet: 12.07.2015, 17:48 von Steffl.)
Hallo,
welche Tabellen sollen gefüllt werden? Und welche Formeln gehen nicht?
Nachtrag: Die Textboxen liefern, wie der Name schon sagt, Text zurück. Durch deine Zellformatierung siehst Du dies aber nicht (der Inhalt ist linksbündig ausgerichtet anstatt rechtsbündig). Nimm eine Umwandlungsfunktion wie CDate.
12.07.2015, 17:43 (Dieser Beitrag wurde zuletzt bearbeitet: 12.07.2015, 17:44 von sandormiles.)
Tschuldigung... Noch etwas ungenau meine Frage. Mit dem Code bzw. einem Teil davon, ändere ich Daten auf dem Datenblatt "Daten_WS". Das funktioniert auch. Die Daten werden alle in das Tabellenblatt geschrieben. Auf einem weiteren Tabellenblatt "Statistik" werden nun Daten aus dem Blatt "Daten_WS" ausgelesen bzw. sollen ausgelesen werden. Dies funktioniert eben nicht. Alle Einträge aus den Spalten K, L und M wertet das Blatt nicht aus. Trage ich die Daten so direkt in Daten_WS ein, dann klappt es. Muss ich vielleicht im Userform noch angeben, dass die Textbox Datumsangaben schreiben soll?