Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
308to312
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
308to312
308to312
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA: Benannte Bereiche ausfindig machen

VBA: Benannte Bereiche ausfindig machen
15.09.2003 17:47:44
Franz W.
Hallo Forum,

ich habe in einem Blatt mehrere Bereiche, die alle einen festen Namen haben, z.B. "Testbereich1", "Testbereich2", "Testbereich3",....

Diese Bereiche sind alle unterschiedlich groß, und die Größe (also Anzahl Zeilen/Spalten) ändern sich.

Die Abstände zwischen diesen Bereichen sind ebenfalls unterschiedlich groß und variieren auch. Es kann also nicht vorgegeben werden, in welcher Zeile ein Bereich beginnt.

Nun meine zwei VBA-Fragen: Ich möchte in all diesen Bereichen diesselbe Aktion durchführen.
- Wie kann ich die benannten Bereiche ausfindig machen und einlesen?
- Wie könnte die Schleife dafür aufgebaut werden?

Ich bitte Euch um Eure Hilfe.

Vielen Dank schon mal und Grüße
Franz

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Benannte Bereiche ausfindig machen
15.09.2003 17:50:06
Hajo_Zi
Hallo Franz

ich vermute mal Du kennst Dich inzwischen ein wenug aus. Darum aus meinem Archiv.

verwendete Namen finden
mit folgender Makrolösung kannst Du Dir alle verwendeten Namen in der Tabelle rausschreiben lassen.

Sub AlleNamenProtokollieren()
Dim benannteBereiche As Object
Sheets("Tabelle1").Activate
Range("A1").Select
For Each benannteBereiche In ActiveWorkbook.Names
ActiveCell.Value = benannteBereiche.Name
ActiveCell.Offset(0, 1).Value = ActiveWorkbook.Names.Item(benannteBereiche.Name)
ActiveCell.Offset(1, 0).Select
Next
End 

Sub
Möchtest Du alle Namen in der Tabelle markieren, verwendest Du folgende Syntax:

Sub AlleNamenMarkieren()
Dim VerName As Name
For Each VerName In ActiveWorkbook.Names
Range(VerName).Interior.ColorIndex = 3
Next VerName
End Sub



Sub Name_ermitteln()
Dim nm As Name
For Each nm In ActiveWorkbook.Names
If Not Application.Intersect(ActiveCell, Range(nm.RefersToRange.Address)) Is Nothing Then
MsgBox nm.Name
Exit Sub
End If
Next
MsgBox "Aktive Zelle gehört zu keinem mit Namen versehenen Bereich"
End Sub

Von Martin Beck


Sub Namen_Suchen()
'   erstellt von Hajo.Ziplies@web.de 27.04.03
Dim ObBereich As Object
Dim StName As String
StName = InputBox("Bitte gesuchten Namen eingeben!!")
For Each ObBereich In ActiveWorkbook.Names
If ObBereich.Name = StName Then
MsgBox "Name schon vorhanden"
Exit Sub
End If
Next
End Sub



Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.

Zurzeit gibt es wieder Probleme mit der E-Mail Benachrichtigung.

Ich bekomme Mails zu Beiträgen an denen ich nicht beteiligt bin und zusätzlich noch Mails zu meinen eigenen Beiträgen.
Das Problem mit den eigenen Benachrichtigung kann gelöst werden durch Lösche und Neuanmelden. Dieses möchte ich aber nicht jeden Tag machen.
Um dieses Problem erstmal zu beseitigen habe ich die automatische Mailbenachrichtigung abgeschaltet.
Aus diesem Grunde ist es dem Zufall überlassen ob auf Rückfragen Antworten von mir kommen.


http://home.media-n.de/ziplies/

Anzeige
AW: VBA: Benannte Bereiche ausfindig machen
15.09.2003 18:16:45
Franz W.
Hallo Hajo,

ja, vielen Dank. Ich denke, damit komm ich weiter. Ggflls. melde ich mich noch mal.

Vielen Dank und Grüße
Franz
Danke für die Rückmeldung oT
15.09.2003 18:21:42
Hajo_Zi
Doch noch eine Frage
15.09.2003 18:55:47
Franz W.
Hallo Hajo,

super, vielen Dank es klappt (fast). Hab gleich das erste Beispiel genommen.

Aber ein Problem hab ich noch (und da hab ich jetzt leider ein rotes Tuch für Dich). Der Code klappt nur dann, wenn die Mappe nur ein Blatt hat. Und das deshalb, weil das, was ich dann einfüge mit Selection arbeitet.

Hab jetzt zwei Möglichkeiten versucht, kriege sie aber leider alleine nicht hin:
- Wie lässt sich die Schleife "For Each benannteBereiche In ActiveWorkbook.Names" auf das aktive Blatt beschränken?
- Alternativ: lässt sich mein Einschub ohne "Select" schreiben? Da scheitere ich leider auch, kriege dauernd irgendwelche Fehlermeldungen.

Hättest Du da bitte auch noch einen Tipp für mich?

Hier der Code (bitte nicht zu genau anschauen, ist erst im Aufbau):


Sub ZweiteZeileFaerben()
Dim benannteBereiche As Object
For Each benannteBereiche In ActiveWorkbook.Names
Dim LetzteZeile
Dim letztespalte
Dim sp$, r%, s, i, e
ActiveSheet.Unprotect
r = Range(benannteBereiche).Row
LetzteZeile = Selection.Row + Selection.Rows.Count - 1
letztespalte = 17
sp$ = Chr(letztespalte + 64)
i = LetzteZeile
e = ActiveSheet.UsedRange.Columns.Count
Range(Cells(r, 1), Cells(i, e)).Interior.ColorIndex = _
xlColorIndexNone
For s = r To LetzteZeile Step 2
Range("A" & s, sp & s).Select
With Selection.Interior
.ColorIndex = 19
.Pattern = xlSolid
End With
Next s
Next
End Sub


Vielen Dank schon mal und Grüße
Franz
Anzeige
AW: Doch noch eine Frage
15.09.2003 19:13:12
Hajo_Zi
Hallo Franz

ich habe jetzt mal versucht rauszukriegen was Du mit dem Makro machen willst. Da ich keine Ahnung habe was Selektiert hast. Schreibe doch mal was Dein Majkro machen soll.

Der Code löst bei alle Tabellen die nicht aktiv sind einen Fehler aus da dort nicht der Schutz aufgehoben wird.


Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.

http://home.media-n.de/ziplies/

Anzeige
AW: Doch noch eine Frage
15.09.2003 20:17:26
Franz W.
Hallo Hajo,

zweimal Entschuldigung: einmal, dass es so lange gedauert hat, musste kurz zu einem Notfall rau.

Zum zweiten dafür, dass ich im Code eine Zeile unterschlagen habe. Bei meinen Versuchen, das Select rauszukriegen, hatte ich es auskommentiert und dann zum Posten aus Versehen mit anderem Müll mitgelöscht.

Es ist die Zeile: " Range(benannteBereiche).Select "

Hier noch mal der komplette Code:


Sub ZweiteZeileFaerben()
Dim benannteBereiche As Object
For Each benannteBereiche In ActiveWorkbook.Names
Dim LetzteZeile
Dim letztespalte
Dim sp$, r%, s, strName, i, e
r = Range(benannteBereiche).Row
Range(benannteBereiche).Select
LetzteZeile = Selection.Row + Selection.Rows.Count - 1
letztespalte = 17
sp$ = Chr(letztespalte + 64)
i = LetzteZeile
e = ActiveSheet.UsedRange.Columns.Count
Range(Cells(r, 1), Cells(i, e)).Interior.ColorIndex = _
xlColorIndexNone
For s = r To LetzteZeile Step 2
Range("A" & s, sp & s).Select
With Selection.Interior
.ColorIndex = 19
.Pattern = xlSolid
End With
Next s
Next
Range("A9").Select
End Sub


Der Code färbt in den benannten Bereichen jede zweite ZEile ein.

Stoppen tut er bei eben dieser vergessenen Zeile mit der Meldung:
"Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden."

Wenn ich dann in dieser Zeile " Range(benannteBereiche).Select " mit der Maus über die Variable "benannteBereiche" gehe, zeigt er im TippText:
benannteBreiche="='2002'!$B$7:$J$27"

2002 ist aber ein anderes Blatt, das
- keine benannten Bereiche hat und das
- nicht geschützt ist.

Lösche ich aber alle anderen Blätter aus der Mappe und lass nur das eine übrig, dann klappt der Code genau so wie er soll.

Grüße
Franz
Anzeige
AW: Doch noch eine Frage
15.09.2003 20:20:33
Hajo_Zi
Hallo Franz

der Schutz wird nur bei einer Tabelle aufgehoben. Da nur eine die Aktive ist. Bekommst Du jetzt aus meinem neuen Code und Deinen Code den entsprechenden Code zusammengestellt??


Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.

http://home.media-n.de/ziplies/

Anzeige
Danke, ich glaube ja, melde mich wieder o.T.
15.09.2003 20:37:14
Franz W.
AW: Doch noch eine Frage
15.09.2003 21:02:30
Franz W.
Hallo Hajo,

leider nicht. Aber ich hab inzwischen an meinem alten Code rumgebastelt und alle Select, Selction ... rausgebracht. Und so klappt dieser Code jetzt einwandfrei, dort wo er soll - im aktiven Blatt, und er lässt die anderen Sheets in Ruhe.

Und so hab ich ja jetzt eine Lösung. Mit Deinem zweiten Code muss ich mich erst mal noch auseinandersetzen!

Besten Dank für die Hilfe und Grüße
Franz
AW: Doch noch eine Frage
15.09.2003 22:21:06
Franz W.
Hallo Hajo,

hab das Ganze jetzt noch ausgemistet, so schaut's jetzt besser aus und - vor allem - klappt auch. UND: es geht ohne Select!


Sub ZweiteZeileFaerben()
Dim benannteBereiche As Object
Dim r&, s&, i&, e%
Dim strName As Range
Application.ScreenUpdating = False
For Each benannteBereiche In ActiveWorkbook.Names
Set strName = Range(benannteBereiche)
r = strName.Row
i = strName.Row + strName.Rows.Count - 1
e = strName.Column + strName.Columns.Count - 1
' Alte Farben löschen:
Range(Cells(r, 1), Cells(i, e)).Interior.ColorIndex = _
xlColorIndexNone
' Jede zweite Zeile färben:
For s = r To i Step 2
Range(Cells(s, 1), Cells(s, e)).Interior.ColorIndex = 19
Next s
Next
Range("A9").Select
End Sub


Vielen Dank für Deine Hilfe und beste Grüße
Franz
Anzeige
Danke für die Rückmeldung oT
16.09.2003 06:27:25
Hajo_Zi
AW: Doch noch eine Frage
15.09.2003 19:46:45
Hajo_Zi
Hallo Franz

falls Du nur die Namen in einer Tabelle markieren möchtest.


Sub AlleNamen_eine_Tabelle()
'   erstellt von Hajo.Ziplies@web.de 15.09.03
' http://home.media-n.de/ziplies/
'   Namen nur in einer Tabelle markieren
Dim ObBenannteBereiche As Object
Dim StName As String
Worksheets("Tabelle1").Unprotect
For Each ObBenannteBereiche In ActiveWorkbook.Names
StName = ActiveWorkbook.Names.Item(ObBenannteBereiche.Name)
If Mid(StName, 2, InStr(StName, "!") - 2) = "Tabelle1" Then ' Tabellennamen feststellen
With Range(ObBenannteBereiche.Name).Interior
.ColorIndex = 19
.Pattern = xlSolid
End With
End If
Next
Worksheets("Tabelle1").Protect
End Sub



Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.

http://home.media-n.de/ziplies/

Anzeige

226 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige