Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
876to880
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
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datensatzsuche per Makro

Datensatzsuche per Makro
08.06.2007 09:32:17
tursiops
Hallo!
Ich habe gestern folgenen Code bekommen:

Private Sub CommandButton3_Click()
Dim suchid1 As String, suchid2 As String
Dim b As Integer
Dim neuer_wert As String, SuchAddresse As String
Dim SuchDaten As Byte
Dim Bereich As Range, DatenBereich As Range
suchid1 = Sheets("StD").Range("C2") '1. Suchwert
suchid2 = Sheets("1").Range("A2") '2. Suchwert
For Each Bereich In Sheets("DB K1").Range("A1:AH100")
If Bereich = suchid1 Or Bereich = suchid2 Then
SuchAddresse = Range(Cells(Bereich.Row, 1).Address & ":" & Cells(Bereich.Row, 100). _
Address).Address
For Each DatenBereich In Sheets("1").Range(SuchAddresse)
Sheets("DB K1").Range(DatenBereich.Address) = _
Sheets("1").Cells(2, DatenBereich.Column) 'Bereich mit 1!A2:AH2 Überschreiben
Next DatenBereich
End If
Next Bereich
End Sub


Er soll in der Datenbank (DB_K1) einen bestimmten Datensatz anhand einer ID-Nummer finden und mit dem festen Bereich "1!2:2" überschreiben. Die zu suchende ID-Nummer steht in "1!A2" und ersatzweise nochmal in "StD!C2".
Er funktioniert auch wirklich super - Danke nochmal. Nun die Frage: Ist es möglich dazuzuprogrammieren, dass ein neuer Datensatz angelegt wird, wenn die ID- Nummer nicht gefunden wird? Das würde Bedienfehler beim Speichern ausschließen und eine Schaltfläche in der Datenmaske sparen.
Gruß Frank

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datensatzsuche per Makro
08.06.2007 10:23:00
Tino
Hallo,
habe noch diese Abfrage eingebaut, dadurch wird aber der bereich in DB K1 größer
da es vorkommen kann dass Zeilen hinzukommen!

Private Sub CommandButton3_Click()
Dim suchid1 As String, suchid2 As String
Dim b As Integer
Dim neuer_wert As String, SuchAddresse As String
Dim SuchDaten As Byte
Dim Bereich As Range, DatenBereich As Range
Dim Sicherheit1 As Range, Sicherheit2 As Range
Dim keineDaten As Boolean
suchid1 = Sheets("StD").Range("C2") '1. Suchwert
suchid2 = Sheets("1").Range("A2") '2. Suchwert
Set Sicherheit1 = Sheets("DB K1").Cells.Find(suchid1)
Set Sicherheit2 = Sheets("DB K1").Cells.Find(suchid2)
For Each Bereich In Sheets("DB K1").Range("A1:AH150")
'Prüfe ob Wert in (DB K1!)
If Sicherheit1 Is Nothing Or Sicherheit2 Is Nothing Then
SuchAddresse = _
Range(Cells(Range("A50000").End(xlUp).Offset(1, 0).Row, 1).Address _
& ":" & Cells(Range("A50000").End(xlUp).Row, 34). _
Address).Address
keineDaten = True
GoTo eingabe
End If
If Bereich = suchid1 Or Bereich = suchid2 Then
SuchAddresse = Range(Cells(Bereich.Row, 1).Address & ":" & Cells(Bereich.Row, 34). _
Address).Address
eingabe:
For Each DatenBereich In Sheets("1").Range(SuchAddresse)
Sheets("DB K1").Range(DatenBereich.Address) = _
Sheets("1").Cells(2, DatenBereich.Column) 'Bereich mit 1!A2:AH2 Überschreiben
Next DatenBereich
End If
If keineDaten = True Then Exit For
Next Bereich
End Sub


Gruss
Tino

Anzeige
AW: Datensatzsuche per Makro
08.06.2007 11:37:00
tursiops
Hallo!
Das ist super! Muss diese Begrenzung überhaupt sein? in spätestens 6 Monaten sind auch 150 Datzensätze ausgereitzt. So würde sicherlich ohne Fehlermeldung die neuen Eingaben verwerfen.
Neue Einsätze schreibt er übrigens noch nicht automatisch über diesen Code dazu. Die Aktualisierung klappt weiter super.
Gruß Frank

AW: Datensatzsuche per Makro
08.06.2007 12:13:00
Tino
Hallo,
sollte nun anhand der belegten Zellen in (DB K1! A:A) durch zählen der zellen mit inhalt
die anzahl der Datenreien ermitteln. Aber nur wenn dazwischen keine Leerzellen sind, sonst muss eine
andere Prüfung eingebracht werden.

Private Sub CommandButton3_Click()
Dim suchid1 As String, suchid2 As String, SuchAddresse As String
Dim Bereich As Range, DatenBereich As Range
Dim Sicherheit1 As Range, Sicherheit2 As Range
Dim keineDaten As Boolean
suchid1 = Sheets("StD").Range("C2") '1. Suchwert
suchid2 = Sheets("1").Range("A2") '2. Suchwert
Set Sicherheit1 = Sheets("DB K1").Cells.Find(suchid1)
Set Sicherheit2 = Sheets("DB K1").Cells.Find(suchid2)
For Each Bereich In Sheets("DB K1").Range("A1:AH" & [=COUNTA('DB K1'!A:A)])
'Prüfe ob Wert in (DB K1!)
If Sicherheit1 Is Nothing Or Sicherheit2 Is Nothing Then
SuchAddresse = _
Range(Cells(Range("A50000").End(xlUp).Offset(1, 0).Row, 1).Address _
& ":" & Cells(Range("A50000").End(xlUp).Offset(1, 0).Row, 34). _
Address).Address
keineDaten = True
GoTo eingabe
End If
If Bereich = suchid1 Or Bereich = suchid2 Then
SuchAddresse = Range(Cells(Bereich.Row, 1).Address & ":" & Cells(Bereich.Row, 34). _
Address).Address
eingabe:
For Each DatenBereich In Sheets("1").Range(SuchAddresse)
Sheets("DB K1").Range(DatenBereich.Address) = _
Sheets("1").Cells(2, DatenBereich.Column) 'Bereich mit 1!A2:AH2 Überschreiben
Next DatenBereich
End If
If keineDaten = True Then Exit For
Next Bereich
End Sub


Gruss
Tino

Anzeige
AW: Datensatzsuche per Makro
08.06.2007 12:33:00
tursiops
Hallo!
Genial! Ich muss unbedingt nen VB Kurs machen!
Ein Problem besteht noch:
Neue Einträge werden nochmalerweise über ein separates Makro gespeichert. Sollte aber jemand nach Neueingabe die "Daten Aktualisieren"-Taste drücken werden ALLE! Datensätze momentan duch den Code mit dem neuen Datensatz überschrieben. Ich bin ausverschämt ich weiß, aber geht das noch zu ändern? Dann wäre alles perfekt!
Gruß Frank

AW: Datensatzsuche per Makro
08.06.2007 12:46:04
Tino
Hallo,
verstehe ich richtig, du möchtest zuvor ein anderes Makro aufrufen?
dies geht mit: Call Makroname
Ablauf geht zu dem anderen Makro und kommt danach wieder an diese stelle zurück
und der Rest wird abgearbeitet.
So und nun muss ich mich für die Mittagschicht fertig machen.
Gruss
Tino

Anzeige
AW: Datensatzsuche per Makro
08.06.2007 12:54:00
tursiops
Hallo!
Klar! Sonst behelfe ich mich doch auch so... - Das war jetzt zu einfach.
Gruß Frank

AW: Datensatzsuche per Makro
08.06.2007 13:17:19
tursiops
Hallo!
Geht ja nicht!
Das Makro für neue Einträge erstellt in der Datenbank eine neue Zeile unter der Kopfzeile und kopiert wieder "1!2:2" hinein. wenn diese Marko immer mitläuft, habe ich ja immer Doppeleinträge! Ich werde das erstmal über einen Umweg mit Zusatzmakros lösen und die Schaltflächen nur nach Bedarf einblenden.
Erstmal ruhigen Dienst und ein schönes Wochenende. Vielen Dank nochmal!

AW: Datensatzsuche per Makro
09.06.2007 11:49:00
Tino
Hallo,
dieses separate Makro, stellt doch bestimmt die Daten in "1!2:2" zur Verfügung und entsprechend
auch suchid1 und suchid2. oder liege ich da falsch?
Sollte dies so sein, muss "Call Makroname" (Name kenne ich nicht) am Anfang von Makro
"Sub CommandButton3_Click ()" stehen.
Bsp.

Private Sub CommandButton3_Click()
Dim suchid1 As String, suchid2 As String, SuchAddresse As String
Dim Bereich As Range, DatenBereich As Range
Dim Sicherheit1 As Range, Sicherheit2 As Range
Dim keineDaten As Boolean
'starte separates Makro, Makroname durch den richtigen Namen ersetzen!
Call Makroname
suchid1 = Sheets("StD").Range("C2") '1. Suchwert
suchid2 = Sheets("1").Range("A2") '2. Suchwert
Set Sicherheit1 = Sheets("DB K1").Cells.Find(suchid1)
Set Sicherheit2 = Sheets("DB K1").Cells.Find(suchid2)
For Each Bereich In Sheets("DB K1").Range("A1:AH" & [=COUNTA('DB K1'!A:A)])
'Prüfe ob Wert in (DB K1!)
If Sicherheit1 Is Nothing Or Sicherheit2 Is Nothing Then
SuchAddresse = _
Range(Cells(Range("A50000").End(xlUp).Offset(1, 0).Row, 1).Address _
& ":" & Cells(Range("A50000").End(xlUp).Offset(1, 0).Row, 34). _
Address).Address
keineDaten = True
GoTo eingabe
End If
If Bereich = suchid1 Or Bereich = suchid2 Then
SuchAddresse = Range(Cells(Bereich.Row, 1).Address & ":" & Cells(Bereich.Row, 34). _
Address).Address
eingabe:
For Each DatenBereich In Sheets("1").Range(SuchAddresse)
Sheets("DB K1").Range(DatenBereich.Address) = _
Sheets("1").Cells(2, DatenBereich.Column) 'Bereich mit 1!A2:AH2 Überschreiben
Next DatenBereich
End If
If keineDaten = True Then Exit For
Next Bereich
End Sub


Gruss Tino

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige