Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1048to1052
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

Application.Workbooks.Open(KplName) versagt

Application.Workbooks.Open(KplName) versagt
11.02.2009 13:48:00
Matthias
Hallo miteinander,
ich habe ein Problem mit dem VBA-gesteuertem Öffnen einer Excel-Datei:

Application.Workbooks.Open(KplName)

oder


Set wb = Application.Workbooks.Open(KplName)

schlägt zunächst NICHT fehl beim Aufrufen aus einem Makro.
Der gleiche Befehl aus einem anderen File (Excel-AddIn) klappt hingegen. Auch im Debug mit Stop-Punkt wird der "KplFileName" richtig angezeigt und die Datei ist auch vorhanden. Dies wurde alles zuvor geprüft.
Die Excel-Datei zeigt sich letztlich aber nicht als geöffnet und wird auch nicht geöffnet. Da keine Fehlermeldung beim "Application.Workbooks.Open" kommt, wird erst ein Fehler erzeugt, wenn ich dann später auf eine Zelle dieser zu öffnenden Datei zugreife. Öffne ich die Excel-Datei hingegen manuell, kommt das Makro zum Auslesen der Zellen aus der anderen Excel-Datei ohne Probleme durch.
Hinweis: Meine Variablen enthalten beim öffnen des Files den kpl. Pfad + FileName, später beim Zugriff auf die Zellen des anderen Files nur noch den FileName.
Wer kann mir sagen/helfen, warum das "Application.Workbooks.Open" nicht funktioniert und auch keine Fehlermeldung bringt.
Gruß, Matthias

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Application.Workbooks.Open(KplName) versagt
11.02.2009 14:03:00
Ramses
Hallo
kannst du mal den ganzen Code zum öffnen mit den Variablen zeigen ?
Denn eine Erklärung gibt es eigentlich so nicht.
Gruss Rainer
AW: Application.Workbooks.Open(KplName) versagt
11.02.2009 14:14:00
Matthias
Hallo Rainer,
hier der Code:

Public Function HoleWert(ByVal WoherXLS As String, ByVal Datum As String, ByVal ProjektNummer  _
As String, ByVal StartZeile As Long, ByVal DatumSpalte As Integer, ByVal ProjektZeileBezug As Long, ByVal ProjektSpalteStart As Integer) As Currency
Dim Verz As String, KplName As String, DatumWert As Date, JahrTab As String
Dim LeereZeilen As Integer, strTemp As String, DatumSuche As Date
Dim strTmp01 As String, strTmp02 As String, strTmp03 As String, strTmp04 As String
Dim I As Long, Z As Long, S As Long, E As Long, wb As Workbook
Const MaxLeereZeilen = 3
HoleWert = 0
'On Error GoTo ExitHoleWert
Verz = ActiveWorkbook.Path
If Right$(Verz, 1)  "\" Then Verz = Verz & "\"
KplName = Verz & WoherXLS
strTemp = Dir(KplName)
If strTemp  "" Then
For E = 1 To 20
If XLSisOpen(WoherXLS) Then Exit For
Set wb = Application.Workbooks.Open(KplName)
Next E
If IsDate(Datum) Then
DatumWert = CDate(Datum)
JahrTab = Trim(Str(Year(DatumWert)))
For I = StartZeile To 40000
strTmp01 = Application.Workbooks(WoherXLS).Worksheets(JahrTab).Cells(I, 1).Value
strTmp02 = Application.Workbooks(WoherXLS).Worksheets(JahrTab).Cells(I, 2).Value
strTmp03 = Application.Workbooks(WoherXLS).Worksheets(JahrTab).Cells(I, 3).Value
strTmp04 = Application.Workbooks(WoherXLS).Worksheets(JahrTab).Cells(I, 4).Value
If strTmp01 = "" And strTmp02 = "" And strTmp03 = "" And strTmp04 = "" Then
LeereZeilen = LeereZeilen + 1
Else
LeereZeilen = 0
strTemp = Application.Workbooks(WoherXLS).Worksheets(JahrTab).Cells(I, DatumSpalte). _
Value
If IsDate(strTemp) Then
DatumSuche = CDate(strTemp)
If DatumSuche = DatumWert Then
LeereZeilen = MaxLeereZeilen + 1
For E = ProjektSpalteStart To 249
strTemp = Trim(Application.Workbooks(WoherXLS).Worksheets(JahrTab).Cells( _
ProjektZeileBezug, E).Value)
If strTemp = "" Then
Exit For
Else
If UCase(Trim(ProjektNummer)) = UCase(strTemp) Then
strTemp = Trim(Application.Workbooks(WoherXLS).Worksheets(JahrTab).Cells(I,  _
E).Value)
If IsNumeric(strTemp) Then HoleWert = CCur(strTemp)
Exit For
End If
End If
Next E
End If
End If
End If
If LeereZeilen >= MaxLeereZeilen Then Exit For
Next I
'HoleWert = CCur(JahrTab)
'MsgBox "WoherXLS: " & Chr(9) & WoherXLS & vbCrLf & "KplName: " & Chr(9) & KplName &  _
vbCrLf & "Datum: " & Chr(9) & Chr(9) & Datum & vbCrLf & "ProjektNummer: " & Chr(9) & ProjektNummer & vbCrLf & "DatumWert: " & Chr(9) & DatumWert & vbCrLf & "JahrTab: " & Chr(9) & Chr(9) & JahrTab, vbInformation
' HoleWert = Application.Workbooks(WoherXLS).Worksheets(BlattName).Cells(Zeile, Spalte). _
Value
Else
MsgBox "Das übergebene Datum:" & vbCrLf & Chr(34) & Datum & Chr(34) & vbCrLf & "ist kein  _
Datum!", vbCritical + vbOKOnly, "FEHLER AUFGETRETEN"
End If
Else
MsgBox "Die Datei:" & vbCrLf & Chr(34) & KplName & Chr(34) & vbCrLf & "exisiert nicht!",  _
vbCritical + vbOKOnly, "FEHLER AUFGETRETEN"
End If
Exit Function
ExitHoleWert:
MsgBox "Ein Fehler bei der Ausführung ist aufgetreten!" & vbCrLf & vbCrLf & "Fehler-Code: " &  _
Chr(9) & "#" & Mid$(Str$(Err.Number), 2) & vbCrLf & "Ausgelöst von: " & Chr(9) & Err.Source & vbCrLf & "Beschreibung: " & Chr(9) & Err.Description & vbCrLf & vbCrLf & "Aufgetreten im:" & vbCrLf & "Dokument:" & Chr(9) & Chr(34) & ActiveWorkbook.Name & Chr(34) & vbCrLf & "Tabellenblatt: " & Chr(9) & Chr(34) & ActiveSheet.Name & Chr(34), vbCritical + vbOKOnly, "FEHLER AUFGETRETEN"
End Function


In der Excel-Zelle steht dann eine Formel:


=holewert(DI$2;$DC15;DI$1;9;2;7;9)


Damit hole ich aus einer anderen Excel-Datei aus einem Sheet (z. B. "2009") einen speziellen Wert, der zum übergebenen Datum und richtigen Projektnummer gehört.
Gruß, Matthias

Anzeige
AW: Application.Workbooks.Open(KplName) versagt
11.02.2009 17:12:00
Ramses
Hallo
Nachbauen werde ich das nicht :-)
Aber beim durchsehen sind mir 2 Knackpunkte aufgefallen
For E = 1 To 20
If XLSisOpen(WoherXLS) Then Exit For
Set wb = Application.Workbooks.Open(KplName)
Next E
Der Sinn dieser Schleife ist nicht nachvollziehbvar und eigentlich sinnlos
Was passiert in der Funktion "XLSISOPEN" ?
Wenn die erste Prüfung bereits WAHR ist, dann wird die SET-Anweisung nicht mehr ausgeführt und der komplette nachfolgende code kracht weil
1. die Variable "WB" keinen Wert mehr hat
2. und die Variable "woherxls" dann natürlich keinen Sinn mehr macht, weil die Datei ja nicht geöffnet ist wenn XLSISOPEN den Wert FALSCH zurückliefert und du im kompletten nachfolgenden Code die Variable WB nicht mehr verwendest.
Der ganze Code funktioniert eigentlich nur durch Zufall, nämlich dann wenn deine Datei zufällig gerade offen ist
Also WENN schon eine Workbook.Variable "WB", DANN MUSS das im ganzen code im nachhinein verwendet werden
strTmp01 = wb.Worksheets(JahrTab).Cells(I, 1).Value
Das muss zuerst mal gelöst werden, dann können wir weitersehen
Gruss Rainer
Anzeige
Ergänzung: Application.Workbooks.Open
11.02.2009 14:09:00
Matthias
Das Application.Workbooks.Open wird aus einer Funktion:

Public Function HoleWert(ByVal WoherXLS As String, ByVal Datum As String, ByVal ProjektNummer As String, ByVal StartZeile As Long, ByVal DatumSpalte As Integer, ByVal ProjektZeileBezug As Long, ByVal ProjektSpalteStart As Integer) As Currency

direkt aus einer Excel-Zelle aufgerufen. Hier funktioniert es nicht eine Excel-Datei zusätzlich zu öffnen, um gezielt Werte auszulesen.
Wird dieselbe Public Function direkt aus einer VBA-TestRoutine aufgerufen, dann öffnet sich die das andere Excel-Dokument wie vorgesehen.
Wie kann ich Daten aus der externen Excel-Datei holen, wenn
a) ich das ganze über eine Excel-Funktion machen will UND
b) diese Datei evtl. (noch) nicht geöffnet ist?
Gruß, Matthias

Anzeige

182 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige