AW: per Doppelklick Daten in separate Tabelle
14.09.2007 16:03:17
fcs
Hallo Dieter,
ich hab den Code jetzt komplett umgestrickt. Die Hilfsberechnungen in den Spalten M bis Q in Tabelle1 sind nicht mehr erforderlich. Diese Werte berechnet das Makro jetzt selbst. Ich hab dafür die Function "Zeile" eingefügt, die mit der Methode "Find" die Zeilennummern zu den jeweiligen Nr. ermittelt.
Für die Ausgabe im "Stammblatt" habe ich eine kleine Subroutine geschrieben. Das ist pflegeleichter, als 6 mal den Übertragungscode in der Hauptroutine zu schreiben.
Gruß
Franz
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Ausgabe der Daten zur aktuellen Person in der angeklickten Zeile im Blatt "Stammblatt
Cancel = True
'aktuelle Person
Call Ausgabe(wksQuelle:=Me, wksZiel:=Worksheets("Stammblatt"), _
SpalteZiel:=2, ZeileQuelle:=Target.Row)
'Partner
Call Ausgabe(wksQuelle:=Me, wksZiel:=Worksheets("Stammblatt"), _
SpalteZiel:=3, ZeileQuelle:=Zeile(Cells(Target.Row, 6).Value))
'Vater
Call Ausgabe(wksQuelle:=Me, wksZiel:=Worksheets("Stammblatt"), _
SpalteZiel:=4, ZeileQuelle:=Zeile(Cells(Target.Row, 7).Value))
'Mutter
Call Ausgabe(wksQuelle:=Me, wksZiel:=Worksheets("Stammblatt"), _
SpalteZiel:=5, ZeileQuelle:=Zeile(Cells(Target.Row, 8).Value))
'Kind
Call Ausgabe(wksQuelle:=Me, wksZiel:=Worksheets("Stammblatt"), _
SpalteZiel:=6, ZeileQuelle:=Zeile(Cells(Target.Row, 9).Value))
'partner von
Call Ausgabe(wksQuelle:=Me, wksZiel:=Worksheets("Stammblatt"), _
SpalteZiel:=7, ZeileQuelle:=Zeile(Cells(Target.Row, 10).Value))
Sheets("Stammblatt").Activate
End Sub
Private Function Zeile(Nr As Variant) As Long
'Ermittelt Zeile zu Nummer der gesuchten Person
Dim Zelle As Range
Set Zelle = Me.Columns(1).Find(What:=Nr, LookIn:=xlValues, lookat:=xlWhole)
If Zelle Is Nothing Then Zeile = 0 Else Zeile = Zelle.Row
Set Zelle = Nothing
End Function
Sub Ausgabe(wksQuelle As Worksheet, wksZiel As Worksheet, SpalteZiel%, ByVal ZeileQuelle%)
'Trägt Daten der jeweiligen Person in wksZiel ein
With wksZiel
If ZeileQuelle > 0 Then
.Range(.Cells(2, SpalteZiel), .Cells(9, SpalteZiel)) = _
WorksheetFunction.Transpose(wksQuelle.Range(wksQuelle.Cells(ZeileQuelle, 1), _
wksQuelle.Cells(ZeileQuelle, 8)))
Else
'Inhalte im Bereich löschen, wenn keine Nr. zur Informationen vorhanden
.Range(.Cells(2, SpalteZiel), .Cells(9, SpalteZiel)).ClearContents
End If
End With
Set BlattQuelle = Nothing
Set BlattZiel = Nothing
End Sub