Allgemein ginge es so:
Option Explicit
Public Sub Test()
Dim wksAudit As Excel.Worksheet
Dim rngCellA As Excel.Range
Dim wks As Excel.Worksheet
Dim rngCell As Excel.Range
Set wksAudit = ThisWorkbook.Worksheets("Audit")
'in Spalte C: von Zeile 2 bis zur letzten Zelle mit Inhalt
For Each rngCellA In wksAudit.Range(wksAudit.Range("C2"), wksAudit.Cells(wksAudit.Rows.Count, "C").End(xlUp)).Cells
'wenn der Wert in der Zelle der Name eines Tabellenblatts ist
If WorksheetExists(rngCellA.Value, ThisWorkbook) Then
'das Tabellenblatt referenzieren
Set wks = ThisWorkbook.Worksheets(rngCellA.Text)
'letzte Zelle mit Inhalt im Tabellenblatt - Spalte A - suchen
Set rngCell = wks.Cells(wks.Rows.Count, "A").End(xlUp)
'die erste Zelle mit Inhalt ist A33
'(d.h. wenn Zeile der gefundenen Zelle kleiner 33 ist, wird A33 genommen)
If rngCell.Row < 33 Then
Set rngCell = wks.Range("A33")
Else
Set rngCell = rngCell.Offset(RowOffset:=1) 'erste >freie< Zelle
End If
'dem Tabellenblatt die Bemerkung aus Audit hinzufügen
rngCell.Value = wksAudit.Cells(rngCellA.Row, "I").Value
End If
Next
End Sub
Public Function WorksheetExists(Name As String, Optional ByVal Workbook As Excel.Workbook) As Boolean
On Error Resume Next
If Workbook Is Nothing Then Set Workbook = ActiveWorkbook
WorksheetExists = Not (Workbook.Worksheets(Name) Is Nothing)
End Function
Das Makro schaut einfach nur ob der Wert aus Spalte C ein gültiger Tabellenblattname ist und wenn dies der Fall ist, übernimmt er die Bemerkung in dieses Tabellenblatt.
Aber Achtung: Das Makro hängt pro Ausführung die Daten in den jeweiligen Tabellenblättern immer in Spalte A an unterster Stelle an. Daten die dort bereits vorhanden sind, werden also nicht überschrieben. Führst du das Makro also zwei mal aus, hast du die Bemerkungen droppelt drin stehen.
|