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

Fehlersuche

Fehlersuche
01.05.2003 10:36:42
Christian
Hi
ich habe ein kleines Makro geschieben.
Beim durchlauf des Makros kommt jedoch eine Fehlermeldung, die ich nicht mehr nachvollziehen kann, d.h. ich weis einfach nicht wo der Fehler liegen soll. Erschwerend kommt noch hinzu, gestern hat es funktioniert.

Als Fehlermeldung kommt:
Laufzeilenfahler '1004'
Anwendungs- oder Objektdefinierter Fehler

Mein Code:

Dim AnfangNT, EndeLV, EndeNT
Dim AnfSp, EnSp
Dim j, i
Dim LZ, LS
Dim Bereich, Ziel

LS = Worksheets(1).Cells(6, Worksheets(1).Columns.count).End(xlToLeft).Column 'liefert die letzte belegte Spalte der Tabelle (bezogen auf Zeile 6)
LZ = Worksheets(1).Cells(Rows.count, 7).End(xlUp).Row 'liefert die letzte belegte Zeile der Tabelle

'Entfernt die Gliederungen
Range("B11").Select
With ActiveSheet.Outline
.AutomaticStyles = False
.SummaryRow = xlBelow
.SummaryColumn = xlRight
End With
Selection.ClearOutline

'Feststellen der Entsprechenden Spaltennummern
For j = 1 To LS Step 1
If Cells(6, j).Value = "H-Kosten" Then
AnfSp = j
End If
If Cells(4, j).Value = "Gesamtübersicht" Then
EnSp = j
End If
Next j

'Kopieren der Gesamtübersicht und einfügen in selbige als Werte
Range(Cells(7, EnSp), Cells(LZ - 15, EnSp + 1)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
....

Beim Debuggen nach der Fehlermeldung wird die Range-Anweisung angezeit.
Range(Cells(7, EnSp), Cells(LZ - 15, EnSp + 1)).Select

Ich hoffe, jemand hat eine Idee???


8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Fehlersuche
01.05.2003 10:46:26
gordon

Hallo Christian,

abgesehen von der verbesserungswürdigen Gestaltung der Aufrufe
Stichwort: vollständige Adressierung i.S.v.
with ActiveSheet
set rng = .range(.cells...

als erste Vermnutung: im aktiven Blatt keine Spaltenüberschtiften gefunden, daher EnSp noch 'leer', daher Fehler.

Gruß
gordon

Re: Fehlersuche
01.05.2003 10:47:24
Christian

Ich habe ebend noch einmal etwas herum probiert. Dabei ist mir aufgefallen:
Wenn sich das Tabellenblatt an erster Stelle von allen Tabellenblättern befindet, dann funktioniert das Makro einwandfrei. Steht das Tabellenblatt an einer anderen Stelle, so bricht das Makro an besagter Stelle ab.


Anzeige
Re: Fehlersuche
01.05.2003 10:50:57
gordon

Hallo Christian,

wenn Blatt nicht worksheet(1), dann nicht korrekte Ermittlung von LZ und LS, ähnliche AUswirkung wie in meiner ersten Vermutung.

abhilfe:

worksheet korrekt zuweisen und LZ ermitteln:
dim ws as worksheet
set ws as ActiveWorkbook.worksheets("NameDesSheets")
LS = Ws.Cells(6, ws.Columns.count).End(xlToLeft).Column
usw.

Gruß
gordon

Tippfehler !
01.05.2003 10:51:55
gordon

sorry, muss heissen:

set ws = ActiveWorkbook.worksheets("NameDesSheets")

Re: Fehlersuche
01.05.2003 10:56:20
ChrisL

Hallo Christian

Habe auch ein bischen rumprobiert und folgendes gefunden.

Wenn in Spalte G (7), die letzte Zeile kleiner als 15 ist, dann zieht es dir in der fehlerhaften Zele LZ - 15 ab, was zum Fehler kommen kann.

LZ würde ich übrigens wie folgt ermitteln:
LZ = Range("G65536").End(xlUp).Row
und
LS = Range("IV6").End(xlToLeft).Column

Blattbezug vermutlich nicht nötig und wenn schon über das ganze Makro. Am Besten mit

With Worksheets(1)
.Range etc.
End With

Gruss
Chris

Anzeige
Re: Fehlersuche
01.05.2003 10:56:42
Christian

Danke gordon,

hatte ich mir dann auch gedacht. Habe folgenden Code eingegeben:

BName = ActiveSheet.Name
LS = Worksheets(BName).Cells(6, Worksheets(1).Columns.count).End(xlToLeft).Column 'liefert die letzte belegte Spalte der Tabelle (bezogen auf Zeile 6)
LZ = Worksheets(BName).Cells(Rows.count, 7).End(xlUp).Row 'liefert die letzte belegte Zeile der Tabelle

jetzt funktioniert es. Werde aber Deinen Code mal einsetzen, Er sieht mir etwas eleganter aus und sollte ich wo anders noch Probleme bekommen, ein Variable ist schonmal schneller vorgesetzt als "Worksheets(BName)."
Schönen 1.Mai noch.

CU Christian

Anzeige
Re: Fehlersuche
01.05.2003 15:42:23
gordon

Hallo Christian,

ausserdem brauchst Du Dich bei 'korrekter' Zuweisung nicht darum zu kümmern, welches Blatt gerade aktiv ist. Du hast dann sozusagen einen Zeiger auf das jeweilige Blatt. Außerdem werden im VBA-Editor die möglichen Methoden während der Programmierung angezeigt (gilt natürlich generell für alle deklarierten Objektvariablen). Bei umfangreichen Makros b zw. großzügigen Objektverweisen (umfangreicher Range bzw. workbook oder worksheet) und Verwendung von set zum ende des Makros die Zuweisung von 'nothing' an die Variable nicht vergessen (Stichwort:Systemressourcen).

sub EineSub()
Dim ws as worksheet

set ws = Workbook("EinWorkbook").worksheets("EinWorksheet")
' beliebiger Code

set ws = nothing
end sub

Anzeige
Re: Fehlersuche
01.05.2003 17:30:35
christian

Danke nochmal für die vielen Hinweise.

Ciao Christian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige