VBA Excel: Laufzeitfehler 1004

Hallo Leute,

ich bin blutiger Anfänger in VBA und habe mir mit Internet Infos und dem Makro-Aufzeichner ein kleines Script gebaut.

Dieses Script soll Daten aus mehreren Quelldateien sortieren, kopieren und dann in eine andere Datei einfügen. Auf meinem Notebook klappt es wunderbar, aber auf meinem PC bekomme ich einen Laufzeitfehler 1004: „Die Methode ‚Range‘ für das Objekt ‚_Global‘ ist fehlgeschlagen.“
Der Fehler taucht in folgender Zeile auf:
While Range(„A“ & i) datLastUpdated

i ist vom Typ Integer und datLastUpdated ein Datum.

Ich hab leider keine Ahnung, wie ich an das Problem rangehen soll, ein paar Tipps - auch wenn sie noch so banal sind - wären sehr hilfreich.

THX
fragme

Hey,

probier mal Cells(Zeile, Spalte) aus.

Also wenn du die erste Spalte durchsuchen willst:

While Cells(i,1) datLastUpdated

MfG Hendrik Hilleckes

kopieren und dann in eine andere Datei einfügen. Auf meinem
Notebook klappt es wunderbar, aber auf meinem PC bekomme ich
einen Laufzeitfehler 1004: „Die Methode ‚Range‘ für das Objekt
‚_Global‘ ist fehlgeschlagen.“
Der Fehler taucht in folgender Zeile auf:
While Range(„A“ & i) datLastUpdated
i ist vom Typ Integer und datLastUpdated ein Datum.

Hi fragme,

Zeilen immer als Long deklarieren wegen Integerproblemen bei Zeilen größer 32xxx und auch aus Schnelligkeitsgründen. Aus dem gleichen Grund auch Spalten immer als Long deklarieren, ja, ich weiß, es gibt meist nur 256, ich sag das trotzdem mit dem Long für Spalten.

Welchen Wert hat i zu dem Zeitpunkt?
Um welche Excel-Versionen geht es?
Zeige mal den kompletten Code, vergesse dabei den pre-Tag nicht, wird hier unter dem Eingabefeld erläutert oder auch massigst im Internet.

PS: Damit Rainer nicht einschläft :smile:)) ist es zwar nett hier mal eine Frage einzustellen, aber erstens kriegt er gleich von mir ein paar leichte VB-Fingerübungen *gg* und wesentlicher, es gibt hier ein Excel/Tabellenkalkuationss-Brett für Excel-Vba Fragen.

Gruß
Reinhard

So, hier mal (fast) der komplette Code (Gas, EUA und Phelix, sind fast 1:1 zu Coael, der Rest ist enthalten). Die Änderungen sind schon berücksichtigt:

Public oAktuell, oAktuellPath, oPowerFutures, oGasFutures, oEmissionFutures, oCoalFutures, oWorkbookPath As String

Sub EEX_Futures_aktualisieren()

oAktuell = Range(„A7“)
oPowerFutures = Range(„A8“)
oGasFutures = Range(„A9“)
oEmissionFutures = Range(„A10“)
oCoalFutures = Range(„A11“)
oWorkbookPath = Range(„E4“)
oAktuellPath = Range(„E5“)

Dim oWorkbook As Workbook
Dim i As Long
Dim datLastUpdated As Date
Dim intLastUpdated As Integer
Dim strPeriode, strPeriodenjahr As String
Dim intPeriodenjahr As Integer
Dim intJahr As Integer

intJahr = Range(„B6“)

Set oWorkbook = Application.Workbooks.Open(oAktuellPath & „“ & oAktuell)

Sheets(„Tabelle1“).Select

datLastUpdated schreiben
i = 1271
While Range(„X“ & i) „“
i = i + 1
Wend
datLastUpdated = Range(„B“ & i)
intLastUpdated = i

Application.EnableEvents = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False

’ Coal Futures:
Set oWorkbook = Application.Workbooks.Open(oWorkbookPath & „“ & oCoalFutures)
Call Coal(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 1)
Call Coal(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 2)
Call Coal(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 3)
oWorkbook.Close

’ Gas Futures:
Set oWorkbook = Application.Workbooks.Open(oWorkbookPath & „“ & oGasFutures)
Call Gas(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 1)
Call Gas(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 2)
Call Gas(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 3)
oWorkbook.Close

’ Emission Futures:
Set oWorkbook = Application.Workbooks.Open(oWorkbookPath & „“ & oEmissionFutures)
Call EUA(datLastUpdated, intLastUpdated, „Dec-“ & intJahr)
Call EUA(datLastUpdated, intLastUpdated, „Dec-“ & intJahr + 1)
oWorkbook.Close

’ Power Futures öffnen
Set oWorkbook = Application.Workbooks.Open(oWorkbookPath & „“ & oPowerFutures)
Call Phelix(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 1)
Call Phelix(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 2)
Call Phelix(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 3)
Call Phelix(datLastUpdated, intLastUpdated, „Jan-“ & intJahr + 4)
oWorkbook.Close

End Sub
’ —
Function Coal(datLastUpdated As Date, intLastUpdated As Integer, strPeriode As String)

’ COAL FUTURES:

Workbooks(oCoalFutures).Activate

Sheets(„FT2Y“).Select
Range(„A2“).Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Sort Key1:=Range(„A3“), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(„A2“).Select
Selection.AutoFilter

Call Auswahl_Periode(strPeriode)

’ Datum nach dem letzten Eintrag suchen:
i = 5
While Cells(i, 1) datLastUpdated
i = i + 1
Wend

Range(„K“ & i).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

Range(„B15“) = strPeriode
Range(„B16“) = strPeriodenjahr
Range(„B17“) = intPeriodenjahr

Workbooks(oAktuell).Activate
strPeriodenjahr = Right(strPeriode, 4)
intPeriodenjahr = CInt(strPeriodenjahr)

If intPeriodenjahr = 2009 Then
strSpalte = „CS“
ElseIf intPeriodenjahr = 2010 Then
strSpalte = „CT“
ElseIf intPeriodenjahr = 2011 Then
strSpalte = „CU“
End If

Sheets(„Tabelle1“).Range(strSpalte & intLastUpdated).Select

ActiveSheet.Paste

End Function
’ —
Sub Auswahl_Periode(strAuswahl As String)

’ Auswahl: Delivery Period = strAuswahl
Selection.AutoFilter Field:=3, Criteria1:=strAuswahl

End Sub

’ —

Nun nennt sich der Fehler: „Anwendungs- oder objektdefinierter Fehler“ und tritt an selber Stelle auf.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

So, da bin ich wieder mit der Lösung:

Ein paar längere Nachforschungen im Netz haben mich darauf gebracht:
http://www.herber.de/forum/archiv/648to652/t651763.htm

Die Arbeitsmappe war wohl irgendwie defekt, obwohl sie auf anderen PCs lief. Hab das Arbeitsblatt in eine neue Mappe kopiert, das Makro auch neu eingefügt und nun gehts.

bye
frag