Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
932to936
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
932to936
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Namen definieren, m. Bereich.Verschieben - VBA

Namen definieren, m. Bereich.Verschieben - VBA
15.12.2007 08:59:00
Peter
Guten Tag
Ich möchte verschiedene Bereiche in einer umfangreichen Tabelle mit Namen benennen.
Dazu habe ich in Tabelle "Namen" in der Spalte A die vorgesehenen Namen und in Spalte B die Formel.
Da die Anzahl Zeilen in den betreffenden Bereichen variabel sind und ich jeweils nicht die gesamte Spalte mit dem Namen benennen will , habe ich in der Spalte B eine etwas unübliche Formel vorgesehen, die jedoch funktioniert, wenn ich sie manuell bei "Namen definieren" - "bezieht sich auf" eintrage.
Da es eine ganze Menge Bereiche sind, möchte ich diese mit untenstehendem Code definieren. Aus für mich nicht verständlichem Grund stockt der Code schon bei der Abarbeitung der ersten Zeile mit dem Hinweis "die eingegebene Formel enthält einen Fehler" - der für mich allerdings nicht ersichtlich ist. Der Wert ANF ist mit 1 und der Wert END mit 1300 definiert.
Debug.print ergibt folgende Ausgabe:
_01K =BEREICH.VERSCHIEBEN('01'!$A$1;ANF-1;;END-ANF+1;)
Wahrscheinlich muss es sich um einen läppischen Fehler handeln. Wer kann mir helfen?
Danke, Peter
Inhalt Zelle A1 in Tabelle Namen
01K
Inhalt Zelle B1 in Tabelle Namen
'=BEREICH.VERSCHIEBEN('01'!$A$1;ANF-1;;END-ANF+1;)
Sub namen() Dim strName As String Dim strString As String Dim lngZeile As Long lngZeile = 1 With Sheets("Namen") Do While .Cells(lngZeile + 1, 1) "" strName = .Cells(lngZeile, 1) If strName = "" Then Exit Sub strString = .Cells(lngZeile, 2) Debug.Print strName & " " & strString ActiveWorkbook.Names.Add Name:=strName, RefersToR1C1:= _ strString lngZeile = lngZeile + 1 Loop End With End Sub


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Namen definieren, m. Bereich.Verschieben - VBA
15.12.2007 10:40:38
Björn
Hallo Peter,
ganz begriffen habe ich Deinen Code zwar nicht, aber versuche es doch mal ohne '= in Zelle B1, d. h. nur mit dem Eintrag: BEREICH.VERSCHIEBEN('01'!$A$1;ANF-1;;END-ANF+1;)
Viele Grüße
Björn

AW: Namen definieren, m. Bereich.Verschieben - VBA
15.12.2007 11:31:25
Beate
Hallo Peter,
deine Namen sind ja nicht wirklich dynamisch, da immer Zeile 1:1300 rauskommt, daher kannst du auch auf Bereich.Verschieben in der Formel verzichten und diese Formel benutzen, dabei müssen die Formeln in Spalte B als Text eingegeben sein:
 AB
1O1K='01'!$A$1:$A$1300

Dann funktioniert dieser Code für die Namensdefinition und definiert Namen für alle Zeilen, die in Spalte A belegt sind:
Sub Namen_vergeben()
    Dim i As Long, lrow As Long
    lrow = Range("A65536").End(xlUp).Row
    For i = 1 To lrow
        ActiveWorkbook.Names.Add Name:=Cells(i, 1).Value, RefersTo:=Cells(i, 2).Value
    Next i
End Sub

PS: Wenn du mit Bereich.Verschieben wirkliche Dynamik erzielen willst, dann musst du z.B. die Funktion ANZAHL2 in die Formel einbinden, wie hier an einem Beispiel erklärt: Pivottabelle - Dynamischer Datenbereich . Dabei muss ich anmerken, dass ich das Makro mit Bereich.Verschieben in Spalte B auch nicht zum Laufen gebracht habe.
Gruß,
Beate

Anzeige
AW: Namen definieren, m. Bereich.Verschieben - VBA
15.12.2007 11:35:25
Beverly
Hi Peter,
schreibe in Spalte B die Formel
Namen
 AB
101K#NAME?
Formeln der Tabelle
B1 : =BEREICH.VERSCHIEBEN('01'!$A$1;ANF-1;;END-ANF+1;)
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Sub namen() Dim strName As String Dim lngZeile As Long lngZeile = 1 With Sheets("Namen") Do While .Cells(lngZeile, 1) "" strName = "_" & .Cells(lngZeile, 1) If strName = "" Then Exit Sub ActiveWorkbook.Names.Add Name:=strName, RefersToR1C1:=.Range("B" & lngZeile). _ FormulaR1C1 lngZeile = lngZeile + 1 Loop End With End Sub


________________________________________

Anzeige
AW: Namen definieren, m. Bereich.Verschieben - VBA
15.12.2007 13:23:00
Daniel
Hi
du bekommst aus folgenden Gründen Fehlermeldungen:
  • 1. 01K ist kein gültiger Name

  • Namen durfen nicht mit Ziffern beginnen oder mit Zellbezügen verwechselbar sein
    hier also was anderes verwenden ("_01K")
  • 2. die Zeile ActiveWorkbook.Names.Add Name:=strName, RefersToR1C1:= strString

  • wenn du den Namen in der R1C1 - Schreibweise definieren willst, dann muß du auch die Formel in der R1C1-Schreibweise in der Zelle B1 angeben: , dh du musst in Zelle B1 das hier schreiben:
    =OFFSET('01'!R1C1,Anf-1,,End-Anf+1,)
    du kannst auch die Deutsche Schreibweise verwenden (Local), allerdings musst du trotzdem die R1C1-Schreibweise verwenden (in Deutsch: Z1S1 ) und nicht die A1-Schreibweise, die ist bei Namesdefinitonen per Makro nicht zulässig.
    das sieht dann so aus:
    der Befehl: ActiveWorkbook.Names.Add Name:=strName, RefersToR1C1Local:= strString
    der Wert in B1: =BEREICH.VERSCHIEBEN('01'!Z1S1;Anf-1;;End-Anf+1;)
  • weitere Fehler:

  • 
    Do While .Cells(lngZeile + 1, 1) ""  muss heißen:  Do While .Cells(lngZeile, 1)  ""
    


    sonst wird die letzte beschreibene Zeile nicht verwendet.
    das ganze geht natürlich nur, wenn END und ANF selbst defnierte Namen sind, die auf Zellen verweisen, die die Werte 1300 und 1 enthalten.
    Gruß, Daniel

    Anzeige
    AW: Namen definieren, m. Bereich.Verschieben - VBA
    15.12.2007 21:40:00
    Peter
    Hallo miteinander
    Vielen Dank für alle Rückmeldungen!
    Bei meinem Thread hat sich ein Fehler eingeschlichen, denn der Inhalt von Zelle A1 in Tabelle Namen ist
    _01K (und nicht 01K)
    Bei Debug.print war es dann richtig angegeben:
    _01K =BEREICH.VERSCHIEBEN('01'!$A$1;ANF-1;;END-ANF+1;)
    Der Hinweis wegen RefersToR1C1 hatte es wirklich in sich. Ich habe dann das R1C1 weggelassen (also nur RefersTo belassen), BEREICH.VERSCHIEBEN in OFFSET verwandelt und alle Semikolon (;) durch Kommas (,) ersetzt.
    Dann lief alles tadellos. Eine grosse Erleichterung bei so vielen Formeln.
    Die Variablen ANF und END habe ich belassen, denn immerhin habe ich über 200 solche Formeln (also entsprechend viele definierte Bereiche). Wenn nu die Bereiche insgesamt grösser werden, passe ich lieber diese Variablen an, als ich alle Formeln anpasse.
    Nochmals vielen Dank für die vielen Hinweise!
    Peter
    Anzeige

    304 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige