Gobale Namen - absolute/indirekte Bezüge
07.01.2010 15:16:44
NoNet
Hallo Sunni,
Du definierst den Namen "Bereich" nur für das Blatt "Gesamt" (bzw. Objektvariable shGesamt).
Durch das Löschen der Zeilen und das Neudefinieren des Namens wird dieser daher nur für dieses Blatt gesetzt. der Name ist hier GLOBAL, d.h. für alle Tabellenblätter bezieht er sich auf shGesamt !
Ich hätte folgenden Lösungsvorschlag : Name nicht global per absoluten Bezug definieren, sondern per INDIREKT(), damit gilt er jeweils für das aktuelle Blatt.
Beispiel : Test1 + NamenDefinieren1 sind wie in Deinem Beispiel, Test2 + NamenDefinieren2 wie in meinem angedachten Beispiel. Teste die Makros mal in einer neuen Mappe, der jeweilige Bereich wird zur optischen Erkennung jeweils gelb eingefärbt und mit "Test" befüllt :
Option Explicit
Sub Test1()
NamenDefinieren1
With Range("Bereich")
.Interior.Color = vbYellow 'Bereich gelb einfärben
.Value = "Test"
End With
Rows("100:159").Delete shift:=xlUp '60 Zeilen löschen
Stop 'STOP zur Kontrolle - Fortfahren mit Taste F5 im Code !
NamenDefinieren1 'Namen neu definieren
With Range("Bereich")
.Interior.Color = vbYellow 'Bereich gelb einfärben
.Value = "Test"
End With
End Sub
Sub Test2()
NamenDefinieren2
With Range("Bereich")
.Interior.Color = vbYellow 'Bereich gelb einfärben
.Value = "Test"
End With
Rows("100:159").Delete shift:=xlUp '60 Zeilen löschen
Stop 'STOP zur Kontrolle - Fortfahren mit Taste F5 im Code !
'NamenDefinieren2 - muss hier nicht neu definiert werden !
With Range("Bereich")
.Interior.Color = vbYellow 'Bereich gelb einfärben
.Value = "Test"
End With
End Sub
Sub NamenDefinieren1()
Dim wbGesamt As Workbook, shGesamt As Worksheet
Set wbGesamt = ActiveWorkbook
Set shGesamt = Worksheets("Gesamt")
'Der Name wird hier nur für das Blatt shGesamt definiert :
wbGesamt.Names.Add "Bereich", shGesamt.Range("F7:F1000")
End Sub
Sub NamenDefinieren2()
Dim wbGesamt As Workbook, shGesamt As Worksheet
Set wbGesamt = ActiveWorkbook
Set shGesamt = Worksheets("Gesamt")
'Der Name wird hier universell für jedes Blatt auf Bereich F7:F1000 definiert !
wbGesamt.Names.Add "Bereich", "=indirect(""F7:F1000"")"
End Sub
Gruß, NoNet