2008-10-17 9 views
32

Ich habe ein Excel VBA-Makro geschrieben, das Daten aus einer HTML-Datei importiert (lokal gespeichert), bevor Berechnungen für die Daten ausgeführt werden.Relative anstelle von absoluten Pfaden in Excel VBA

Im Moment ist die HTML-Datei mit einem absoluten Pfad bezeichnet wird:

Workbooks.Open FileName:="C:\Documents and Settings\Senior Caterer\My Documents\Endurance Calculation\TRICATEndurance Summary.html" 

Jedoch habe ich einen relativen Pfad verwenden möchten darauf verweisen auf absolute Gegensatz (dies ist, weil ich das verteilende Tabelle für Kollegen, die möglicherweise nicht die gleiche Ordnerstruktur verwenden). Da die HTML-Datei und die Excel-Tabelle im selben Ordner liegen, hätte ich nicht gedacht, dass dies schwierig wäre, aber ich bin einfach nicht in der Lage, es zu tun. Ich habe im Internet gesucht und die vorgeschlagenen Lösungen sind alle sehr kompliziert erschienen.

Ich benutze Excel 2000 und 2002 bei der Arbeit, aber wie ich es verteilen möchte, würde ich wollen, dass es mit so vielen Versionen von Excel wie möglich funktioniert.

Alle Vorschläge dankbar erhalten.

Antwort

50

Nur um zu klären, was yalestar sagte, dies wird Ihnen den relativen Pfad geben:

Workbooks.Open FileName:= ThisWorkbook.Path & "\TRICATEndurance Summary.html" 
+0

Vielen Dank. Das hat perfekt funktioniert. – Gene

+0

Ich hatte ein ähnliches Problem mit Excel für Mac. Und herausgefunden, dass für Mac die Pfade mit ':' anstelle von '\' angegeben werden müssen. – remudada

+0

Ein anderer nützlicher Leckerbissen für Windows, Sie können Orte weiter oben im Pfad angeben, indem Sie \ .. \ hinzufügen. Ein Beispiel wäre: Workbooks.Open Dateiname: = ThisWorkbook.Path & "\ .. \ MyFile.txt" wenn Sie möchten Greifen Sie auf eine Datei namens MyFile.txt im Ordner "Endurance Calculation" zu – KayakinKoder

17

Sie könnten einer von ihnen für den relativen Pfad root verwenden:

ActiveWorkbook.Path 
ThisWorkbook.Path 
App.Path 
2

ich glaube, das Problem ist, dass ohne Pfad Öffnen der Datei wird nur funktionieren, wenn Ihr „aktuelle Verzeichnis“ richtig eingestellt ist.

Versuchen Sie, "Debug.Print CurDir" im Direktfenster eingeben - das sollte den Speicherort für Ihre Standarddateien anzeigen, wie in Extras ... Optionen festgelegt.

Ich bin mir nicht sicher, ob ich es ganz glücklich bin, vielleicht, weil es so etwas wie ein Vermächtnis VB-Befehl ist, aber man kann dies tun:

ChDir ThisWorkbook.Path 

Ich glaube, ich würde es vorziehen, Thisworkbook zu verwenden. Pfad zum Erstellen eines Pfades zur HTML-Datei. Ich bin ein großer Fan des Filesystem in der Scripting Runtime (die immer installiert zu sein scheint), so würde ich glücklicher sein, so etwas zu tun (nach einen Verweis auf Microsoft Scripting Runtime Einstellung):

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 
+0

Ich bin nicht so sicher, dass die Scripting Runtime "immer installiert" ist. Bei der Arbeit verließen sich Datenbank-Updates für unser Produkt darauf, dass es installiert wurde (wir verwendeten es zum Öffnen von SQL-Skriptdateien), aber wir haben schnell herausgefunden, dass scrrun.dll entweder nicht vorhanden oder in einigen Fällen nicht registriert war. –

+0

Wenn Sie mit Office arbeiten, dann wird es ja sein, nur MSDE/SQL Express installieren, vielleicht nicht.Wie Sie gesagt haben, ist es nicht unbedingt von Windows standardmäßig registriert. Aber Office verwendet es. –

+0

alle Versionen von IE über etwas Altes wie IE6 haben es, iirc. Und ich denke, dass .NET Framework 4+ es auch hat (könnte falsch sein!). IE ist nicht immer mehr mit Windows installiert (danke EU :)), und .NET 4 ist immer noch "relativ" neu, also kann es in der Tat nicht auf der aktuellen Seite stehen. –

1

Sie mehr Flexibilität, um Ihren Benutzern zur Verfügung stellen kann durch Knopf Browser bieten ihnen

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 leicht erreichen. Geprüfter Code

-1

Ich denke, das kann helfen. Unter Macro überprüft, ob ein Ordner existiert, wenn er dann nicht den Ordner erstellt und in diesem Ordner sowohl in xls als auch in pdf-Format speichert. Es kommt vor, dass der Ordner mit den beteiligten Personen geteilt wird, so dass jeder aktualisiert wird.

Sub PDF_laudo_e_Prod_SP_Sem_Ajuste_Preco() 
' 
' PDF_laudo_e_Prod_SP_Sem_Ajuste_Preco Macro 
' 

' 


Dim MyFolder As String 
Dim LaudoName As String 
Dim NF1Name As String 
Dim OrigFolder As String 

MyFolder = ThisWorkbook.path & "\" & Sheets("Laudo").Range("C9") 
LaudoName = Sheets("Laudo").Range("K27") 
NF1Name = Sheets("PROD SP sem ajuste").Range("Q3") 
OrigFolder = ThisWorkbook.path 

Sheets("Laudo").Select 
Columns("D:P").Select 
Selection.EntireColumn.Hidden = True 

If Dir(MyFolder, vbDirectory) <> "" Then 
Sheets("Laudo").ExportAsFixedFormat Type:=xlTypePDF, filename:=MyFolder & "\" & LaudoName & ".pdf", Quality:=xlQualityMinimum, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
False 

Sheets("PROD SP sem ajuste").ExportAsFixedFormat Type:=xlTypePDF, filename:=MyFolder & "\" & NF1Name & ".pdf", Quality:=xlQualityMinimum, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
False 

ThisWorkbook.SaveAs filename:=MyFolder & "\" & LaudoName 

Application.DisplayAlerts = False 

ThisWorkbook.SaveAs filename:=OrigFolder & "\" & "Entregas e Instrucao Barter 2015 - beta" 

Application.DisplayAlerts = True 

Else 
MkDir MyFolder 
Sheets("Laudo").ExportAsFixedFormat Type:=xlTypePDF, filename:=MyFolder & "\" & LaudoName & ".pdf", Quality:=xlQualityMinimum, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
False 

Sheets("PROD SP sem ajuste").ExportAsFixedFormat Type:=xlTypePDF, filename:=MyFolder & "\" & NF1Name & ".pdf", Quality:=xlQualityMinimum, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
False 

ThisWorkbook.SaveAs filename:=MyFolder & "\" & LaudoName 

Application.DisplayAlerts = False 

ThisWorkbook.SaveAs filename:=OrigFolder & "\" & "Entregas e Instrucao Barter 2015 - beta" 

Application.DisplayAlerts = True 

End If 

Sheets("Laudo").Select 
Columns("C:Q").Select 
Selection.EntireColumn.Hidden = False 
Range("A1").Select 

End Sub