Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datensatz wählen aber Wie ?

Datensatz wählen aber Wie ?
Walter
Guten Abend,
habe folgendes Makro über das füllen der Textboxen einer UF:

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim wbDatei, wb As Workbook
Dim wsData As Worksheet
Dim Datei As String
Dim bolOpen As Boolean
Dim aVarData() As String
Dim intY, intA As Integer
Dim strValue As String
Dim Fname
Set wsData = Sheets("Data")        ' Datenblatt zuweisen
Application.ScreenUpdating = False
strValue = UfFirmaSuchen.ListBox1.Value          ' ausgewählte Zeile in Dropdown
For intY = 2 To 1000                                           ' Eintrag in Datenbank suchen  _
1000 Zeilen nach unten
If wsData.Cells(intY, 1) = "" Then                   ' wenn leere Zelle gefunden
Exit For                                                       ' raus aus Schleife
ElseIf wsData.Cells(intY, 2).Value = strValue Then
Exit For                                                     ' ebenso wenn Name  _
gefunden
End If
Next
UFData.TextBox1.Value = wsData.Cells(intY, 1).Value             'lf. Nr. rein
UFData.TextBox2.Value = wsData.Cells(intY, 2).Value             'Firmenname
UFData.TextBox3.Value = wsData.Cells(intY, 3).Value             'Anrede
UFData.TextBox4.Value = wsData.Cells(intY, 4).Value             'Titel
UFData.TextBox5.Value = wsData.Cells(intY, 5).Value             'Vorname
UFData.TextBox6.Value = wsData.Cells(intY, 6).Value             'Name
UFData.TextBox7.Value = Format(wsData.Cells(intY, 7).Value, "dd.mm.yyyy")  'Geburtsdatum
UFData.TextBox8.Value = Format(wsData.Cells(intY, 8).Value, "YY")          'Alter
UFData.TextBox9.Value = wsData.Cells(intY, 9).Value             'Briefanrede
UFData.TextBox10.Value = wsData.Cells(intY, 10).Value           'Position
UFData.TextBox11.Value = wsData.Cells(intY, 11).Value           'Straße
UFData.TextBox12.Value = wsData.Cells(intY, 12).Value           'Haus Nr.
UFData.TextBox13.Value = wsData.Cells(intY, 13).Value           'PLZ
UFData.TextBox14.Value = wsData.Cells(intY, 14).Value           'Ort
UFData.TextBox15.Value = wsData.Cells(intY, 15).Value           'letzter Kontakt
UFData.TextBox16.Value = wsData.Cells(intY, 16).Value           'nächster Kontakt
UFData.TextBox17.Value = wsData.Cells(intY, 17).Value           'Verkäufer
UFData.TextBox18.Value = Format(wsData.Cells(intY, 18).Value, "### ###")  'Kundennummer
Application.ScreenUpdating = True
End Sub


Jetzt möchte ich gern die nächsten Datensätze anzeigen lassen mittels CommandButton nach VORN oder nach HINTER(Zurück)
Die UFData ist die Userform.
Vielleicht kann mir jemand helfen ?
mfg Walter MB

43
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Datensatz wählen aber Wie ?
Daniel
Hallo
im Prinzip würde ich es so machen:
1. Das Einlesen der Daten in eine eigne Sub auslagern
2. die Variable intY global anlegen, so daß sie für jede Sub innerhalb der Userform gültig ist.
3. sowohl die Suchfunktion als auch die Beiden Commandbuttons weisen den der Variable intY einen entsprechenden Wert zu und rufen die Sub zum Einlesen der Daten auf.
als Code siehts dann so aus: (beachte die Position der Dim intY-Anweisung)

Option Explicit
Dim intY As Integer
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim wbDatei, wb As Workbook
Dim wsData As Worksheet
Dim Datei As String
Dim bolOpen As Boolean
Dim aVarData() As String
Dim intA As Integer
Dim strValue As String
Dim Fname
Set wsData = Sheets("Data")        ' Datenblatt zuweisen
Application.ScreenUpdating = False
strValue = UfFirmaSuchen.ListBox1.Value          ' ausgewählte Zeile in Dropdown
intY = 0
On Error Resume Next
intY = WorksheetFunction.Match(strValue, wsData.Columns(2), 0) 'Zeile mit augesuchter Firma in  _
Daten finden
On Error GoTo 0
If intY = 0 Then
MsgBox ("Firma nicht gefunden")
Else
Call Datensatz_anzeigen
End If
End Sub
------------------------------------------------------------------------------------------------ _
Private Sub Datensatz_anzeigen()
If intY = 0 Then '  Sicherheitsabfrage
MsgBox ("keine Zeile ausgewählt")
Exit Sub
End If
UFData.TextBox1.Value = wsData.Cells(intY, 1).Value             'lf. Nr. rein
UFData.TextBox2.Value = wsData.Cells(intY, 2).Value             'Firmenname
UFData.TextBox3.Value = wsData.Cells(intY, 3).Value             'Anrede
UFData.TextBox4.Value = wsData.Cells(intY, 4).Value             'Titel
UFData.TextBox5.Value = wsData.Cells(intY, 5).Value             'Vorname
UFData.TextBox6.Value = wsData.Cells(intY, 6).Value             'Name
UFData.TextBox7.Value = Format(wsData.Cells(intY, 7).Value, "dd.mm.yyyy")  'Geburtsdatum
UFData.TextBox8.Value = Format(wsData.Cells(intY, 8).Value, "YY")          'Alter
UFData.TextBox9.Value = wsData.Cells(intY, 9).Value             'Briefanrede
UFData.TextBox10.Value = wsData.Cells(intY, 10).Value           'Position
UFData.TextBox11.Value = wsData.Cells(intY, 11).Value           'Straße
UFData.TextBox12.Value = wsData.Cells(intY, 12).Value           'Haus Nr.
UFData.TextBox13.Value = wsData.Cells(intY, 13).Value           'PLZ
UFData.TextBox14.Value = wsData.Cells(intY, 14).Value           'Ort
UFData.TextBox15.Value = wsData.Cells(intY, 15).Value           'letzter Kontakt
UFData.TextBox16.Value = wsData.Cells(intY, 16).Value           'nächster Kontakt
UFData.TextBox17.Value = wsData.Cells(intY, 17).Value           'Verkäufer
UFData.TextBox18.Value = Format(wsData.Cells(intY, 18).Value, "### ###")  'Kundennummer
Application.ScreenUpdating = True
End Sub
Private Sub CommandbuttonVor_click()
intY = intY + 1
Call Datensatz_anzeigen
End Sub
Private Sub commandbuttonZürück_click()
intY = intY - 1
If intY = 0 Then intY = 1
Call Datensatz_anzeigen
End Sub


Achso, den Suchalgorythmus hab ich auch noch etwas optimiert, jetzt nutzt er die VERGLEICHS-Funktion aus Excel und sollte damit schneller sein als deine Schleife.
Gruß, Daniel

Anzeige
AW: Datensatz wählen aber Wie ?
Ramses
Hallo
Sorry,... im Prinzip haben wir beide das gleiche, aber ich habe deinen Beitrag nicht gesehen, sondern erst nachdem ich meine Antwort geschickt habe.
Gruss Rainer

AW: Datensatz wählen aber Wie ?
Daniel
Hi
macht nichts, passiert ja öfters, dass sich 2 gleichzeitig mit der Frage beschäftigen.
u.U. können dann von den Verschiedenen Lösungen alle was lernen.
Gruß, Daniel

AW: Datensatz wählen aber Wie ?
Ramses
Hallo
Du musst den Code aufteilen und mit einer globalen Variable arbeiten die gültig ist, solange die UF offen ist.
Ich habe dir den Code mal in das Beispiel umgeschrieben
Option Explicit

'Globale Variable erstellen die gültig ist,
'solange die UF offen ist
Public UF_DataRow_Mind

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim wbDatei, wb As Workbook
    Dim wsData As Worksheet
    Dim Datei As String
    Dim bolOpen As Boolean
    Dim aVarData() As String
    Dim intY, intA As Integer
    Dim strValue As String
    Dim Fname
    Set wsData = Sheets("Data") ' Datenblatt zuweisen
    Application.ScreenUpdating = False
    strValue = UfFirmaSuchen.ListBox1.Value ' ausgewählte Zeile in Dropdown
    For intY = 2 To 1000 ' Eintrag in Datenbank suchen 1000 Zeilen nach unten
        If wsData.Cells(intY, 1) = "" Then ' wenn leere Zelle gefunden
            MsgBox strValue & " wurde nicht gefunden"
            Exit For ' raus aus Schleife
            ElseIf wsData.Cells(intY, 2).Value = strValue Then
            'Wert an die globale Variable übergeben
            UF_DataRow_Mind = intY
            'Ausfüllen der UF mit dem externen Makro starten
            Fill_Form UF_DataRow_Mind
            Exit For ' ebenso wenn Name gefunden
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Private Sub Fill_Form(dataRow As Long)
    UFData.TextBox1.Value = wsData.Cells(dataRow, 1).Value 'lf. Nr. rein
    UFData.TextBox2.Value = wsData.Cells(dataRow, 2).Value 'Firmenname
    UFData.TextBox3.Value = wsData.Cells(dataRow, 3).Value 'Anrede
    UFData.TextBox4.Value = wsData.Cells(dataRow, 4).Value 'Titel
    UFData.TextBox5.Value = wsData.Cells(dataRow, 5).Value 'Vorname
    UFData.TextBox6.Value = wsData.Cells(dataRow, 6).Value 'Name
    UFData.TextBox7.Value = Format(wsData.Cells(dataRow, 7).Value, "dd.mm.yyyy") 'Geburtsdatum
    UFData.TextBox8.Value = Format(wsData.Cells(dataRow, 8).Value, "YY") 'Alter
    UFData.TextBox9.Value = wsData.Cells(dataRow, 9).Value 'Briefanrede
    UFData.TextBox10.Value = wsData.Cells(dataRow, 10).Value 'Position
    UFData.TextBox11.Value = wsData.Cells(dataRow, 11).Value 'Straße
    UFData.TextBox12.Value = wsData.Cells(dataRow, 12).Value 'Haus Nr.
    UFData.TextBox13.Value = wsData.Cells(dataRow, 13).Value 'PLZ
    UFData.TextBox14.Value = wsData.Cells(dataRow, 14).Value 'Ort
    UFData.TextBox15.Value = wsData.Cells(dataRow, 15).Value 'letzter Kontakt
    UFData.TextBox16.Value = wsData.Cells(dataRow, 16).Value 'nächster Kontakt
    UFData.TextBox17.Value = wsData.Cells(dataRow, 17).Value 'Verkäufer
    UFData.TextBox18.Value = Format(wsData.Cells(dataRow, 18).Value, "### ###") 'Kundennummer
End Sub

'Diese Codes den Buttons "Vor" und "Zurück" zuweisen
Private Sub Button_Zurück_Click()
    UF_DataRow_Mind = UF_DataRow_Mind - 1
    Fill_Form UF_DataRow_Mind
End Sub


Private Sub Button_Vor_Click()
    UF_DataRow_Mind = UF_DataRow_Mind + 1
    Fill_Form UF_DataRow_Mind
End Sub


Gruss Rainer

Anzeige
Was habe ich Falsch gemacht ?
Walter
Hallo Rainer,
was habe ich den Falsch gemacht ?
Das Makro bleibt hier stehen: Fill_Form UF_DataRow_Mind
Fehlermeldung: Argumententtyp By Ref..
mfg walter mb

AW: Was habe ich Falsch gemacht ?
Ramses
Hallo
schreib mal sicherheitshalber :-)
Public UF_DataRow_Mind as Long
und sag mir dann aus welcher Prozedur der Fehler auftritt.
Alternativ mal die Mappe hochladen.
Gruss Rainer

AW: Was habe ich Falsch gemacht ?
Original
Hi,
Option Explicit
Private lngRow As Long

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim wbDatei, wb As Workbook
Dim wsData As Worksheet
Dim Datei As String
Dim bolOpen As Boolean
Dim aVarData() As String
Dim lngY As Long
Dim strValue As String
Dim Fname
Set wsData = Sheets("Data") ' Datenblatt zuweisen
Application.ScreenUpdating = False
strValue = UfFirmaSuchen.ListBox1.Value ' ausgewählte Zeile in Dropdown
For lngY = 2 To 1000 ' Eintrag in Datenbank suchen 1000 Zeilen nach unten
If wsData.Cells(lngY, 1) = "" Then ' wenn leere Zelle gefunden
MsgBox strValue & " wurde nicht gefunden"
Exit For ' raus aus Schleife
ElseIf wsData.Cells(lngY, 2).Value = strValue Then
'Wert an die globale Variable übergeben
lngRow = lngY
'Ausfüllen der UF mit dem externen Makro starten
Fill_Form lngRow
Exit For ' ebenso wenn Name gefunden
End If
Next
Application.ScreenUpdating = True
End Sub



Private Sub Fill_Form(dataRow As Long)
Dim i As Long
For i = 1 To 18
Controls("textbox" & i) = wsData.Cells(dataRow, 1).Text
Next
End Sub



Private Sub Button_Zurück_Click()
lngRow = lngRow - 1
Fill_Form lngRow
End Sub



Private Sub Button_Vor_Click()
lngRow = lngRow + 1
Fill_Form lngRow
End Sub


Wenn ByRef übergeben wird, müssen die Datentypen identisch sein!
Gib dir mal mehr Mühe bei den Korrekten Deklarationen.
mfg Kurt

Anzeige
Leider noch Fehler, bitte mal schauen
Walter
Hallo Kurt,
nicht wütend sein aber leider schreibt mir überall die Nr. der Datenbankzeile in jede Textbox
rein.

Private Sub Fill_Form(dataRow As Long)
Dim wsData As Worksheet
Set wsData = Sheets("Data") ' Datenblatt zuweisen
Dim i As Long
For i = 1 To 18
UFData.Controls("textbox" & i) = wsData.Cells(dataRow, 1).Text
Next
End Sub


Habe mal UFData. eingesetzt. Sonst war Fehlermeldung,
mfg Walter MB

Fehler gefunden aber !!!
Walter
Hallo Kurt,
hier die Fehlermeldung, hab den 1. Fehler gefunden, wsData.Cells(dataRow, 1).Text
anstelle 1 auch ein i eingesetzt, läuft!
Leider kann ich noch nicht nach vorn oder hinten, Fehlermeldung:
Sub oder Function nicht ...

Private Sub Button_Vor_Click()
lngRow = lngRow + 1
'  Fill_Form lngRow
End Sub


mfg Walter mb

Anzeige
AW: Fehler gefunden aber !!!
Daniel
Hi
dann Prüf mal, ob deine Bezeichungen auch mit den Aufrufen genau übereinstimmen.
Tippfehler hatten wir heute bzw gestern schon mal.
Gruß, Daniel

Leider ist ja schon peinlich...
Walter
Guten Morgen Daniel,
habe alles überprüft, es erscheint:
Laufzeitfehler 1004 Anwendungs- oder objektdefinierter Fehler und bleibt dann hier stehen:
UFData.Controls("textbox" & i) = wsData.Cells(dataRow, i).Text
mfg Walter mb

AW: Leider ist ja schon peinlich...
Daniel
Dann prüf doch mal deine Variablen durch, welche Werte sie haben, wenn der Fehler auftritt.
dazu im Debug-Modus einfach mit dem Cursor auf die Variable zeigen, dann wird der Wert in der Bubble-Help angezeigt. (falls es nicht geht, musst du irgendwo in den Options eine Einstellung ändern)
ich vermute mal, daß dataRow = 0 ist, das erzeugt zumindest den von dir beschriebenen Fehler.
Gruß, Daniel

Anzeige
Bitte Daniel helfen
Walter
Hallo Daniel,
ich hänge jetzt schon den ganzen Tag daran, leider ohne Erfolg.
Ich habe folgendes getan, das Makro ist im Formular der Listbox(UF)

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim wbDatei, wb As Workbook
Dim wsData As Worksheet
Dim Datei As String
Dim bolOpen As Boolean
Dim aVarData() As String
Dim lngY As Long
Dim strValue As String
Dim Fname
Dim lngRow As Long
Set wsData = Sheets("Data")                  ' Datenblatt zuweisen
Application.ScreenUpdating = False
strValue = UfFirmaSuchen.ListBox1.Value      ' ausgewählte Zeile in Dropdown
For lngY = 2 To 1000              ' Eintrag in Datenbank suchen 1000 Zeilen nach unten
If wsData.Cells(lngY, 1) = "" Then       ' wenn leere Zelle gefunden
MsgBox strValue & " wurde nicht gefunden"
Exit For                             ' raus aus Schleife
ElseIf wsData.Cells(lngY, 2).Value = strValue Then
'Wert an die globale Variable übergeben
lngRow = lngY
'Ausfüllen der UF mit dem externen Makro starten
Fill_Form lngRow
Exit For ' ebenso wenn Name gefunden
End If
Next
Application.ScreenUpdating = True
End Sub


Dies in der UFData Formular oben:
Private lngRow As Long


Private Sub Button_Zurück_Click()
Dim lngRow As Long
lngRow = lngRow - 1
Fill_Form lngRow
End Sub



Private Sub Button_Vor_Click()
lngRow = lngRow + 1
Fill_Form lngRow
End Sub


dann das Makro im Modul1:
Sub Fill_Form(dataRow As Long)
Dim wsData As Worksheet
Set wsData = Sheets("Data") ' Datenblatt zuweisen
Dim i As Long
For i = 1 To 18
UFData.Controls("textbox" & i) = wsData.Cells(dataRow, i).Text
Next
End Sub



Private Sub CB_Previous_Click()
'

Private Sub Button_Zurück_Click()
Dim lngRow As Long
lngRow = lngRow - 1
Fill_Form lngRow
End Sub



Private Sub CB_Next_Click()
'

Private Sub Button_Vor_Click()
lngRow = lngRow + 1
Fill_Form lngRow
End Sub


Bitte hilf mir, was habe ich Falsch gemacht ?
mfg Walter mb

Anzeige
AW: Bitte Daniel helfen
Ramses
Hallo
Lade doch mal die Tabelle mit ein paar Beispieldaten hoch.
Ansonsten ist das ganze ein Ratespiel.
Gruss Rainer

AW: Das mache ich jetzt
Ramses
Hallo
Mit den Variablen ist es wie mit dem Highlander:
Es darf nur EINE geben

Private Sub CB_Previous_Click()
'

Private Sub Button_Zurück_Click()
'Hier initialisierst du die Variable beim zurückgehen neu
'Damit hat sie den Wert 0 plus -1 ergibt -1 und diese Zeile gibt es nicht
'Also lösche diese Zeile dann geht es
Dim lngRow As Long
MsgBox "Vor Zurück: " & lngRow
lngRow = lngRow - 1
MsgBox "Zurück:" & lngRow
Fill_Form lngRow
End Sub


Gruss Rainer

Anzeige
AW: Das mache ich jetzt
Daniel
Hallo
das ist der Code zu deinen beiden Commandbuttons VOR und ZURÜCK

Private Sub CB_Previous_Click()
Dim lngRow As Long
lngRow = lngRow - 1
Fill_Form lngRow
End Sub
Private Sub CB_Next_Click()
lngRow = lngRow + 1
Fill_Form lngRow
End Sub


fällt dir da ein kleiner Unterschied auf?
durch das DIM lngRow legst du praktisch eine neue Variable an, die nur lokal, dh. für diese Sub gültig ist und natürlich den Startwert 0 hat.
(Excel hat da mit der Dimensionierung kein problem und unterscheidet zwischen der Lokalen lngRow und der globalen lngRow, wobei ich mir nicht sicher bin, ob das sauber funktioniert)
desweiteren solltest du in die Sub für zurückblättern noch ne Sicherheitsabfrage einbauen, damit Fill_Form nur aufgerufen wird, wenn lngRow einen korrekten Wert hat.
sonst stürtzt dein Makro jedesmal ab, wenn der Anwender einmal zuviel draufklickt, und das wirkt dann (im Gegensatz zum Rest) sehr unprofessionell.
am besten einfach:


Private Sub CB_Previous_Click()
if lngRow > 3 then lngRow = lngRow - 1
if lngRow > 2 then Fill_Form lngRow
End Sub
Private Sub CB_Next_Click()
lngRow = lngRow + 1
if lngRow > 2 Fill_Form lngRow
End Sub
dann kann da nicht mehr passieren und du bekommst auch die Überschriften nicht mehr in den _ Textfeldern angezeigt (wirkt auch nicht professionell) Gruß, Daniel

Anzeige
Hallo Daniel und Rainer
Walter
Hallo Ihr Zwei,
erst mal DANKE für Euren unermüdlichen Einsatz, ich bin halt nicht so perfekt,
habe dies eingesetzt:

Private Sub CB_Previous_Click()
if lngRow > 3 then lngRow = lngRow - 1
if lngRow > 2 then Fill_Form lngRow
End Sub



Private Sub CB_Next_Click()
lngRow = lngRow + 1
if lngRow > 2 then Fill_Form lngRow
End Sub


wenn ich die uf aufgerufen habe, kann ich nicht zurück gehen also von 3 auf 2.
Wenn ich erst nach vorne gehe, gehe ich ich dann zurück geht es direkt auf Datenzeile 1.
Die Spalte die Maßgebend ist die SpalteA fängt an in der zeile 3 mit der Nummerierung1 bis...
mfg walter

Anzeige
Hinweis
Walter
Hallo,
habe gerade festgestellt, wenn ich die UF aufrufe und (leider) 3x drücke springe ich zum 1.Datensatz
u.s.w. und wieder zurück.
Wenn ich den Namen aus Firma auswähle z.b. Nr. 16 und ich drücke dann nach vorn springt der Datensatz
auf 6 oder von 23 auf 1 Wieso?
mfg walter

AW: Hinweis
Ramses
Hallo
Wenn du eine Firma auswählst musst du natürlich aus der UF die Variable "lngRow" entsprechend anpassen.
Woher soll EXCEL sonst wissen, von welchem Datensatz aus du dich nach vorne bzw. zurück bewegen willst.
Tut mir leid, ich weiss ja nicht warum du das programmieren willst/musst und bzw. die Mappe im Code anpassen willst/musst, aber für das was du willst, ist der komplette Codeaufbau, sagen wir mal, etwas verwirrend.
Das Initialize-Ereignis das du ausführst ergibt eigentlich überhaupt keinen Sinn. Das Array das du bildest wird nirgends verwendet.
Ausserdem solltest du dir bei dem VBA-Konstrukt und dem ständigen Hin- und Herspringen angewöhnen nicht mit ActiveSheet.Range("A1").Value zu arbeiten, sondern die Tabelle korrekt anzusprechen was du verändern willst "Worksheets("Data").Range("A1").Value"
Gruss Rainer

Hallo Rainer hast ja Recht aber
Walter
Hallo Rainer,
Du hast ja RECHT, ich wollte nur mal sehen ob ich was zustande kriege, leider Fehlanzeige.
Die Makros habe ich halt zusammengebastelt aus dem Forum so mal gesucht etc., es gibt dann
halt Probleme, da komme ich halt nicht weiter,
sorry,
mfg Walter

Wie anpassen
Walter
Hallo Rainer,
will doch nicht schon wieder "stümperwerk" anstellen !
Bitte kurz ein Beispiel,
danke im voraus,
mfg Walter

AW: Hallo Daniel und Rainer
Daniel
Hi,
sorry ich verstehe deine Frage einfach nicht.
du musst halt dafür sorgen, das lngRow beim Aufrufen der Userform einen sinnvollen Startwert hat, also irgendwo in Private Sub UserForm_Initialize() noch einbauen

if lngrow


dann ist die Userform beim Öffnen leer und beim ersten Klick auf VOR erscheint der erste Datensatz
Gruß, Daniel

Hallo
Walter
Hallo Daniel,
leider erscheint nicht der 1. Datensatz sondern der 73 und ich kann nicht nach vorn oder hinten:
if lngrow<3 then lngrow = 2
Ich möchte bei Aufruf immer den 1. Datensatz drin haben.
gruß walter mb

AW: Hallo
Ramses
Hallo
"...Ich möchte bei Aufruf immer den 1. Datensatz drin haben...."
dann musst du halt beim Aufruf der UF am Ende
Fill_Form 1
verwenden, wobei 1 hier für die erste Zeile deiner Datensätze steht.
Gruss Rainer

AW: Hallo
Daniel
Hallo
Deine Beispiel-Datei hat keine 73 Datensätze !
daher kann ich das Problem auch nicht nachvollziehen.
wenn beim Aufruf der Userform immer der 1. Datensatz erscheinen soll, muß irgendwo in die SUB USERFORM_INITIALIZE() folgender Code rein: (am besten am Ende)

lngRow = 3
Fill_Form lngRow


Gruß, Daniel

Ja aber
Walter
Hey Daniel,
soweit kapiert eingesetzt und funktioniert.
Wenn ich jetzt nach vorne den nächsten Datensatz auswählen möchte, muß ich 3x drücken.
Kann man das nicht ändern ?
mfg walter

Bitte mein Beispiel anschauen
Walter
Hallo Zusammen,
habe dies mal erstellt, das Problem es wird Rückwärts gezählt, sollte aber nach vorne zählen.

Private Sub CB_Next_Click()
Dim ww
ww = UFData.TextBox1.Value      'ww ist die Zahl in der Textbox1 steht
' MsgBox ww
lngRow = ww + 1
If lngRow > 2 Then Fill_Form lngRow
'--------- Orginal ---------------------
' lngRow = lngRow + 1
' If lngRow > 2 Then Fill_Form lngRow
End Sub


Vielleicht geht das für Vorwärts zählen , ansonsten kann ich dies zum Rückwärtszählen ja nehmen.
mfg Walter

AW: Bitte mein Beispiel anschauen
Daniel
Hallo
ww ist die Zahl, die beim aktuellen Datensatz in Spalte a steht (also die Lieferanten-Nr).
lngRow ist die Nummer der Zeile, in der sich das ganze befindet.
in deiner Blätterfunktion brauchst du die Zeilen-Nr, die hat aber nichts mit der Lieferanten-Nr zu tun (schließlich willst du deine Tabelle auch mal anders sortieren, dann haben beide Nummern sowieso nichts mehr miteinander zu tun.)
wenn du beide Nummern in verbindung bringen willst, dann ausgehend von der Lieferanten-Nr nur über eine Suchfunktion, die dir die ZeilenNr des gefundenen Wertes zurück gibt, wie
lngRow = Range("A:A").find(what:=ww, lookat:=xlwhole).row oder
lngRow = worksheetfunction.match(ww, sheets("Data").columns(1),1)
Gruß, Daniel

Bitte nur noch dieses, dann ist schl..
Walter
Hallo Daniel,
bitte setze dies doch bei mir ein, ich habe nur Fehlermeldung.
Hintergrund ist doch das ich die Datenreihe ermitteln möchte und dann weitergehen will.

Private Sub CB_Next_Click()
Dim ww
lngRow = worksheetfunction.match(ww, sheets("Data").columns(1),1)    2 Then Fill_Form lngRow
End Sub


Danke im voraus,
walter mb

AW: Bitte nur noch dieses, dann ist schl..
Daniel
Hallo
mal ne blöde Frage, wozu brauchst du das überhaupt, vorallem in CB_Next_click
lngRow sollte eigentlich als globale Variable auf dem aktuellen wert stehen.
außerdem machst du den gleichen Fehler wie schon mal,
ww ist immer 0 und kann daher nicht gefunden werden.
dann bricht Worksheetfunction.Match mit einem Fehler ab
außderdem stellt sich bei diesem Vorgehen die Frage, was soll bei Klick auf Next angezeigt werden:
- die Nächste Zeile aus der Tabelle oder
- der Datensatz mit der nächsten Nummer
die Frage ist dann entscheidend,wenn die Tabelle mal umsortiert wird, in welcher Reihenfolge sollendann die Datensätze in der Userform angezeigt werden.
Gruß, Daniel

Es soll der nächste Datensatz
Walter
Guten Morgen Daniel,
es soll der nächste Datensatz ausgesucht werden und in die UF geladen werden.
Deswegen hatte ich in der Datenbank der Spalte "A" die laufende Nr. ermitteln wollen.
Möcht aber auch nicht lässssstig werden, brauch nur noch diese Unterstützung !
herzliche Grüße
Walter

AW: Bitte nur noch dieses, dann ist schl..
Daniel
Du machst den gleichen Fehler schon mal.
kommst du selber drauf?
Gruß, Daniel

Hallo ich komme...
Walter
Hallo Daniel,
habe geschaut und getestet komme nicht auf den Fehler.
Ich möchte nur das mir der aktuelle Datensatz der mir angezeigt wird, entsprechend
dann das ich beim anklicken den nächsten Datensatz auswählen kann.
Bitt...
mfg Walter mb

AW: Hallo ich komme...
Daniel
du dimensionierst ww direkt bevor du ww in der Funktion verwendest, damit ist es natürlich 0, egal was du vorher reingeschrieben hast.
ist das gleiche wie schonmal bei lngRow.
Du solltest schon versuchen zu verstehen, was wir dir hier erklären.
Aber generell würde ich innerhalb deiner Userform das ww mir der Lieferanten-Nr weglassen.
Benutze alleine lngRow wie beschrieben und zähle dieses rauf und runter, ohne das irgendwie auf die Lieferanten-Nr zu beziehen.
solange die Userform aktiv ist, zeigt lngRow als globale Variable immer auf den aktuellen Datensatz.
wie gesagt. die Lieferanten-Nummer hat nichts mit der Excel-Zeilen-Nr zu tun.
Gruß, Daniel

Hallo
Walter
Hallo Daniel,
ich glaube ich habe es ein wenig verstanden.
Habe dies jetzt so gelassen:
lngRow = lngRow + 1
If lngRow > 2 Then Fill_Form lngRow
das Problem ist NUR, wenn ich von der Firmenauswahl ausgewählt habe und dann nach vorne
klicke um den nächsten Datensatz zanzuwählen, kommen immer mal 29 mal 23 us.w.
Sonst habe ich nicht.
Hier müßte doch die aktuelle Datenselektion die in der UF nachher angezeigt wird irgenwie
"reingezogen" werden um den nächst höheren Daten zu wählen also 12 danach 13 !
Ich hoffe Du hilfst noch einmal kurz,
mfg Walter

Zur Info die Makros
Walter
Hallo Daniel,
anbei die beiden Makros:

Private Sub CB_Previous_Click()
Dim ww
ww = UFData.TextBox1.Value      'ww ist die Zahl in der Textbox1 steht
lngRow = ww + 1
If lngRow > 2 Then Fill_Form lngRow
End Sub



Private Sub CB_Next_Click()
'--------- Orginal ---------------------
lngRow = lngRow + 1
If lngRow > 2 Then Fill_Form lngRow
End Sub


Wenn ich aus dem Firmennamen auswähle (von der FirmenUF auswahl), dann auf zurück klicke und
auf CB_next werden die RICHTIGEN Datensätze angezeigt, wie gesagt muß erst zurück klicken.
mfg walter mb

Könnte man ein Spinnbutton
Walter
Hallo Daniel,
könnte man auch ein Private Sub SpinButton1_Change() , benutzen ?
With Cells(spnColumn.Max - spnColumn.Value + 1, 1)
Fill_Form lngRow
End With
gruß walter mb

AW: Könnte man ein Spinnbutton
Daniel
Ob Spin- oder anderer Button ist grundsätzlich mal egal.
zu folgenden Fragen solltest du dir eine Antwort überlegen:
- Wenn der Anwender auf den Button drückt, welcher Datensatz soll gezeigt werden:
a) der, der in der Liste direkt daneben steht
b) der, der die nächst grössere/kleinere Lieferanten-Nr. hat
gehe mal davon aus, daß die Liste unterschiedlich sortiert sein kann!
- falls die Antwort b) heißst:
wie soll das Makro reagieren, falls in den Lieferanten-Nummern mal eine Lücke ist ?
Gruß, Daniel

Endlich, bin schon
Walter
Hallo Daniel, DANKE
bin seit 17.00Uhr wieder dran.
Also Wenn sortiert wird, wird immer die Spalte A NICHT sortiert, die Nummerierung bleibt,
da die Kunden eine Nr. später in der Spalte 18 erhalten.
Dadurch ensteht keine Lücke.
Das Problem ist ja nur wenn ich von der Auswahl Firmen UF komme also einen ausgewählt habe,
das ist z.b. die Nr. 33 in der Spalte A, dann sollte nach "oben" die nächst höhere also Nr. 34 angezeigt werden.
Wenn ich die UFData sonst aufrufe und ich klicke an geht es einwandfrei nach oben oder unten.
Ich krieg es halt nur nicht hin, das ich die Datenzeile die ich jetzt in der UFData habe nicht "erkenne".
mfg Walter mb

Hallo Daniel sonst machen wird halt
Walter
Hallo Daniel,
wenn Du mir noch helfen kannst oder möchtest, dann BITTE bis MORGEN, ansonsten werden ich in 2 Wochen mal nachfragen, da ich unterwegs bin.
Würde mich um eine Lösung freuen.
Hier noch einmal die Testdatei.
Hinweis NUR wenn ich den Firmennamen ausgesucht hatte dann den nächsten Datensatz nach
oben also angezeigt Nr.22 dann Nr. 23 auswählen.
Zurück kommt ebenfalls Fehlermeldung.
https://www.herber.de/bbs/user/42934.xls
mfg Walter mb

AW: Hallo Daniel sonst machen wird halt
Daniel
deine datei enthält immer noch den Fehler, den ich dir schon 2x korrigiert habe!
Geh erst mal in den Urlaub, und dann mach mal nen VBA-Kurs.
Gruß, Daniel

Danke ! -)
Walter
Danke für die Info,
walter mb

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige