Relativ stedet for absolutte stier i Excel VBA

stemmer
36

Jeg har skrevet et Excel VBA-makro som importerer data fra en HTML-fil (lagret lokalt) før du utfører beregninger på dataene.

I øyeblikket HTML-filen er referert til med en absolutt bane:

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

Men jeg ønsker å bruke en relativ bane å referere til det i motsetning til absolutt (dette er fordi jeg ønsker å distribuere regnearket til kolleger som kanskje ikke bruker samme mappestruktur). Som html-fil og excel regneark sitte i samme mappe jeg ville ikke ha trodd dette ville bli vanskelig, men jeg er bare helt ute av stand til å gjøre det. Jeg har søkt på nettet, og de foreslåtte løsningene har alle virket svært komplisert.

Jeg bruker Excel 2000 og 2002 på jobb, men som jeg har tenkt å distribuere det jeg ønsker å jobbe med så mange versjoner av Excel som mulig.

Eventuelle forslag takknemlig mottatt.

Publisert på 17/10/2008 klokken 17:42
kilden bruker
På andre språk...                            


6 svar

stemmer
17

Du kan bruke en av disse for den relative banen root:

ActiveWorkbook.Path
ThisWorkbook.Path
App.Path
Svarte 17/10/2008 kl. 17:50
kilden bruker

stemmer
2

Jeg tror problemet er at åpne filen uten en bane vil bare fungere hvis "gjeldende katalog" er riktig innstilt.

Prøv å skrive "Debug.Print CurDir" i vinduet som vises - som skal vise plassering for standardfilene som ligger i Verktøy ... Alternativer.

Jeg vet ikke om jeg er helt fornøyd med det, kanskje fordi det er litt av en arv VB kommando, men du kan gjøre dette:

ChDir ThisWorkbook.Path

Jeg tror jeg foretrekker å bruke ThisWorkbook.Path å bygge en bane til HTML-fil. Jeg er en stor fan av File i Scripting Runtime (som alltid ser ut til å bli installert), så jeg vil være lykkeligere å gjøre noe som dette (etter å sette en referanse til 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
Svarte 17/10/2008 kl. 18:53
kilden bruker

stemmer
55

Bare for å klargjøre hva yalestar sagt, dette vil gi deg den relative banen:

Workbooks.Open FileName:= ThisWorkbook.Path & "\TRICATEndurance Summary.html"
Svarte 17/10/2008 kl. 23:15
kilden bruker

stemmer
1

Du kan gi mer fleksibilitet for brukerne ved å gi Browser Button til dem

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

med dette stykke koden kan du oppnå dette, lett. Testet kode

Svarte 13/01/2014 kl. 16:27
kilden bruker

stemmer
-1

Jeg tror dette kan hjelpe. Nedenfor Makro kontrollerer om mappen finnes, hvis ikke så opprette mappen og lagre i både xls og pdf-format på en slik mappe. Det hender at mappen er delt med de involverte mennesker slik at alle er oppdatert.

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
Svarte 30/08/2015 kl. 14:37
kilden bruker

stemmer
0

dersom gjeldende katalog av operativsystemet er banen arbeidsboken du bruker, Workbooks.Open FileName:= "TRICATEndurance Summary.html"ville nok. hvis du gjør beregninger med banen, kan du referere til gjeldende mappe som .og deretter \å fortelle filen er i det dir, og i tilfelle du må endre os nåværende katalog til arbeidsboken vei, kan du bruke ChDriveog ChDirå gjøre det .

ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
Workbooks.Open FileName:= ".\TRICATEndurance Summary.html"
Svarte 01/04/2019 kl. 13:16
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more