2008-10-17 16 views
32

Napisałem makro Excel VBA, który importuje dane z pliku HTML (przechowywane lokalnie) przed wykonaniem obliczeń na danych.Względne zamiast bezwzględnych ścieżek w programie Excel VBA

Obecnie plik HTML mowa bezwzględną ścieżkę:

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

Jednak chcę użyć ścieżki względnej odnieść się do niego, a nie absolutny (to dlatego, że chcę, aby rozpowszechniać arkusz kalkulacyjny do kolegów, którzy mogą nie używać tej samej struktury folderów). Ponieważ plik HTML i arkusz kalkulacyjny Excela znajdują się w tym samym folderze, nie sądziłbym, że będzie to trudne, ale nie jestem w stanie tego zrobić. Szukałem w Internecie, a sugerowane rozwiązania okazały się bardzo skomplikowane.

Używam programu Excel 2000 i 2002 w pracy, ale ponieważ planuję go rozpowszechnić, chciałbym, aby działał z tak wieloma wersjami programu Excel, jak to możliwe.

Wszelkie sugestie z wdzięcznością otrzymane.

Odpowiedz

50

Wystarczy, aby wyjaśnić, co yalestar powiedział, to daje względną ścieżkę:

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

Dziękuję bardzo. To działało idealnie. – Gene

+0

Miałem podobny problem z programem Excel dla komputerów Mac. I okazało się, że dla mac, ścieżki muszą być określone za pomocą ":" zamiast "\". – remudada

+0

Kolejny ciekawy kąsek dla systemu Windows, możesz określić lokalizacje znajdujące się wyżej w ścieżce, dodając \. \ Przykład: Workbooks.Open NazwaPliku: = ThisWorkbook.Path & "\ .. \ MyFile.txt", jeśli chcesz uzyskać dostęp do pliku o nazwie MyFile.txt w folderze Endurance Calculation – KayakinKoder

17

Można użyć jednego z nich do korzenia względnej ścieżki:

ActiveWorkbook.Path 
ThisWorkbook.Path 
App.Path 
2

Myślę, że problemem jest to, że otwarcie pliku bez ścieżki będzie działać tylko wtedy, gdy „bieżący katalog” jest ustawiony prawidłowo.

Spróbuj wpisać "Debug.Print CurDir" w okienku natychmiastowym - powinno to pokazać położenie domyślnych plików, zgodnie z ustawieniem Narzędzia ... Opcje.

nie jestem pewien, że jestem całkowicie zadowolony z niego, być może dlatego, że to swego rodzaju polecenia spuścizna VB, ale można to zrobić:

ChDir ThisWorkbook.Path 

myślę wolałbym używać ThisWorkbook. Ścieżka do skonstruowania ścieżki do pliku HTML. Jestem wielkim fanem FileSystemObject w Scripting Runtime (który zawsze wydaje się być zainstalowany), więc byłbym szczęśliwszy, aby zrobić coś takiego (po ustawieniu odniesienie do Microsoft Scripting Runtime):

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

Nie jestem pewien, czy środowisko wykonawcze skryptów jest "zawsze zainstalowane". W pracy aktualizacje bazy danych dla naszego produktu opierały się na jego instalacji (używaliśmy go do otwierania plików skryptów SQL), ale szybko dowiadujemy się (na swój sposób), że scrrun.dll był albo nieobecny, albo nie zarejestrowany w niektórych przypadkach. –

+0

Jeśli masz do czynienia z Office, to tak, to tylko bazy instalacyjne MSDE/SQL Express, może nie.Jak już powiedziałeś, niekoniecznie musi być domyślnie zarejestrowany przez Windows. Jednak Office to wykorzystuje. –

+0

wszystkie wersje IE nad czymś tak starożytnym jak IE6, Iirc. I myślę, że .NET framework 4+ też to ma (może być źle!). IE nie zawsze jest już instalowany w systemie Windows (dzięki UE :)), a .NET 4 jest wciąż "względnie" nowy, więc może rzeczywiście nie być obecny po stronie cient. –

1

można zapewnić większą elastyczność dla użytkowników poprzez dostarczenie Browser przycisk im

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 

z tym kodem, możesz to łatwo osiągnąć. Testowany kod

-1

Myślę, że to może pomóc. Poniżej makr sprawdza, czy istnieje folder, jeśli nie tworzy go i zapisuje w obu formatach xls i pdf w takim folderze. Zdarza się, że folder jest udostępniany zaangażowanym osobom, więc każdy jest aktualizowany.

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 
Powiązane problemy