Menü
An- und Abmelden
Partner / Links
|
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
Nachrichten - UliD22
Seiten: [1]
1
« am: Mai 04, 2015, 12:41:57 Nachmittag »
Guten Morgen,
Hinzufügen = wenn noch kein Eintrag in der Liste drin ist, dann Zeilennummer (immer in erster Spalte der Listbox) auf die Startzeile setzen. Ist schon ein Eintrag in der Listbox drin, dann die Zeilenummer der letzten Zeile + 1 nehmen = Letzte Zeile + 1 der Tabelle in dem aktuellen Einlesezustand. Eine neue Zeile in der Listbox wird an der Ende der Liste gesetzt. Jetzt ok?
Gruß
Na klar ... Danke
2
« am: Mai 04, 2015, 08:46:06 Vormittag »
Kurze Zwischenmeldung: Ich habe Dich natürlich nicht vergessen. Ich ergänze gerade die noch fehlenden Codes-Zeilen. Was ich bisher gesehen habe, ist klasse! Melde mich, wenn ich mehr weiß Komme noch nicht so ganz mit diesem Teil zurecht ... mir ist die Systematik noch nicht ganz klar Private Sub btn_New_Click() ' Bypass... blnBypass = True ' Zurücksetzen... KundendatenZuruecksetzen ' Hinzufügen... If lsb_Kunden.ListCount > 0 Then lsb_Kunden.AddItem lsb_Kunden.List(lsb_Kunden.ListCount - 1, 0) = CStr(CLng( _ lsb_Kunden.List(lsb_Kunden.ListCount - 2, 0)) + 1) lsb_Kunden.List(lsb_Kunden.ListCount - 1, 1) = "?" ?* ?* ?*
Else lsb_Kunden.AddItem lsb_Kunden.List(lsb_Kunden.ListCount - 1, 0) = CStr(cstDatenblattStartzeile) lsb_Kunden.List(lsb_Kunden.ListCount - 1, 1) = "?"
?** ?** ?** End If ' Bypass... blnBypass = False ' Index... lsb_Kunden.ListIndex = lsb_Kunden.ListCount - 1 End Sub Wie geht es hier weiter ...
3
« am: Mai 01, 2015, 12:46:53 Nachmittag »
Hallo Uli,
anbei eine Version für Dein Tool. Habe den ehemaligen Code entfernt und eine neue Implementierung in dem Dialog vorgenommen. Allerdings habe ich nicht alle Ereignisse implementiert, speziell zu den Textboxen fehlen noch einige. Du müsstest diese also dann ergänzen; als Muster dienen dann die bereits implementierten. Ereignisse für die abhängigen Textboxen bzw. die, die an Formeln gekoppelt sind, sind nicht notwendig.
Der Speichern Button ist nicht enthalten. Da hängt's davon ab, ob Du nur Ändrungen am aktuellen Datensatz oder alle and den Datensätzen vorhandenen Änderungen speichern möchtest. Beides würde eine andere Art der Implementierung bedingen, d.h. dass dann die Datensätze (oder mindestens der aktuelle) nicht direkt in die Tabelle geschrieben werden, sondern z.B. in einem Array vorgehalten werden. Um das zu implementieren fehlt mir allerdings die Zeit. Das Löschen ist auch relativ simpel, es können dann Lücken entstehen. Könntest beim Beenden des Dialogs sortieren. Insgesamt, schau' mal, ob's so passt. Intensiv getestet habe ich nicht.
PS: damit die Datei hier hochgeladen werden kann, habe ich mal viele Datensätze bei den BIC's entfernt.
Gruß
Das hört sich klasse an. Ich werde mir das am Sonntag zu Gemüte führen. Da morgen Eröffnung ist, haben wir grad mal alle Hände voll zu tun. Aber trotzdem : Vielen Dank - erst mal...
4
« am: April 30, 2015, 12:31:59 Nachmittag »
5
« am: April 30, 2015, 10:45:09 Vormittag »
Moin Uli,
kannst Du eine Version der Datei ohne Daten hier hochladen? Ein Nachbau der Datei wäre ziemlich aufwändig.
Gruß
Ja werde ich machen. Habe ich auf meinen Server gelegt. zu groß --> kunden.xlsmIch habe ALLE Daten, bis auf die Nachnamen verfälscht. Und dann habe ich ungefähr 35000 Postleitzahlen gelöscht. Tut mir Leid, wenn Deine Stadt dabei gewesen ist. Dein Hinweis, dass WENNFEHLER(SVERWEIS(...);"-") war \o/\o/\o/\o/\o/\o/\o/ SPITZE \o/\o/\o/\o/\o/\o/\o/ Der Hat schon mal geholfen - Jetzt gibt es noch die CMD- unten. Also: 1. Neuer Datensatz --> generiert einen neuen Datensatz - schreibt aber in A »Neuer Eintrag« stattdessen sollte dort aber der Zu- und Vorname verkettet werden (... =VERKETTEN(C3; " "; D3) ... ) 2. Springt nach dem Speichern des neuen Datensatzes der Curser immer wieder nach oben ... hmmm ... wenn ich Dir (Euch) damit auf die E.. Nerven gehe, dann sagt es mir -- BITTE
6
« am: April 30, 2015, 07:52:34 Vormittag »
Hallo,
erstmal vielen Dank für die ausführliche Erläuterung. Dem Fehler nach zu schließen, liefert der SVERWEIS einen Fehler (z.B. #NV) in der Zelle, weshalb dies nicht der Textbox zugeordnet werden kann. Könntest Deine SVERWEIS-Formel anpassen und schauen, ob es dann klappt:
WENNFEHLER(SVERWEIS(...);"-")
Du hast zudem einige Ungereimtheiten im Code drin. Beispiele: CStr() sollte auf eine Zahl angewandt werden, somit z.B. statt CStr("Neuer Eintrag Zeile " & lZeile) dann "Neuer Eintrag Zeile " & CStr(lZeile) denn sonst nützt CStr() nichts. Ereignisse sollten in der Regel nicht direkt vom Code aufgerufen werden - die werden durch Excel ausgelöst. Besser ist, den Ereigniscode in eine Prozedur bzw. Funktion auszulagern und dann im Ereignis aufzurufen und Du kannst dann die Prozedur auch wiederum woanders aufrufen. Optimalerweise sollten auch die Eigenschaften explizit referenziert werden, die Du meinst. Statt txt_Anrede ="" dann eher txt_Anrede.Text = "" (bei einigen Zeile hast Du es drin, bei anderen nicht). Ebenso mit Cells(...).Value statt nur Cells(...)
Meinst Du mit Schalter die CommandButtons unten?
Gruß
Danke für die erste Antwort. Sorry, dass ich mich erst jetzt melde; es liegt nicht daran, dass ich keine Lust habe, sondern daran, dass wir am Samstag Neueröffnung haben... Ich konnte bisher noch nichts ausprobieren. Aber 2 Antworten kann ich schon geben: 1. an den Stellen, wo ich nur Cells(...) ohne ».value« verwand habe, wird der Wert der Zelle ausgelesen, die die Tabelle mittels sverweisaus einem anderen TabellenBlatt hollen Mit ».value« war die Box leer. 2. Mit Schalter meine ich natürlich die Cmd-Boxen. Gruss Uli
7
« am: April 29, 2015, 14:07:34 Nachmittag »
OK, ich versuche es: Ich habe eine Excel-Tabelle mit 29 Spalten. Diese will ich übersichtlich (Bild 1) darstellen lassen. Die gelben Felder werden in der Tabelle per sverweis (aus einem separaten Tabellenblatt) ausgelesen. (Beispiel: PLZ trage ich ein - mittels sverweis wird dann die Stadt ermittelt. BLZ und KtoNr = Bank/IBAN und BIC) Wie hier ersichtlich habe ich eine UserForm gebaut, die eine Tabelle abfragt und mir alle Daten anzeigt, die ich haben will (Quellcode füge ich später ein). Komme ich an eine Stelle, wo ich keine echten Bankdaten habe, habe ich und nehme ich Platzhalter bekomme ich die Fehlermeldung Debuggen bringt mich auf dieses Ergebnis Außerdem funktionieren die Schalter unten nicht für alle Zellen. Neuer Datensatz: trägt nur in Spalte 1 ein Ich hoffe, das war jetzt nicht zu konfus Option Explicit Option Compare Text
'Neuer Eintrag Schaltfläche Ereignisroutine Private Sub CommandButton1_Click() Dim lZeile As Long 'Wenn der Benutzer einen neuen Eintrag erzeugen möchte, 'erstellen wir einen neuen Eintrag in der ListBox und markieren 'diesen, damit der Benutzer die Daten eintragen kann lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die überschriftrn 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> "" lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop 'Nach Durchlauf dieser Schleife steht lZeile in der ersten leeren Zeile von Tabelle1 'Neuen Eintrag in die Tabelle1 schreiben, Spalte ID muss gefüllt sein, damit 'unsere Routinen die Zeile wiederfinden! Tabelle1.Cells(lZeile, 1) = CStr("Neuer Eintrag Zeile " & lZeile) 'Und neuen Eintrag in die UserForm eintragen ListBox1.AddItem CStr("Neuer Eintrag Zeile " & lZeile) 'Den neuen Eintrag markieren mit Hilfe des ListIndexes ListBox1.ListIndex = ListBox1.ListCount - 1 'Durch das Click Ereignis der ListBox werden die Daten automatisch geladen End Sub
'Löschen Schaltfläche Ereignisroutine Private Sub CommandButton2_Click() Dim lZeile As Long 'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet If ListBox1.ListIndex = -1 Then Exit Sub 'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> "" 'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then 'Eintrag gefunden, die ganze Zeile wird nun gelöscht Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete 'Die ListBox muss nun neu geladen werden! Call UserForm_Initialize If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist End If lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop End Sub
'Speichern Schaltfläche Ereignisroutine Private Sub CommandButton3_Click() Dim lZeile As Long
With UserForm1
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet If .ListBox1.ListIndex = -1 Then Exit Sub 'Wir müssen prüfen, ob die ID Spalte auch gefüllt ist!! If Trim(CStr(TextBox1.Text)) = "" Then 'Meldung ausgeben MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!" 'Abbrechen der Speicherroutine Exit Sub End If 'Ausbauoption: Prüfen, ob die ID in Tabelle1 Spalte 1 schon vorhanden ist! 'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> "" 'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then 'Eintrag gefunden, TextBoxen in die Zellen schreiben Cells(lZeile, 2) = .txt_Anrede.Text Tabelle1.Cells(lZeile, 3).Value = txt_Nachname.Text Tabelle1.Cells(lZeile, 4).Value = txt_Vorname.Text Tabelle1.Cells(lZeile, 6).Value = txt_HausNr.Text Tabelle1.Cells(lZeile, 7).Value = txt_PLZ.Text Tabelle1.Cells(lZeile, .Value = txt_Ort.Text Tabelle1.Cells(lZeile, 9).Value = txt_Email.Text Tabelle1.Cells(lZeile, 10).Value = txt_GebDat.Text Tabelle1.Cells(lZeile, 11).Value = txt_PersoNr.Text Tabelle1.Cells(lZeile, 12).Value = txt_Mobil.Text Tabelle1.Cells(lZeile, 13).Value = txt_Festnetz.Text Tabelle1.Cells(lZeile, 14).Value = txt_VertragNr.Text Tabelle1.Cells(lZeile, 15).Value = txt_VArt_kurz.Text Tabelle1.Cells(lZeile, 17).Value = txt_Preis.Text Tabelle1.Cells(lZeile, 18).Value = txt_Vertrag_Bez.Text Tabelle1.Cells(lZeile, 19).Value = txt_Laufzeit_Beginn.Text Tabelle1.Cells(lZeile, 20).Value = txt_Laufzeit_Ende.Text Tabelle1.Cells(lZeile, 23).Value = txt_Bank.Text Tabelle1.Cells(lZeile, 24).Value = txt_BLZ.Text Tabelle1.Cells(lZeile, 25).Value = txt_Kto_Nr.Text Tabelle1.Cells(lZeile, 26).Value = txt_KontoInha.Text Tabelle1.Cells(lZeile, 27).Value = txt_IBAN.Text Tabelle1.Cells(lZeile, 28).Value = txt_BIC.Text ' Cells(lZeile, 1) = Trim(CStr(.TextBox1.Text)) ' Tabelle1.Cells(lZeile, 5).Value = TextBox5.Text ' Tabelle1.Cells(lZeile, 16).Value = TextBox16.Text ' Tabelle1.Cells(lZeile, 21).Value = TextBox21.Text ' Tabelle1.Cells(lZeile, 22).Value = TextBox22.Text 'Tabelle1.Cells(lZeile, 29).Value = TextBox29.Text
'Die ListBox muss nun neu geladen werden 'allerdings nur, wenn sich der Name (ID) geändert hat If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then Call UserForm_Initialize If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 End If Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist End If lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop End With End Sub
'Beenden Schaltfläche Ereignisroutine Private Sub CommandButton4_Click() Unload Me End Sub
Private Sub Label18_Click()
End Sub
'Klick auf die ListBox Ereignisroutine Private Sub ListBox1_Click() Dim lZeile As Long 'Wenn der Benutzer einen Namen anklickt, suchen wir 'diesen in der Tabelle1 heraus und tragen die Daten 'in die TextBoxen ein. 'Wir löschen standardmäßig alle bisherigen TextBoxen-Inhalte txt_Anrede = "" txt_Nachname = "" txt_Vorname = "" txt_Strasse = "" txt_HausNr = "" txt_PLZ = "" txt_Ort = "" txt_Email = "" txt_GebDat = "" txt_PersoNr = "" txt_Mobil = "" txt_Festnetz = "" txt_VertragNr = "" txt_VArt_kurz = "" txt_Preis = "" txt_Vertrag_Bez = "" txt_Laufzeit_Beginn = "" txt_Laufzeit_Ende = "" txt_Bank = "" txt_BLZ = "" txt_Kto_Nr = "" txt_KontoInha = "" txt_IBAN = "" txt_BIC = "" 'TextBox1 = "" 'TextBox16 = "" 'TextBox21 = "" 'TextBox22 = "" 'TextBox29 = ""
'Nur wenn ein Eintrag selektiert/markiert ist If ListBox1.ListIndex >= 0 Then lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> "" 'Wenn wir den Namen aus der ListBox1 in der Tabelle1 Spalte 1 'gefunden haben, übertragen wir die anderen Spalteninhalte 'in die TextBoxen! If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then 'TextBoxen füllen txt_Anrede = Tabelle1.Cells(lZeile, 2).Value txt_Nachname = Tabelle1.Cells(lZeile, 3).Value txt_Vorname = Tabelle1.Cells(lZeile, 4).Value txt_Strasse = Tabelle1.Cells(lZeile, 5).Value txt_HausNr = Tabelle1.Cells(lZeile, 6).Value txt_PLZ = Tabelle1.Cells(lZeile, 7).Value txt_Ort = Cells(lZeile, 8 ) txt_Email = Tabelle1.Cells(lZeile, 9).Value txt_GebDat = Tabelle1.Cells(lZeile, 10).Value txt_PersoNr = Tabelle1.Cells(lZeile, 11).Value txt_Mobil = Tabelle1.Cells(lZeile, 12).Value txt_Festnetz = Tabelle1.Cells(lZeile, 13).Value txt_VertragNr = Tabelle1.Cells(lZeile, 14).Value txt_VArt_kurz = Tabelle1.Cells(lZeile, 15).Value txt_Laufzeit_Beginn = Tabelle1.Cells(lZeile, 19).Value txt_Laufzeit_Ende = Cells(lZeile, 20) txt_BLZ = Cells(lZeile, 24) txt_Kto_Nr = Tabelle1.Cells(lZeile, 25).Value txt_KontoInha = Tabelle1.Cells(lZeile, 26).Value txt_IBAN = Tabelle1.Cells(lZeile, 27).Value txt_Vertrag_Bez = Cells(lZeile, 18) txt_Preis = Cells(lZeile, 17) txt_BIC = Cells(lZeile, 28) txt_Bank = Cells(lZeile, 23) ' TextBox1 = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) ' TextBox16 = Cells(lZeile, 16) ' TextBox21 = Cells(lZeile, 21) ' TextBox22 = Cells(lZeile, 22) ' TextBox29 = Cells(lZeile, 29) Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist End If lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop End If End Sub
Private Sub TextBox20_Change()
End Sub
Private Sub txt_Anrede_Change()
End Sub
Private Sub UserForm_Activate() 'Wenn die Eingabemaske angezeigt wird, markieren wir den ersten Namen 'jedoch nur, wenn auch Einträge in der Liste stehen If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 End Sub
'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird Private Sub UserForm_Initialize() Dim lZeile As Long 'Alle TextBoxen leer machen txt_Anrede = "" txt_Nachname = "" txt_Vorname = "" txt_Strasse = "" txt_HausNr = "" txt_PLZ = "" txt_Ort = "" txt_Email = "" txt_GebDat = "" txt_PersoNr = "" txt_Mobil = "" txt_Festnetz = "" txt_VertragNr = "" txt_VArt_kurz = "" txt_Preis = "" txt_Vertrag_Bez = "" txt_Laufzeit_Beginn = "" txt_Laufzeit_Ende = "" txt_Bank = "" txt_BLZ = "" txt_Kto_Nr = "" txt_KontoInha = "" txt_IBAN = "" txt_BIC = "" ' TextBox1 = "" ' TextBox16 = "" ' TextBox21 = "" ' TextBox22 = "" ' TextBox29 = ""
'In dieser Routine laden wir alle vorhandenen 'Einträge in die ListBox1 ListBox1.Clear 'Zuerst einmal die Liste leeren lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> "" 'Aktuelle Zeile in die ListBox eintragen ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop End Sub
8
« am: April 29, 2015, 11:58:54 Vormittag »
Ich bin froh, dass es Euch gibt, und hoffe hier professionelle Hilfe zu bekommen. Ich betreibe selber ein kleines Handball-Forum und weiß um die Schwierigkeiten, die man als Admin hie und da hat. Ich denke aber, dass ich mich benehmen kann - und werde auch niemanden auf die Füße steigen.
Die Umgangsformen kenne ich - mir liegt viel daran.
Ich bin gerade hier angelangt und habe schon eine riesen Frage eingestellt. Ich hoffe mir kann jemand helfen.
Vielen Dank, dass es Euch gibt.
UliD
edit: da mir auch viel an vernünftiger Rechtschreibung liegt, habe ich das heute noch mal überarbeitet.
9
« am: April 29, 2015, 11:55:39 Vormittag »
Meine Frau macht sich zum ersten Mal inrem Leben selbständig. Alles Geld ist inzwischen aufgebraucht. Ich habe mich einmal damit beschäftigt, eine Datenbank in Excel zu programmieren. Leider bin ich als VBA Neuling jetzt am Ende angelangt. Wenn sich jemand mal meiner annehmen würde, dann schickte ich mal meine Ergebnisse als Datei ... Ach ja - in Office 2013 erstellt - funzt nicht auf einem Mac mit Office 2011 - das ist auch sch... nicht schön.
Seiten: [1]
|