Ich habe ein Excel-VBA-Makro geschrieben, mit dem Daten aus einer (lokal gespeicherten) HTML-Datei importiert werden, bevor mit den Daten Berechnungen durchgeführt werden.
Momentan wird auf die HTML-Datei mit einem absoluten Pfad verwiesen:
Workbooks.Open FileName:="C:\Documents and Settings\Senior Caterer\My Documents\Endurance Calculation\TRICATEndurance Summary.html"
Ich möchte jedoch einen relativen Pfad verwenden, um darauf zu verweisen, und keinen absoluten Pfad (dies liegt daran, dass ich die Tabelle an Kollegen verteilen möchte, die möglicherweise nicht dieselbe Ordnerstruktur verwenden). Da sich die HTML-Datei und die Excel-Tabelle im selben Ordner befinden, hätte ich nicht gedacht, dass dies schwierig sein würde, aber ich bin einfach nicht in der Lage, dies zu tun. Ich habe im Internet gesucht und die vorgeschlagenen Lösungen sind alle sehr kompliziert erschienen.
Ich verwende Excel 2000 und 2002 bei der Arbeit, aber da ich beabsichtige, es zu verteilen, möchte ich, dass es mit so vielen Versionen von Excel wie möglich funktioniert.
Anregungen dankbar erhalten.
Um zu verdeutlichen, was yalestar gesagt hat, erhalten Sie den relativen Pfad:
Workbooks.Open FileName:= ThisWorkbook.Path & "\TRICATEndurance Summary.html"
Sie können eine dieser Optionen für die relative Pfadwurzel verwenden:
ActiveWorkbook.Path
ThisWorkbook.Path
App.Path
Ich denke, das Problem ist, dass das Öffnen der Datei ohne Pfad nur funktioniert, wenn Ihr "aktuelles Verzeichnis" richtig eingestellt ist.
Versuchen Sie, "Debug.Print CurDir" in das Direktfenster einzugeben. Dort sollte der Speicherort für Ihre Standarddateien angezeigt werden, wie unter Extras ... Optionen festgelegt.
Ich bin mir nicht sicher, ob ich damit ganz zufrieden bin, vielleicht, weil es ein bisschen wie ein Legacy-Befehl ist VB), aber Sie könnten dies tun:
ChDir ThisWorkbook.Path
Ich denke, ich würde lieber ThisWorkbook.Path verwenden, um einen Pfad zur HTML-Datei zu erstellen. Ich bin ein großer Fan von FileSystemObject in der Scripting Runtime (die immer installiert zu sein scheint), daher würde ich gerne Folgendes tun (nachdem ich einen Verweis auf Microsoft Scripting Runtime festgelegt habe):
Const HTML_FILE_NAME As String = "my_input.html"
With New FileSystemObject
With .OpenTextFile(.BuildPath(ThisWorkbook.Path, HTML_FILE_NAME), ForReading)
' Now we have a TextStream object that we can use to read the file
End With
End With
wenn das aktuelle Verzeichnis des Betriebssystems der Pfad der von Ihnen verwendeten Arbeitsmappe ist, würde Workbooks.Open FileName:= "TRICATEndurance Summary.html"
ausreichen. Wenn Sie mit dem Pfad rechnen, können Sie das aktuelle Verzeichnis als .
und dann \
bezeichnen, um festzustellen, dass sich die Datei in diesem Verzeichnis befindet, und falls Sie das aktuelle Verzeichnis des Betriebssystems ändern müssen Zum Pfad Ihrer Arbeitsmappe können Sie ChDrive
und ChDir
verwenden, um dies zu tun.
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
Workbooks.Open FileName:= ".\TRICATEndurance Summary.html"
Sie können Ihren Benutzern mehr Flexibilität bieten, indem Sie ihnen Browser-Schaltfläche zur Verfügung stellen
Private Sub btn_browser_file_Click()
Dim xRow As Long
Dim sh1 As Worksheet
Dim xl_app As Excel.Application
Dim xl_wk As Excel.Workbook
Dim WS As Workbook
Dim xDirect$, xFname$, InitialFoldr$
InitialFoldr$ = "C:\"
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Application.DefaultFilePath & "\"
.Title = "Please select a folder to list Files from"
.InitialFileName = InitialFoldr$
.Show
Range("H13").Activate
If .SelectedItems.Count <> 0 Then
xDirect$ = .SelectedItems(1) & "\"
Range("h12").Value = xDirect$
xFname$ = Dir(xDirect$, 7)
Do While xFname$ <> ""
If (Format(FileDateTime(xDirect$ & "\" & xFname$), "MM/DD/YYYY") > Format(Range("H10").Value, "MM/DD/YYYY")) Then
ActiveCell.Offset(xRow) = xFname$
xRow = xRow + 1
xFname$ = Dir
Else
xFname$ = Dir
xRow = xRow
End If
Loop
End If
End With
mit diesem Code können Sie dies auf einfache Weise erreichen. Geprüfter Code