Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Maske Userform
#1
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
Antwortento top
#2
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").
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#3
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?
Antwortento top
#4
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
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#5
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.
Antwortento top
#6
Hi,

vielleichr stellst Du uns mal die aktuelle Datei vor?
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antwortento top
#7
hier ist sie

https://www.sendspace.com/file/h4gjhm
Antwortento top
#8
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.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antwortento top
#9
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.
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#10
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.
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste