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")