AW: Makro für viele Zellbezüge in neuer Datei
01.08.2005 17:32:46
Eberhard
Da ich ganz selten mit den Zellfunktionen arbeite, kann ich dir für
diesen Ansatz keine (schnele) Antwort geben.
Ich hatte das Ganze in einem Klassenmodul zum WorkSheet so angefangen:
(Voraussetzung: das erste Blatt heißt "sh1", das 2. Blatt heißt "Logfile").
im 2. Blatt werden alle Änderungen "mitgeschrieben"; momentan nur mit Blattname!
Die Arbeitsmappe kann ja leicht davor geschrieben werden.
z.B. so:
sText(1) = "workbooks(" & ThisWorkbook.Name & ")." & "sheets(" & Sh.Name & ").Range(" & _
usw.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rZiel As Range
Dim mText$ ' hier wird eine Msgbox-Anzeige vorbereitet (ggf. alles hierzu
' gehörende löschen !
Dim rC1 As Range, i%, sText(1 To 2) As String
If ActiveSheet.Name <> "sh1" Then Exit Sub ' Ausstieg, falls du im Log-Blatt
' etwas änderst
mText = "folgende Werte sind betroffen: " & vbLf & vbLf
mText = mText & "In Blatt " & Sh.Name & vbLf
On Error GoTo ErrorHdl
Sheets("Logfile").Activate
Set rZiel = Range("A:A").Find("") ' die erste freie Zeile im Logblatt suchen
i = 1
For Each rC1 In Target
mText = mText & "Bereich " & rC1.Address(False, False) & vbLf
sText(1) = "sheets(" & Sh.Name & ").Range(" & _
rC1.Address(False, False) & ")"
sText(2) = rC1.Value
Application.EnableEvents = False
rZiel = sText(1)
rZiel.Offset(0, 1) = sText(2)
i = i + 1
rZiel.Offset(1, 0).Activate
Set rZiel = ActiveCell
Next rC1
Application.EnableEvents = True
MsgBox mText ' Die Message ggf. anzeigen
Sheets("sh1").Activate ' das Blatt 1 wieder aktivieren
Exit Sub ' Ende (im Normalfall - wenn kein Fehler vorliegt)
ErrorHdl:
Application.EnableEvents = True
MsgBox "Es ist folgender Fehler aufgetreten: " & Err.Description
End Sub
Momentan wird folgendes geschrieben:
workbooks(Logfile V1.0.xls).sheets(sh1).Range(A5) - d.h., da müssen noch so allerlei "Anführungsstriche" rein !!!
[z.B.
sText(1) = "Workbooks(""" & ThisWorkbook.Name & "")." & "sheets(""" & Sh.Name & "").Range(" & _
usw.
Ich hoffe, dass dich das Ganze nicht erschlägt - aber so kannst du - auch bei Massenänderungen (Reihe ausfüllen ...) alle Änderungen an einer anderen Stelle protokollieren (und später ggf. Auswerten)
bei Fragen bitte nochmal melden!
Gruß Eberhard