# Namen für Zeilen deklarieren und verwenden in VBA



## joburg (27. August 2014)

Ich habe folgendes Problem mit Namen in VBA, welches ich auch mit diversen Foren nicht bewältigen kann.

Ich möchte einer Zeile einen Namen geben mit:


```
Sub Benamung()
With Worksheets("Angaben").Rows("34").Name = "Quartalszahlen"
End With
End Sub
```

Danach möchte ich diese Zeile 34 ansprechen und beispielsweise beim klicken des button diese Zeileverstecken.


```
Private Sub button_Click()
If button = True Then
Worksheets("Angaben").Names("Quartalszahlen").Hidden = False
Else
Worksheets("Angaben").Names("Quartalszahlen").Hidden = True
End If
End Sub
```

Ich habe verschieden Konstellationen versucht, die ich jetzt nicht alle aufzeigen möchte, aber es funktioniert nicht und es kommt ständig die Meldung 'Laufzeitfehler 1004 - Anwendungs- oder objektorientierter Fehler'.

Der Hintergrund meiner Namensvergabe ist, dass ich dynamische Zell-, Zeilen- und Spaltenbezüge verwenden möchte, was mit Namensvergabe möglich ist. Schreibe ich beispielsweise einen Befehl für Zeile 34 und ich füge eine neue Zeile darüber ein bezieht sich der Befehl nicht auf Zeile 35 sondern 34, was falsch ist.

Was kann ich machen?


----------



## Parantatatam (27. August 2014)

Wenn ich mich da recht erinnere, dann müsste Dein oberes Konstrukt so aussehen:

```
Sub Benamung()
With Worksheets("Angaben").Rows("34")
Name = "Quartalszahlen"
End With
End Sub
```
Außerdem kannst Du Dein unteres Konstrukt wie folgt vereinfachen:

```
Private Sub button_Click()
Worksheets("Angaben").Names("Quartalszahlen").Hidden = Not button
End Sub
```


----------



## Yaslaw (27. August 2014)

Mein Vorschlag war irgendwie so

```
ActiveWorkbook.Names.Add Name:="Quartalszahlen", RefersToR1C1:="=Sheet1!R34"
ActiveSheet.Rows(Range("Quartalszahlen").Row).Hidden = True
```


----------



## joburg (27. August 2014)

Wow, es funktioniert!
Ein schönes Gefühl!!

Aber ich möchte es gern verstehen. Was ich nun letztlich ausgetauscht habe ist dieser Vorschlag von Yaslaw:


ActiveSheet.Rows(Range("Quartalszahlen").Row).Hidden = True
gegen meine alte Version


Worksheets("Angaben").Names("Quartalszahlen").Hidden = True
Ich tippe darauf, dass Rows(Range("Quartalszahlen").Row).  den Unterschied macht. Aber warum? Warum reicht nicht  Names("Quartalszahlen"). ???


----------



## Yaslaw (27. August 2014)

Names("Quartalszahlen") ist nur ein Range. Per Zufall ist dieser Range eine ganze Zeile. Muss aber nicht sein.
Darum gehe ich den Weg über die Rownumer des Ranges.


----------



## joburg (27. August 2014)

Nun habe ich ein ähnliches Problem.
Ich möchte mehrere Zeilen (5 bis 44) mit einem einzigen Namen versehen:

Sub System1()
With Worksheets("Angaben").Rows("5:44")
Name = "System1"
End With
End Sub

Und diese dann Schließen bei Auswahl 1 mit der ComboBox1 ausblenden; Ansonsten einblenden.

Private Sub ComboBox1_Click()
ComboBox1.ListFillRange = "Tabelle1!B4:B14"
If ComboBox1.Value = ("1") Then
ActiveSheet.Rows(Range("System1").Row).Hidden = True
Else
ActiveSheet.Rows(Range("System1").Row).Hidden = False
End If
End Sub

Warum zeigt er mir diesmal eine Fehlermeldung "Die angegebene Dimension ist ungültig für den aktuellen Diagrammtyp"?

Welche Stelle muss ich wie korrigieren, damit es funktioniert?


----------



## joburg (28. August 2014)

Ich möchte gern mehrere Zeilen (5 bis 44) mit einem einzigen Namen versehen:

Sub System1()
With Worksheets("Angaben").Rows("5:44")
Name = "System1"
End With
End Sub

Und diese dann Schließen bei Auswahl 1 mit der ComboBox1 ausblenden; Ansonsten einblenden.

Private Sub ComboBox1_Click()
ComboBox1.ListFillRange = "Tabelle1!B4:B14"
If ComboBox1.Value = ("1") Then
ActiveSheet.Rows(Range("System1").Row).Hidden = True
Else
ActiveSheet.Rows(Range("System1").Row).Hidden = False
End If
End Sub

Warum zeigt er mir diesmal eine Fehlermeldung "Die angegebene Dimension ist ungültig für den aktuellen Diagrammtyp"?

Welche Stelle muss ich wie korrigieren, damit es funktioniert?


----------



## Yaslaw (28. August 2014)

Hab mal die 2 Threads zusammengeführt. Ist ja dasselbe Problem.

Was mich verwundert. Was für ein Diagramm? Gem. Fehlermeldung sollte da irgend wo ein Diagramm sein.


----------



## joburg (28. August 2014)

Es ist kein Diagramm in der gesamten Exceldatei enthalten. Es geht nur darum mehrere Zeilen mit einer entsprechenden Auswahl in der Combobox zu einzublenden und zu auszublenden. Mit dem Button eine Zeile einzublenden und auszublenden wende ich nun an und es funktioniert einwandfrei.


----------



## joburg (28. August 2014)

Habe es nun nochmal probiert und jetzt zeigt er mir wieder an: 'Laufzeitfehler 1004 - Anwendungs- oder objektorientierter Fehler'


----------



## Yaslaw (28. August 2014)

ggf ActiveSheet durch das Sheet ersetzen das gemeint ist


----------



## joburg (28. August 2014)

Ich habe bereits ActiveSheet verwendet:
ActiveSheet.Rows(Range("System1").Row).Hidden = False


----------



## Yaslaw (28. August 2014)

Jepp. Ersetze es durch das Sheet auf dem die Zeilen ausgeblendet werden sollen. Im restlichen Code arbeitest du auch mit benammsten Sheets


----------



## joburg (28. August 2014)

OK, jetzt sagt er mir 'Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen' 
und markiert nach dem Debuggen folgendes gelb:
Worksheets("Angaben").Rows(Range("System1").Row).Hidden = False


----------



## joburg (28. August 2014)

Im obigen Fall nutze ich auch ActiveSheet statt Worksheet("Angaben") und es funktioniert.


----------



## joburg (28. August 2014)

Kann mir jemand helfen?


----------



## Zvoni (28. August 2014)

Worksheets("Angaben").Range("System1").Rows.Hidden=False
geht auch nicht?


----------



## joburg (28. August 2014)

Es funktioniert nicht. Er zeigt an "Anwendungs- oder objektorientierter Fehler".
Ich habe eine andere Datei, wo das auch möglich ist nur leider muss ich ein Passwort eingeben, wenn ich den VBA-Code sehen möchte.

Also es funktioniert zumindest. Aber wie?


----------



## Zvoni (29. August 2014)

Dann hast du woanderst einen Bock drin.

Habe bei mir eben mit Phantasiedaten ein Excelblatt gefüllt, Zeile 5 bis 10 den Namen "Test" gegeben mit

_Worksheets("Tabelle1").Rows("5:10").Name = "Test"_

und dann mit

_Worksheets("Tabelle1").Range("Test").Rows.Hidden = True_

erfolgreich die Zeilen versteckt


----------

