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

Datenbankeinträge ändern

Datenbankeinträge ändern
06.06.2007 21:49:41
Frank
Hallo!
Ich habe mich heute neu hier angemeldet und hoffe etwas Hilfe zu finden.
Mein Problem besteht in der Datenaktualisierung meiner Datenbank. Ich zwei Datenbanken mit den Stammdaten unserer Kunden/ Patienten angelegt. Für die Zusammenlegung in eine DB reichten die verfügbaren Spalten leider nicht aus. Die Ersteingabe mache ich in einen anderen übersichtlich gestaltetem Arbeitsblatt. Die neuen Datensätze werden per Markro den Datenbanken zugefügt. Ich kann auch in diedem Datenblatt Datensätze suchen und für einen Nachdruck anzeigen lassen. Soweit klappt alles sehr gut.
Bei notwendigen Datenaktualisierungen muss ich jedoch in der unübersichtlichen Datenbank arbeiten. Hat jemand eine Idee, wie ich aus einem Arbeitsblatt heraus Datensätze aktualisieren kann?
Vielen Dank im Voraus
Mit freundlichen Grüßen
Frank

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbankeinträge ändern
06.06.2007 22:16:00
Jan3
Hi Frank,
Hast Du mal eine Besipielmappe fürs Forum?
Jan

AW: Datenbankeinträge ändern
06.06.2007 22:34:00
Frank
Hallo!
Die Datei ist etwas groß und enthält Kundendaten, die ich keinesfalls online stellen kann. Das testen ohne Daten ist jedoch in diesen und andenen Dateibereiche nicht möglich.
Interessant und ausreichend wäre z.B. Ein Makrozusatz, der aktuellen Datensatz aus der "Datenmaske" in der jeweiligen Datenbank findet und markiert.
Gruß Frank

AW: Datenbankeinträge ändern
06.06.2007 22:18:36
fcs
Hallo Frank,
wenn du schon in der Lage bist per Suchfunktion einen einzelnen Datensatz im Datenblatt anzuzeigen, dann ist der Weg zum Ändern nicht mehr weit.
Du muss dir zum Ändern die Tabellenzeile(n) in den beiden Datenbanktabellen in Variablen speichern in denen der Datensatz des Kunden/Patienten gefunden wurde. Dann bringst du die Daten der Zeile(n) in deiner Eingabemaske zur Anzeige was bei über 255 Feldern ggf. eine Sysiphusarbeit beim Programmieren ist. Nach dem Ändern schreibst du die Daten wieder in die gemerkten Zeilen zurück. Diese Prozedur sollte nur eine kleine Variante des Makros sein, das einen neuen Datensatz am Ende der Datenbank einträgt.
Gruß
Franz

Anzeige
AW: Datenbankeinträge ändern
06.06.2007 22:38:21
Frank
Hallo!
Das hört sich interessant an. Leider habe ich das mit den Variablen nicht ganz verstanden. Wäre nicht so ein Makrozusatz möglich, der den aktuellen Datensatz aus der Eingabemaske sucht und markiert?
Gruß Frank

AW: Datenbankeinträge ändern
07.06.2007 01:11:00
fcs
Hallo Frank,
du schreibst, dass du einzelne Datensätze zum Drucken anzeigen kannst, wie findest/suchst du diese Datensätze?
Normalerweise ermittelt man dabei direkt oder indirekt (über die gefundnene Zell) die Zeile in der z.B. die gesuchte Kunden-Nr. oder auch Name und Vorname stehen. Das kann man mit der Suchen-Funktion (Find in VBA) oder auch indem in einer Schleife (geht langsamer) sämtliche Zeilen durchsucht.
Wenn du die Zeile gefunden hast, dann kannst du im Makro sämtlich Spalten in der Zeile abklappern, um die Daten dann in deine Eingabe einlesen. Je nachdem wie dein Eingabeblatt aufgebaut ist muss du für jede Spalte eine Zeile schreiben oder mehrere kleine Schleifen.
Gruß
Franz
Hier zwei Beispiel-Prozeduren (ungetestet)
1. Beispiel für Datensatz suchen und Daten in ein Eingabeblatt einlesen
2. Beispiel für das Zurückschreiben der geänderten Daten

Option Explicit
Public lngZeile1 As Long, lngZeile2 As Long
Sub DatenEinlesen()
Dim wksEin As Worksheet, wksData1 As Worksheet, wksData2 As Worksheet, vSuchen As Variant
Dim rngZelle As Range, Spalte%
Set wksEin = ActiveWorkbook.Worksheets("Eingabe")
Set wksData1 = ActiveWorkbook.Worksheets("Daten1")
Set wksData2 = ActiveWorkbook.Worksheets("Daten1")
vSuchen = wksEin.Range("B2") 'Zelle mit Suchbegriff im Eingabeblatt (Name, Kunden-Nr oder so)
'Zelle mit Suchbegriff in Daten Tabellen Spalten 1 bis 3 suchen
With wksData1
Set rngZelle = wksData1.Range(.Columns(1), .Columns(3)).Find(What:=vSuchen, _
LookIn:=xlValues, lookat:=xlWhole)
End With
If rngZelle Is Nothing Then
MsgBox "Suchbegriff:  " & vSuchen & "  wurde nicht in Blatt Daten 1 gefunden!"
GoTo Abbruch
Else
lngZeile1 = rngZelle.Row
End If
With wksData2
Set rngZelle = wksData1.Range(.Columns(1), .Columns(3)).Find(What:=vSuchen, _
LookIn:=xlValues, lookat:=xlWhole)
End With
If rngZelle Is Nothing Then
MsgBox "Suchbegriff:  " & vSuchen & "  wurde nicht in Blatt Daten 2 gefunden!"
GoTo Abbruch
Else
lngZeile2 = rngZelle.Row
End If
'Daten aus Daten1 in Eingabeblatt einlesen
With wksData1
wksEin.Cells(3, 1).Value = .Cells(lngZeile1, 2).Value 'Name
wksEin.Cells(3, 2).Value = .Cells(lngZeile1, 3).Value 'Vorname
'Spalte 4 bis 9 nach Zeile 5 einlesen
'(Strasse, Adress Zusatz, PLZ, Ort, Telefon-privat, Fax)
For Spalte = 1 To 6
wksEin(5, Spalte) = .Cells(lngZeile1, Spalte + 3).Value
Next
'usw.
End With
'Daten aus Daten2 in Eingabeblatt einlesen
With wksData2
wksEin.Cells(12, 1).Value = .Cells(lngZeile2, 4).Value 'Hausarzt
wksEin.Cells(12, 2).Value = .Cells(lngZeile2, 5).Value 'HA Name, Vorname
'Spalte 6 bis 11 nach Zeile 14 einlesen
'(HA Strasse, Adress Zusatz, PLZ, Ort, Telefon-privat, Fax)
For Spalte = 1 To 6
wksEin(14, Spalte) = .Cells(lngZeile2, Spalte + 5).Value
Next
'usw.
End With
Abbruch:
End Sub
Sub GeaenderteDatenSpeichern()
Dim wksEin As Worksheet, wksData1 As Worksheet, wksData2 As Worksheet
Dim Spalte%
Set wksEin = ActiveWorkbook.Worksheets("Eingabe")
Set wksData1 = ActiveWorkbook.Worksheets("Daten1")
Set wksData2 = ActiveWorkbook.Worksheets("Daten1")
If MsgBox("Datensatz speichern?", vbYesNo, "Datensatz Ändern - Speichern") = _
vbNo Then GoTo Abbruch
'Daten aus Eingabeblatt nach Daten2 zurückschreiben
With wksData1
.Cells(lngZeile1, 2).Value = wksEin.Cells(3, 1).Value  'Name
.Cells(lngZeile1, 3).Value = wksEin.Cells(3, 2).Value 'Vorname
'Spalte 4 bis 9 ausfüllen (Strasse, Adress Zusatz, PLZ, Ort, Telefon-privat, Fax)
For Spalte = 1 To 6
.Cells(lngZeile1, Spalte + 3).Value = wksEin(5, Spalte)
Next
'usw.
End With
'Daten aus Eingabeblatt nach Daten2 zurückschreiben
With wksData2
.Cells(lngZeile2, 4).Value = wksEin.Cells(12, 1).Value 'Hausarzt
.Cells(lngZeile2, 5).Value = wksEin.Cells(12, 2).Value 'HA Name, Vorname
'Aus Zeile 14 Eingabeblatt Spalte 6 bis 11 ausfüllen
'(HA: Strasse, Adress Zusatz, PLZ, Ort, Telefon, Fax)
For Spalte = 1 To 6
.Cells(lngZeile2, Spalte + 5).Value = wksEin(14, Spalte)
Next
'usw.
End With
Abbruch:
End Sub


Dim wksEin as Worksheet, wksData as Worksheet
Set wksEin = ActiveWorkbook.Worksheets("Eingabe")
Set wksData1 = Set wksEin = ActiveWorkbook.Worksheets("Daten1")

Anzeige
AW: Datenbankeinträge ändern
07.06.2007 12:48:15
tursiops
Hallo!
Ups - da sehe ich nicht mehr so einfach durch.
Eigentlich ist die Sache noch etwas komplizierter, aber dass nur nebenbei, weil ich diese Probleme bereits gelöst habe. Die Daten sind auf zwei Datenbanken verteilt. Die "Datenmaske" ist das Stammdatenblatt unserer Kunden/Patienten. Da die "Datenmaske zur Ersterstellung, zum Nachdruck des Stammdatenblattes und zur Datenaktualisierung genutzt wird, gibt es dieses Formular in doppelter Ausführung. Das erste ist leer und ohne Formeln. Es wird z.B. zur Neuaufnahme eines Kunden verwendet. Das zweite sucht per Datenbankauszug Datensätze und stellt sie dar. Ein Kombinationfeld erlaubt direkte Suche in der DB und zeigt in der Liste ID, Namen, Vornamen und Geb.datum an. Per Makro werden die Werte (Formelergebnisse) in das leere Formular kopiert. Hier können sie ohne die Formel zu verändern aktualisiert werden.
Das Problem besteht nur in der Aktualisierung des dazugehörigen Datensatzes in der DB. Neueinträge klappen bereits problemlos. Momentan lese ich in einem weiteren Blatt ("1") per Formel die "Datenmaske" ("StD") aus. Die Spalten sind identisch zu Datenbank ("DB K1"). Die Formelergebnisse kopiere ich dann normalerweise per Makro in eine vom Makro neu erzeugte Zeile in der Datenbank (DB K1!1:1) Anschließend sortiert das Makro die DB nach Spalte B / C. Eigentlich war dies für neue Datensätze gedacht. Ich wollte keine Formeln in der Datenbank haben. Für dieses Problem (Datensatzaktualisierung) bräuchte ich den Umweg über die neue Zeile ja evtl. nicht. Ich hoffe, das ist so verständlich.
Ich habe folgenden Code aus einem anderen Forum besorgt:

Private Sub CommandButton3_Click()
Dim suchid As Long
Dim b As Integer
Dim neuer_wert As String
suchid = Sheets("Std").Range("C2")
ScreenUpdating = False
For j = 1 To 167 '167 = Spalte HM
For i = 1 To 100
If Sheets("DB K1").Range(j & i) = suchid Then
Sheets("1!").Range(j & i) = neuer_wert
Sheets("DB K1").Range(j & i) = neuer_wert
End If
Next i
Next j
ScreenUpdating = True
End Sub


Ein Mal hat er auch funktioniert. Leider hat er die Formel und nicht deren Ergebnis kopiert. Dieses Problem ist zwar abgestellt, aber ich bekommen nun immer Laufzeitfehler. markiert wird diese Zeile im Debugger:
If Sheets("DB K1").Range(j & i) = suchid Then.
Vielleicht kannst Du mir ja da weiterhelfen?
Gruß Frank

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige