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

Objektvariable nicht festgelegt

Objektvariable nicht festgelegt
07.11.2003 10:10:13
Torsten K.
Guten morgen beisammen,

aus meiner Anfrage "Daten kopieren aus mehreren Dateien" habe ich aus den Antworten von xXx und Michael Brüggemann versucht, einen Code zu basteln.
Option Explicit

Const strPath As String = _
"Y:\Budget 2004\Turnover_ADMIN\COPA_Upload\"
'Pfad der zu importierenden Dateien


Private Sub cmb_IMSO_Click()
Dim i As Integer
Dim wkbUpload As Workbook  'Dateien, aus welcher die Daten heraus kopiert werden sollen
Dim wksUpload As Worksheet 'WS, aus dem die Daten heraus kopiert werden sollen (Upload")
Dim wkbZiel As Workbook   'Datei, in welche die Daten eingefügt werden sollen (COPA_IMSO)
Dim wksDaten As Worksheet  'WS, in das die Daten eingefügt werden sollen
Dim intNächsteZeile As Integer
Dim intAnzahlZeilen As Integer
If GetPassword = True Then
Application.ScreenUpdating = False
Application.StatusBar = "Der Vorgang wird u.U. einige Minuten dauern. Geduld bitte!"
Set wkbZiel = Workbooks.Open(strPath & "COPA_IMSO", _
password:="", WriteResPassword:="")  'öffnet Zieldatei
Set wksDaten = wkbUpload.Sheets("Daten")
intNächsteZeile = wksDaten.UsedRange.Rows.Count + 1  'ermittelt nächste zu nutzende Zeile
Application.DisplayAlerts = False
With Application.FileSearch
.LookIn = "Y:\Budget 2004\Turnover_ADMIN\COPA_Upload\"
.SearchSubFolders = False
.Filename = "OEM_*"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(i)
Set wksUpload = wkbUpload.Sheets("Upload")
intAnzahlZeilen = wksUpload.UsedRange.Rows.Count
'ermittelt Anzahl zu kopierender Zeilen
wksUpload.Range(Cells(4, 1), Cells(intAnzahlZeilen, 108)).Copy
wksDaten.Range("$A$" & intNächsteZeile).Select
wksDaten.PasteSpecial
'wksDaten.PasteSpecial Destination:=wksDaten.Range("$A$" & intNächsteZeile)
Application.CutCopyMode = False
wkbUpload.Close savechanges:=False
intNächsteZeile = intNächsteZeile + intAnzahlZeilen - 3
'berechnet nächste Zeile im wksDaten
wkbZiel.Save
Next i
End If
End With
wkbZiel.Close
Else
MsgBox "Password ist falsch"
End If
Application.DisplayAlerts = True
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "COPA-Datei wurde aktualsiert"
End Sub

Leider bleibt er an mehreren Stellen hängen mit der Fehlermeldung "Objektvariable oder With-Blockvariable nicht festgelegt", und zwar u.a. an folgenden Stellen, obwohl ich die Objektvariablen definiert habe:
- Set wksDaten = wkbUpload.Sheets("Daten")
- intNächsteZeile = wksDaten.UsedRange.Rows.Count + 1
sowie
- .LookIn = "Y:\Budget 2004\Turnover_ADMIN\COPA_Upload\"
.SearchSubFolders = False
.Filename = "OEM_*"
- For i = 1 To .FoundFiles.Count

Was muß ich denn noch berücksichtigen, damit dieser Code läuft?
In dem Zusammenhang fällt mir ein, daß in dem UsedRange (A4:DDxxxx)nicht alle Spalten mit Werten gefüllt sind. Kann das auch zu Fehlern führen und wenn ja, wie muß ich den Code dann anpassen?
Für Eure Hilfestellungen (und Geduld!) im voraus besten Dank.
Gruß

Torsten

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objektvariable nicht festgelegt
07.11.2003 10:23:26
Harald Kapp
Hallo Torsten,
Du hast zwar wbkupload mit DIM definiert, aber nirgends zugewiesen. Damit erhältst DU folgerichtig den Fehler "Objektvariable nicht definiert".
Und da die Zuweisung
Set wksDaten = wkbUpload.Sheets("Daten")
schief geht, können auch die folgenden Bezüge auf wks nicht funktionieren.

An dieser Stelle ist anzusetzen:

Set wkbZiel = Workbooks.Open(strPath & "COPA_IMSO", _
password:="", WriteResPassword:="") 'öffnet Zieldatei
Set wksDaten = wkbUpload.Sheets("Daten") ' <- was genau soll hier passieren?

Ich vermute ja, dass Du aus dem aktiven Workbook die Daten in die Zieldatei übertragen möchtest. Dann müsste die betreffende Zeile oben geändertt werden in
Set wksDaten = ActiveWorkbook.Sheets("Daten")

Gruß Harald
Anzeige
AW: Objektvariable nicht festgelegt
07.11.2003 10:49:12
Torsten K.
Hallo Harald,

schönen Dank für Deine rasche Antwort.
In der Zwischenzeit habe ich auch von Michael Brüggemann einen weiteren Hinweis bekommen, sodaß ich jetzt einen kleinen Schritt weiter bin, denn nunmehr bleibe ich hier hängen

=> wksUpload.Range(Cells(4, 1), Cells(intAnzahlZeilen, 108)).Copy

mit der Fehlermeldung "Methode Range für Objekt _Worksheet ist fehlgeschlagen". Könnte das damit zu tun haben, daß innerhalb des Ranges, der hier kopiert werden soll (A:DD), nicht alle Spalten Werte aufweisen?

Hier nochmal der aktuelle Stand meines Codes:

Option Explicit

Const strPath As String = _
"Y:\Budget 2004\Turnover_ADMIN\COPA_Upload\"
'Pfad der zu importierenden Dateien


Private Sub cmb_IMSO_Click()
Dim i As Integer
Dim wkb As Workbook
Dim wkbUpload As Workbook  'Dateien, aus welcher die Daten heraus kopiert werden sollen
Dim wksUpload As Worksheet 'WS, aus dem die Daten heraus kopiert werden sollen (Upload")
Dim wkbZiel As Workbook   'Datei, in welche die Daten eingefügt werden sollen (COPA_IMSO)
Dim wksDaten As Worksheet  'WS, in das die Daten eingefügt werden sollen
Dim intNächsteZeile As Integer
Dim intAnzahlZeilen As Integer
If GetPassword = True Then
Application.ScreenUpdating = False
Application.StatusBar = "Der Vorgang wird u.U. einige Minuten dauern. Geduld bitte!"
Set wkbZiel = Workbooks.Open(strPath & "COPA_IMSO", _
password:="", WriteResPassword:="")  'öffnet Zieldatei
Set wksDaten = wkbZiel.Sheets("Daten")
intNächsteZeile = wksDaten.UsedRange.Rows.Count + 1  'ermittelt nächste zu nutzende Zeile
Application.DisplayAlerts = False
With Application.FileSearch
.LookIn = "Y:\Budget 2004\Turnover_ADMIN\COPA_Upload\"
.SearchSubFolders = False
.Filename = "OEM_*"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(i)
Set wkb = Activeworkbook
Set wksUpload = wkb.Sheets("Upload")
intAnzahlZeilen = wksUpload.UsedRange.Rows.Count
'ermittelt Anzahl zu kopierender Zeilen
wksUpload.Range(Cells(4, 1), Cells(intAnzahlZeilen, 108)).Copy
wksDaten.Range("$A$" & intNächsteZeile).Select
wksDaten.PasteSpecial
'wksDaten.PasteSpecial Destination:=wksDaten.Range("$A$" & intNächsteZeile)
Application.CutCopyMode = False
wkbUpload.Close savechanges:=False
intNächsteZeile = intNächsteZeile + intAnzahlZeilen - 3
'berechnet nächste Zeile im wksDaten
wkbZiel.Save
Next i
End If
End With
wkbZiel.Close
Else
MsgBox "Password ist falsch"
End If
Application.DisplayAlerts = True
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "COPA-Datei wurde aktualsiert"
End Sub


Gruß
Torsten
Anzeige
AW: Objektvariable nicht festgelegt
07.11.2003 11:13:54
Harald Kapp
Hallo Torsten,
Copy sollte unabhängig davon funktionieren, ob der Bereich Werte enthälz oder nicht.
Folgender Testcode läuft bei mir ohne Fehlermeldung in einem völlig leeren tabellenblatt:


Sub test()
Dim bla
Set bla = ActiveWorkbook.Sheets("Tabelle1")
bla.Range(Cells(1, 1), Cells(2, 2)).Copy
End Sub


Ich vermute eher, es liegt an den Parametern von Range().

Zunächst einmal solltest Du prüfen, ob intAnzahlZeilen einen gültigen und richtigen Wert enthält. Dann vielleicht erst mal mit festen Werten testen.

Sorry, sonst fällt mir dazu erst mal nichts weiter ein.
Gruß Harald

Anzeige
AW: Objektvariable nicht festgelegt
07.11.2003 12:31:27
Torsten K.
Hallo Harald,

ich habe jetzt die Werte von intAnzahlZeilen in der Programmzeile

=> wksUpload.Range(Cells(4, 1), Cells(intAnzahlZeilen, 108)).Copy

geprüft und festgestellt, daß sie richtig sind. Die Variable enthält genau die Anzahl an Zeilen, die aus dem wksUpload des Activeworkbooks kopiert werden sollen. Ich bin auch Deinem Rat gefolgt und habe das ganze mal mit festem Wert (anstatt Variable) getestet: Auch dann bleibt Excel an der bewußten Zeile mit der gleichen Fehlermeldung hängen. Daß heißt doch, daß es nicht an den Parametern liegen kann, oder?
Vielleicht sollte ich Michael Brüggemann ansprechen, von dem dieser Teil des Makros stammt?! Ich weiß sonst nicht weiter und ich benötige dieses Programm, weil ich sonst wie im Vorjahr erheblichem manuellen Kopieraufwand entgegensehen darf.

Gruß
Torsten
Anzeige
AW: Objektvariable nicht festgelegt
07.11.2003 14:24:16
Michael Brueggemann
Hallo Torsten,

der folgende Code laeuft bei mir. Ich hoffe, bei Dir auch.

With Application.FileSearch
.LookIn = strPath
.SearchSubFolders = False
.Filename = "OEM_*"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Set wkb = Workbooks.Open(Filename:=.FoundFiles(i))
Set wksUpload = wkb.Sheets("Upload")
intAnzahlZeilen = wksUpload.UsedRange.Rows.Count
'ermittelt Anzahl zu kopierender Zeilen
wksUpload.Range(Cells(4, 1), Cells(intAnzahlZeilen, 108)).Copy
wksDaten.Range("$A$" & intNächsteZeile).PasteSpecial
'wksDaten.PasteSpecial Destination:=wksDaten.Range("$A$" & intNächsteZeile)
Application.CutCopyMode = False
wkb.Close savechanges:=False
intNächsteZeile = intNächsteZeile + intAnzahlZeilen - 3
Next i
End If

End With

CIAO
Michael
Anzeige
Schönen Dank Euch beiden ! (mit Text)
07.11.2003 14:50:20
Torsten K.
Hallo Michael,

jetzt haben wir uns wohl gekreuzt: Ich wollte gerade meine Lösung in den Thread stellen, als ich gesehen habe, daß Du einige Minuten vor mir warst. Ich habe selbst so lange an dem Code herunmgefeilt, bis ich zur gleichen Lösung wie Du kam. Das ist für einen Neuling ein echtes Erfolgserlebnis! :-))
Nochmals Dank an Euch beide und schönes Wochenende.

Gruß
Torsten

64 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige