Microsoft Excel

Herbers Excel/VBA-Archiv

Absturz bei lokalen Bereichsnamen

Betrifft: Absturz bei lokalen Bereichsnamen von: Werner R.
Geschrieben am: 28.07.2008 08:58:37

mein Excel-Niveau: befriedigend

Hallo liebe Forumsmitglieder,

Die Spalten eines Tabellenblatts hatte ich als Bereiche definiert (jeweils eine Spalte als einen Bereich).
Anschliessend ist mir die Tabelle durch einen falschprogrammierten Makro kaputtgegangen, und ich habe
sie von einer in der gleichen Datei enthaltenen Sicherheitskopie durch Kopieren der Sicherheitskopie
wiederhergestellt. Als Ergebnis sind aber alle globalen Bereichsnamen in der kopierten Tabelle zu lokalen
Bereichsnamen geworden.

Nun habe ich festgestellt, dass lokale Bereichsnamen schwerer als globale anzusprechen sind, besonders
wenn man z.B. zwei oder mehrere verschiedene Tabellen hat, die alle mit den gleichen lokalen Bereichsnamen
arbeiten (in meiner Datei haben drei Tabellen die gleiche Struktur und die gleichen Bereichsnamen, bei zweien davon hatte ich von vorneherein lokale Bereichsnamen gewählt).

Excel erkennt einen lokalen Bereichsnamen manchmal auch dann nicht, wenn ich ihn mit Voranstellung
des Worksheetnamens anspreche, z.B.

Worksheets(1).Cells(2, Range("Spaltenname").column).Value = "xx"

Wenn ich dann aber das Worksheet in einer obiger Programmzeile direkt vorangestellten Programm-
zeile aktiviere, klappt es meistens:

Worksheets(1).Activate
Worksheets(1).Cells(2, Range("Spaltenname").column).Value = "xx"

Das soll einer mal verstehen! Liegt hier eine Schwachstelle von Excel vor oder habe ich einen Fehler
gemacht? (Ein Umbenennen der Bereichsnamen in den verschiedenen gleichstukturierten Tabellen
wäre etwas umständlich.)

Kurzum, mein Problem ist nicht unlösbar, doch ich finde das dauernde Aktivieren der Worksheets doch
ziemlich umständlich. Werner R.

  

Betrifft: AW: Absturz bei lokalen Bereichsnamen von: Luschi
Geschrieben am: 28.07.2008 09:24:53

Hallo Werner,

lokale Variablen müssen richtig angesprochen werden, wenn eine andere
Tabelle aktiv ist:

With ThisWorkbook.Worksheets("Tabelle1")
     .Cells(1, .Range("Spaltenname").Column).Value = "blablabla"
End With

Wichtig ist hierbei der Punkt vor Range, damit Excel den lokalen Namen in 'Tabelle1' sucht.
Sonst bezieht sich Range (wie auch Cells) immer nur auf die aktive Tabelle.

Gruß von Luschi
aus klein-Paris



  

Betrifft: Alles klar von: Werner R.
Geschrieben am: 28.07.2008 09:38:59

Hallo Luschi,

Jetzt dämmert es mir: Die Worksheets-Anweisung muss bei lokalen Bereichsnamen also nicht nur auf "Cells", sondern separat noch einmal auf den (lokalen) "Range" bezogen sein (durch die "Do With...End With-Anweisung" erspart man sich die explizite Wiederholung).

Also kann ich mir das dauernde Wiederaktivieren des Worksheets doch ersparen.

Vielen herzlichen Dank, denn ich setze diese Art von Anweisung ziemlich häufig ein!!

Werner R.


  

Betrifft: Test verlief erfolgreich von: Werner R.
Geschrieben am: 29.07.2008 12:54:37

Hallo Luschi,

das Verfahren mit Do With..End With und dem zusätzlichen Punkt, das ich inzwischen ausprobiert habe,
funktioniert prima, und ich kann es oft einsetzen Nochmals vielen herzlichen Dank! Werner R.


 

Beiträge aus den Excel-Beispielen zum Thema "Absturz bei lokalen Bereichsnamen"