Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1088to1092
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
Inhaltsverzeichnis

Name vergeben

Name vergeben
RolfK
Hallo Forum,
die folgen Anweisung führt manchmal zu Problemen, indem der Name nur so
=NeuZugang!R2C1:R8C10
angelegt und damit nicht genutzt werden kann.
'Namen vergeben
AnzZeilenZiel = wsZiel.Range("A1").CurrentRegion.Rows.Count
AnzSpaltenZiel = wsZiel.Range("A1").CurrentRegion.Columns.Count
ThisWorkbook.Names.Add Name:="DatenNeuZugang", RefersToR1C1:= _
"=NeuZugang!R2C1:R" & AnzZeilenZiel & "C" & AnzSpaltenZiel
Hat einer da einen Hinweis, wo das Problem liegen könnte.
Gruß Rolf

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Name vergeben
26.07.2009 12:49:26
Herbert
Hi,
poste den gesamten relevanten Code einschließlich Variablendeklaration.
mfg herbert
AW: Name vergeben
26.07.2009 13:56:05
RolfK
Hallo Herbert,
hier der gesamt Code:
Sub NeueTlnDrucken()
Dim AnzZeilenZiel As Integer, AnzSpaltenZiel As Integer, Teilnehmer As Integer
Dim Eingabe As String
Dim wsQuelle As Worksheet, wsZiel As Worksheet, wsDruck As Worksheet
Set wsQuelle = ThisWorkbook.Worksheets("Teilnehmer")
Set wsZiel = ThisWorkbook.Worksheets("NeuZugang")
Set wsDruck = ThisWorkbook.Worksheets("DruckZugang")
'altdaten löschen
AnzZeilenZiel = wsZiel.Range("A1").CurrentRegion.Rows.Count
AnzSpaltenZiel = wsZiel.Range("A1").CurrentRegion.Columns.Count
'wsZiel.Range(Cells(2, 1), Cells(AnzZeilenZiel, AnzSpaltenZiel)).Select
If AnzZeilenZiel > 1 Then
With wsZiel
.Range(.Cells(2, 1), .Cells(AnzZeilenZiel, AnzSpaltenZiel)).ClearContents
End With
End If
'Namen Löschen
On Error Resume Next
ThisWorkbook.Names("DatenNeuZugang").Delete
On Error GoTo 0
'neue daten filtern
With wsQuelle
.Range("QuelleTlnDaten").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=wsZiel.Range("KritDatNeue"), CopyToRange:= _
wsZiel.Range("ZielNeueTln"), Unique:=False
End With
'LfdNummern vergeben
AnzZeilenZiel = wsZiel.Range("A1").CurrentRegion.Rows.Count
AnzSpaltenZiel = wsZiel.Range("A1").CurrentRegion.Columns.Count
'wsZiel.Cells(2, 1).Select
'wsZiel.Range(Cells(2, 1), Cells(AnzZeilenZiel, 1)).Select
If AnzZeilenZiel > 1 Then
With wsZiel
.Cells(2, 1) = 1
.Range(.Cells(2, 1), .Cells(AnzZeilenZiel, 1)).DataSeries Rowcol:=xlColumns, Type:= _
xlLinear, Date:=xlDay, _
Step:=1, Trend:=False
End With
End If
'Namen vergeben
ThisWorkbook.Names.Add Name:="DatenNeuZugang", RefersToR1C1:= _
"=NeuZugang!R2C1:R" & AnzZeilenZiel & "C" & AnzSpaltenZiel
'prüfen der Tlnauswahl
wsZiel.Activate
Eingabe = MsgBox("Für die in der Liste aufgeführten Teilnehmer werden die Anmeldezettel  _
gedruckt. Bitte wählen...", vbOKCancel, "Bitte prüfen!")
If Eingabe = vbCancel Then Exit Sub
'drucken
For Teilnehmer = 2 To AnzZeilenZiel
With wsDruck
.Range("LfdTlnNeu") = Teilnehmer - 1
.PrintOut Copies:=2, Collate:=True
'.PrintPreview
End With
Next Teilnehmer
wsDruck.Activate
End Sub

Wie gesagt, das besonders komische daran ist, dass es in meinen Augen nicht nachvollzeihbar mal funktioniert und mal nicht.
Gruß Rolf
Anzeige
Zusatzhinweis...
26.07.2009 18:33:25
RolfK
Das Problem scheint nicht aufzutreten, wenn ich den Code im Debugger schrittweise durchführe.
mfg RolfK
AW: Name vergeben
27.07.2009 22:28:39
Roland
Hallo Rolf,
ich würde folgendes tun:
1. Alle integer-Variablen als Long deklarieren (bei Zeilen notwendig, da der Integer-Bereich auch in Office 2003 überschritten werden kann und sonst auch, weil Long-Werte schneller verarbeitet werden).
2. Am Anfang der Prozedur die Zeile
on error goto errorhandler
einfügen
3. Das Ende der Prozedur wie folgt schreiben:
exit sub
errorhandler:
stop
resume
end sub
Effekt: Tritt der Fehler zur Laufzeit auf, wird die Abarbeitung unterbrochen und das Stop gelb unterlegt. Mit F8 kommst Du dann zu Resume und einem weiteren F8 springt die Ausführung in die Zeile zurück, die den Fehler verursacht hat. Dort angekommen kannst Du die Werte bzw. Fehler der Variablen meistens bereits erkennen, indem Du den Mauszeiger drüber hältst. So kommst du dem Fehler auf die Spur. Ergänzend kannst Du direkt oberhalb eine Leerzeile einfügen, dort schreiben: debug.print (deine Variable), mit gedrückter Maustaste den gelben Bereich in diese Zeile schieben, nur diese mit F8 ausführen lassen und Dir das Ergebnis im Direktfenster ansehen. Das funktioniert alles nur, wenn das VBA-Projekt nicht geschützt ist.
Viel Erfolg beim Debuggen
Roland Hochhäuser
Anzeige
AW: Name vergeben
29.07.2009 18:21:34
RolfK
Hallo Herbert,
Leider kann ich mich erst jetzt wider melden.
Es tritt ja kein Fehler zur Laufzeit auf, sondern der Bereichsname ist nur nicht richtig vergeben, d.h. nicht korrekt umgewandelt.
Das steht dann z.B. unter Menü/Einfügen/Namen/Definieren
=TlnFilter!R2C1:R9C12
und es sollte aber
=TlnFilter!$A$2:$L$9
so sein. Hast Du noch einen Hinweis?
Gruß Rolf
AW: Name vergeben
29.07.2009 20:47:24
Roland
Ich bin zwar nicht Herbert, antworte aber trotzdem ;-)
Der einzige Namen, den Du im o.a. Makro vergibst, ist "DatenNeuZugang", dort schreibst Du einmal R1C1 und dann R2C1 (gibt es nicht). Da müsste der Wurm drin sein. Außerdem willst Du Longwerte in einen String packen und hoffst auf die automatische Konvertierung; wäre mir zu riskant, ich würde & CStr(AnzZeilenZiel) & "C" & CStr(AnzSpaltenZiel) schreiben. Vielleicht hilft Dir das weiter.
Gruß von
Roland Hochhäuser
Anzeige
Lösungshinweis....
31.07.2009 09:20:23
RolfK
Hallo Roland,
entschuldige den Fauxpas mit Deinem Namen.
Ich habe die Lösung durch Probieren wie folgt gefunden:
'Namen vergeben
With wsZiel
Set Bereich = .Range(.Cells(2, 1), .Cells(AnzZeilenZiel, AnzSpaltenZiel))
End With
ThisWorkbook.Names.Add Name:="DatenNeuZugang", RefersTo:=Bereich
Aber frag mich nicht, warum.
Gruß Rolf

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige