Clever-Excel-Forum

Normale Version: VBA Maske Userform
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich arbeite gerade an einer Userform, mit welcher eine Reihe von Daten, wie der Name die Stadt email adress und ähnlich abgefragt werden sollen. Es sind sehr viele Daten und ich habe es mir so vorgestellt, dass ich 3 command Buttons habe. Zuerst soll ein Suchkriterium festgelegt werden, so z B das Geburtsdatum, nachdem dieses eingegeben wurde wird auf OK (Command Button) gedrückt. Danach werden alle weiteren Informationen in die TextBoxen gefüllt und ich kann eine Information, wie das Haustier, ändern und speichern (Command Button). So, danach soll die ganze Userform automatisch geschlossen werden. Wie macht man das?

Ich habe hier schonmal einen Entwurf, jedoch klappts nicht ganz. Vielleicht kann es sich mal jemand ansehen und mir sagen was falsch ist. Ich wäre sehr dankbar.

Private Sub ArrowUp_Click()
  'Pfeil weiter
  ZeileAktuell = ZeileAktuell + 1
  With Worksheets("Tabelle2")
  If ZeileAktuell <= .Cells(.Rows.Count, 1).End(xlUp).Row Then
    Call Data
  Else
    MsgBox "Last Data is shown", vbQuestion + vbOKOnly, "Data next"
  End If
  End With
End Sub
 
Private Sub UserForm_Click()
 
Option Explicit
 
Private ZeileAktuell As Long
 
Private Sub Cancel_Click()
  Unload Me
End Sub
 
Private Sub Data()
 
With Worksheets("Tabelle2")
  Me.TextBox1.Value = .Cells(ZeileAktuell, 1).Value
  Me.TextBox2.Value = .Cells(ZeileAktuell, 2).Value
  Me.TextBox3.Value = .Cells(ZeileAktuell, 3).Value
  Me.TextBox4.Value = .Cells(ZeileAktuell, 4).Value
  Me.TextBox5.Value = .Cells(ZeileAktuell, 5).Value
  Me.TextBox6.Value = .Cells(ZeileAktuell, 6).Value
  Me.TextBox7.Value = .Cells(ZeileAktuell, 7).Value
  Me.TextBox8.Value = .Cells(ZeileAktuell, 8).Value
  Me.TextBox9.Value = .Cells(ZeileAktuell, 9).Value
  Me.TextBox10.Value = .Cells(ZeileAktuell, 10).Value
End With
 
End Sub
 
Private Sub Correct_Click()
  'Daten korrigieren
  If MsgBox("Data change?", vbQuestion, "Data correct?") = vbYes Then
    With Worksheets("Tabelle2")
      .Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value
      .Cells(ZeileAktuell, 2).Value = Me.TextBox2.Value
      .Cells(ZeileAktuell, 3).Value = Me.TextBox3.Value
'     .Cells(ZeileAktuell, 4).Value = Me.TextBox4.Value
      .Cells(ZeileAktuell, 5).Value = Me.TextBox5.Value
      .Cells(ZeileAktuell, 6).Value = Me.TextBox6.Value
      .Cells(ZeileAktuell, 7).Value = Me.TextBox7.Value
      .Cells(ZeileAktuell, 8).Value = Me.TextBox8.Value
    End With
'    MsgBox ("Die Daten wurden ge?ndert")
  End If
End Sub
 
Private Sub ArrowDown_Click()
  'Pfeil zur¨¹ck
  ZeileAktuell = ZeileAktuell - 1
  If ZeileAktuell >= 2 Then
    Call Data
  Else
    MsgBox "1. Data shown", vbQuestion + vbOKOnly, "Data back"
  End If
End Sub
 
Private Sub UserForm_Initialize()
  Worksheets("Daten").Activate
  ZeileAktuell = 2
  Call Data
End Sub
Hallöchen,

erst mal nur "oberflächliche" Besonderheiten.
So was geht nicht

...
Private Sub UserForm_Click()

Option Explicit

Private ZeileAktuell As Long
...

Das Sub hat kein End Sub, Option Explicit steht nicht am Anfang ... Die Codes stehen doch alle in einem Userform?


Im Private Sub UserForm_Initialize() aktivierst Du ein Blatt Worksheets("Daten").Activate. In den anderen codes hast Du jedoch With Worksheets("Tabelle2").
ja bin noch Anfänger bei Visual Basic, aber ein bisschen was hab ich schon zusammenbekommen. Gut das werde ich ändern, danke. Wie krieg ich das mit dem laden der Daten aus einer bestimmten Zeile hin, wenn ich eine Nr. bspw eintrage und mit OK bestätige?
Hallöchen,

wie gesagt, Option Explicit steht am Anfang des Moduls.
Dann kommt z.B. Dim ZeileAktuell As Long

Anschließend die ganzen Makros, wobei jedes Sub mit End Sub abgeschlossen sein muss.


Wenn Du z.B. in einem Textfeld im Userform eine Nummer einträgst, so kannst Du sie auch dierekt verwenden, z.B. in einem userform mit einer textbox1 und einem Commandbutton1. Du kannst, wie hier im Beispiel den Text sogar einer Zahlenvariable zuweisen. Es wäre dann natürlich vorteilhaft, wenn Du die Eingabe prüfst, bevor Du damit weiterarbeitest - sonst könnten einige Fehler auflaufen. Einen Text oder eine Zahl <=0 bekommst Du nicht in die Zeilennummer von Cells, und lRow klappt auch nicht mit Text ...

Code:
Private Sub CommandButton1_Click()
Dim lRow As Long
MsgBox TextBox1.Text
MsgBox Cells(TextBox1.Text, 1).Address
lRow = TextBox1.Text
End Sub
ich habs versucht aber ich komm einfach nicht drauf. Danke für den Tipp, aber mit dem Code wird mir eine MsgBox angezeigt, nicht das was ich suche.

Ich habe 8 TextBoxen, in eine trage ich den Wert 111222 ein (irgendeine Nr.), danach klicke ich auf Ok (Command Button) und die TextBoxen werden mit den Werten gefüllt die zu der Zeile gehören in welcher die Nr 111222 steht.

Also: Name, Nr. Haustier, email, Stadt
Maier, 1112223, Katze, maier.at. Stadt
Müller, 111222, Hund, Mueller.at. Stadt2


Output: in den Textboxen der Userform steht nun: Müller, in Textbox2 Hund in TextBox3 Mueller.at und in TextBox4 Stadt2

Jetzt koennte sich die Stadt ändern, aus Stadt2 wird Stadt3, dann bestätige ich und fertig.

Ich hoffe dass mir jemand einen Tipp geben kann.
Hi,

vielleichr stellst Du uns mal die aktuelle Datei vor?
Hi,

na, da bin ich mal gespannt, wie die Helfer reagieren, die sich hier tagelang schon mit Deinem Problem beschäftigen.

Ich hatte Dich um eine aktuelle Datei gebeten. Es befindet sich aber nicht eine einzige Codezeiile in der Datei.
Ich jedenfalls komme mir ziemlich verarscht vor.
Hallöchen,

also, Du hattest ja geschrieben, dass Du eine Nummer eingibst. Ich habe das jetzt als Zeilennummer interpretiert und nicht als Zellinhalt - stand ja nicht da Sad
Das da eine MSgBox aufgeht ist so gewollt - ich hab Dir damit gezeigt, wie die Übernahme der in eine Textbox eingegebenen Daten funktioniert.


Wie man einen Zellinhalt findet, kann man z.B. mit dem Makrorecorder aufzeichnen. Ich habe das mal hier getan:
Code:
Sub Makro1()
'
' Makro1 Makro
'

'
    Selection.Find(What:="1122", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
End Sub

Wenn 1122 gefunden wurde, wird die entsprechende Zelle aktiviert. Damit kann man nun weiterarbeiten. Kennst Du Offset?

Das Prinzip ist nun:

Code:
With ActiveCell
  Msgbox .Offset(0,2).Value & chr(10) & Offset(0,3).Value
End With

Damit wird Dir in einer Msgbox ausgegeben, was ein paar Zellen rechts neben dem Treffer steht.

Übrigens wäre da noch eine Fehlerbehandlung interessant, wenn der eingegebene Suchbegriff nicht enthalten ist.
nicht eine einzige code zeile, der code steht in meinem ersten Beitrag. Ich habe ihn nicht reinkopiert, ja weil ich mit der Datei zeigen wollte was ich vorhab.

Ok, vielen Dank, es hilft mir weiter. Nur MsgBoxen suche ich nicht. Mit der Userform sollen Werte korrigiert werden können, die TextBoxen in der Userform sollen mit den Zellinhalten gefüllt werden, dann korrigiere ich etwas und das wird in die Tabelle übernommen.

Es muss doch verständlich ausgedrückt sein, siehe erster Beitrag von mir.

Ja geschrieben hab ich Geburtsdatum, ok richtig. Aber selbst wenn es eine Zeilennummer wäre, das ist ja auch denkbar. Jedenfalls soll der zeileninhalt in die Textboxen der Userform wenn irgendetwas eingetippt wird was sich bereits in der Zeile befindet, geschrieben werden. Herr Mueller zieht um, also öffne ich meine Userform, tippe Mueller ein, Datensatz wird in Textboxen geschrieben, ich klicke auf TextBox für Stadt und ändere diese.
Seiten: 1 2