Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1636to1640
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

Laufzeitfehler 9

Laufzeitfehler 9
16.08.2018 08:58:05
Martin
Hallo,
ich verzweifle langsam. Bin relativer VBA Neuling und versuche verschiedene Makros aus VBA Büchern nachzustellen. Ich nutze Excel 2010.
Folgende Wunschkonstellation:
Ich habe 2 Excel Dateien, DateiA.xlsx mit Tabellenblatt "Quelle" und DateiB.xlsm mit Tabellenblatt "Ziel".
In der Tabelle "Quelle" steht in Feld A1 einfach nur "abc".
Diesen Text möchte ich mit folgendem Befehl aus DateiA.xlsx Tabellenblatt "Quelle" A1 nach DateiB.xlsm Tabellenblatt "Ziel" nach A1 kopieren.
Workbooks("D:\VBA\DateiA.xlsx").Sheets("Quelle").Range(Cells(1, 1), Cells(1, 1)).Value.Copy _
Workbooks("D:\VBA\DateiB.xlsm").Sheets("Ziel").Range(Cells(1, 1), Cells(1, 1))
Ich würde hier gerne mit Cells arbeiten, um das ganz über Variablen nachher etwas variabler gestalten zu können. Ich habe aber auch mal folgendes probiert mit gleicher Meldung.
Workbooks("D:\VBA\DateiA.xlsx").Sheets("Quelle").Range("A1").Value.Copy _
Workbooks("D:\VBA\DateiB.xlsm").Sheets("Ziel").Range("A1")
Der Aufruf des VBA Codes findet aus der geöffneten DateiB.xlsm statt.
Muss DataA.xlsx erst geöffnet werden, damit der Copy Befehl funktioniert? Das steht im Buch so nämlich nicht drin.
Um es innerhalb einer Arbeitsmappe mal grundsätzlich auszuprobieren, ohne das Problem _
mit der ungeöffneten 2. Excel Datei zu haben, habe ich in der Datei DateiB.xlsm mal das _ Tabellenblatt "Tabelle1" angelegt und dort in A1 "abc" eingetragen. Mit folgendem simplen Code wollte ich ausprobieren, ob ich den Inhalt von A1 mit debug.print ausgeben kann. Auch da kommt leider der Laufzeit 9 Fehler... Ich kapiers einfach nicht...

Sub Verarbeitung()
Dim a As String
a = Workbooks("D:\VBA\DateiB.xlsm").Sheets("Tabelle1").Cells(1, 1).Value
Debug.Print a
End Sub

Hoffe mir kann jemand weiterhelfen.
Die Sache mit den 2 Dateien und den Cells Angaben in der Range wäre das Optimum, aber ich würde es gerne überhaupt erst mal ans Laufen kriegen...

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 9
16.08.2018 09:02:22
Werner
Hallo Martin,
das hier ist quatsch.
Workbooks("D:\VBA\DateiA.xlsx").Sheets("Quelle").Range(Cells(1, 1), Cells(1, 1)).Value.Copy _
Warum denn eine Range, wenn du nur eine Zelle kopieren willst:
Workbooks("D:\VBA\DateiA.xlsx").Sheets("Quelle").Cells(1, 1)).Copy _
Und ja, die Datei muss geöffnet sein. Mit VBA kannst du nur auf geöffnete Dateien zugreifen. Du mußt die Datei mittels VBA-Code öffnen, deine Zelle kopieren und die Datei anschließend wieder schließen.
Gruß Werner
AW: Laufzeitfehler 9
16.08.2018 09:28:28
Martin
Hallo Werner,
deshalb mit Range, weil ich erstmal nur zu Testzwecken nur mit 1 Zelle Arbeite. Das eigentliche Makro soll sich nachher auf mehrere Zellen beziehen.
Das aber selbst dieses einfache Makro innerhalb einer Datei nicht funktioniert und der Laufzeitfehler 9 kommt kapier ich nicht
Sub Verarbeitung()
Dim a As String
a = Workbooks("D:\VBA\DateiB.xlsm").Sheets("Tabelle1").Cells(1, 1).Value
Debug.Print a
End Sub

Anzeige
AW: Laufzeitfehler 9
16.08.2018 09:32:48
Roland
Hallo Martin,
also ich bekomme keinen Fehler, wenn ich das Makro starte...
Sub Verarbeitung()
Dim a As String
a = ThisWorkbook.Sheets("Tabelle1").Cells(1, 1).Value
Debug.Print a
End Sub

AW: Laufzeitfehler 9
16.08.2018 10:19:46
Martin
Hallo Roland,
ich hatte in einem anderen Beitrag schon gelesen, dass auf manchen Rechner mit demselben Code der Laufzeitfehler 9 kommt und auf anderen nicht...
AW: Laufzeitfehler 9
16.08.2018 09:36:45
Hajo_Zi
Hallo Werner,
Du kannst aus einer geschlossenen Datei nur kompliziert was auslesen, benutze Formel.
Option Explicit
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, sourceSheet As String, _
SourceRange As String, TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'? t.ramel@mvps.org
' wird durch die HoleDaten aufgerufen
Dim strQuelle       As String
Dim Zeilen          As Long
Dim Spalten         As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range( _
SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ung?ltig!", vbExclamation, "Get data from  _
closed Workbook"
GetDataClosedWB = False
End Function
Public Sub HoleDaten()
' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
Dim Pfad            As String
Dim Dateiname       As String
Dim Blatt           As String
Dim Bereich         As String
Dim Ziel            As Range
Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
Dateiname = "Beispiel Forum 30.xlsm" ' aus welcher Datei soll er holen?
Blatt = "Tabelle1"  ' von welcher Tabelle soll er holen?
Bereich = "A1:B9"   ' aus welchem Bereich soll er holen?
Set Ziel = ActiveSheet.Range("A1")  ' in welchen Bereich soll er kopieren? Genauer gesagt:  _
Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
MsgBox "Daten importiert"
End If
End Sub

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Anzeige
AW: Laufzeitfehler 9
16.08.2018 09:31:10
Daniel
Hi
Wie schon gesagt, wenn du mit VBA Dateien bearbeiten willst, müssen diese geöffnet sein.
Dann reicht es aber, bei Workbooks nur den Dateinamen abzugeben.
Workbooks("DateiA.xlsx").Sheets("Quelle").Range("A1").Value.Copy _
Workbooks("DateiB.xlsm").Sheets("Ziel").Range("A1")

Gruß Daniel
AW: Laufzeitfehler 9
16.08.2018 10:35:58
Martin
Klappt aber leider auch nicht wenn beide Dateien geöffnet sind...
Ist der Copy Befehl formal so denn korrekt? Wenn Ja, dann kapier ich den Fehler 9 nicht...
AW: Laufzeitfehler 9
16.08.2018 10:45:28
Daniel
Hi
Schau dir mal die Kopfzeile des Excelfensters an.
Oder gib mal folgendes im Direktfenster ein: ?Worksheets(1).name
Steht dort der Dateiname mit oder ohne Dateierweiterung?
Entsprechend musst du es auch in deinen Code anwenden.
Das hängt an einer Einstellung in deinem Explorer, ob Dateinamen mit oder ohne Erweiterung angezeigt werden.
Der Copy-Befehl ist korrekt.
Laufzeitfehler 9 weist darauf hin, dass du einen Datei- oder Worksheetnamen falsch geschrieben hast.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 9
16.08.2018 11:03:33
Martin
Hallo Daniel,
Das sind die Ergebnisse aus dem Direktfenster.
?Worksheets(1).name
Tabelle1
?Workbooks(1).name
DateiA.xlsm
Also alles korrekt. Hab auch schon zig mal geguckt ob ich mich verschrieben habe, hab ich aber nicht, wie man an dem Ergebnis aus dem Direktfenster sehen kann. Echt kacke
AW: Laufzeitfehler 9
16.08.2018 11:16:08
Daniel
Was noch falsch ist, ist das Cells(..).Value.Copy
Richtig wäre nur Cells(...).Copy
Man kopiert in Excel die ganze Zelle, nicht nur ihren Wert
Gruß Daniel
AW: Laufzeitfehler 9
16.08.2018 11:42:12
Martin
Danke dir.
Aber auch dann kommt der Fehler.
Bei mir tut es ja leider nicht mal dieser simple Code...
Da krieg ich ja schon den 9er Fehler...
Sub Verarbeitung()
Dim a As String
a = Workbooks("D:\VBA\Thomas\Neu\irgendwie.xlsm").Sheets("Tabelle1").Cells(1, 1).Value
Debug.Print a
End Sub

Anzeige
AW: Laufzeitfehler 9
17.08.2018 09:17:23
Daniel
Hatten wir dir nicht schon erklärt, dass die Datei irgendwie.xlsm geöffnet sein muss und dass man bei Workbooks nur den Dateinamen hin schreibt, ohne den Pfad davor?
Sub Verarbeitung()
Dim a As String
Workbooks.Open "D:\VBA\Thomas\Neu\irgendwie.xlsm"
a = Workbooks("irgendwie.xlsm").Sheets("Tabelle1").Cells(1, 1).Value
Workbooks("irgendwie.xlsm").close
Debug.Print a
End Sub
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige