J'ai écrit une macro Excel VBA qui importe des données à partir d'un fichier HTML (stocké localement) avant d'effectuer des calculs sur les données.
Pour le moment, le fichier HTML est référencé avec un chemin absolu:
Workbooks.Open FileName:="C:\Documents and Settings\Senior Caterer\My Documents\Endurance Calculation\TRICATEndurance Summary.html"
Cependant, je veux utiliser un chemin relatif pour y faire référence par opposition à absolu (c'est parce que je veux distribuer la feuille de calcul à des collègues qui pourraient ne pas utiliser la même structure de dossiers). Comme le fichier html et la feuille de calcul Excel se trouvent dans le même dossier, je n'aurais pas pensé que ce serait difficile, mais je suis tout simplement incapable de le faire. J'ai cherché sur le Web et les solutions suggérées sont toutes apparues très compliquées.
J'utilise Excel 2000 et 2002 au travail, mais comme je prévois de le distribuer, je voudrais qu'il fonctionne avec autant de versions d'Excel que possible.
Toutes les suggestions reçues avec reconnaissance.
Juste pour clarifier ce que yalestar a dit, cela vous donnera le chemin relatif:
Workbooks.Open FileName:= ThisWorkbook.Path & "\TRICATEndurance Summary.html"
Vous pouvez utiliser l'un d'entre eux pour la racine du chemin relatif:
ActiveWorkbook.Path
ThisWorkbook.Path
App.Path
Je pense que le problème est que l'ouverture du fichier sans chemin ne fonctionnera que si votre "répertoire courant" est correctement défini.
Essayez de taper "Debug.Print CurDir" dans la fenêtre Exécution - qui devrait montrer l'emplacement de vos fichiers par défaut comme défini dans Outils ... Options.
Je ne suis pas sûr d'être complètement satisfait, peut-être parce que c'est en quelque sorte un héritage VB command, mais vous pouvez le faire:
ChDir ThisWorkbook.Path
Je pense que je préférerais utiliser ThisWorkbook.Path pour construire un chemin vers le fichier HTML. Je suis un grand fan du FileSystemObject dans le Scripting Runtime (qui semble toujours être installé), donc je serais plus heureux de faire quelque chose comme ça (après avoir défini une référence à 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
si le répertoire actuel du système d'exploitation est le chemin du classeur que vous utilisez, Workbooks.Open FileName:= "TRICATEndurance Summary.html"
suffirait. si vous effectuez des calculs avec le chemin d'accès, vous pouvez vous référer au répertoire courant comme .
et alors \
pour indiquer que le fichier se trouve dans ce répertoire, et si vous devez changer le répertoire courant du système d'exploitation pour le chemin de votre classeur, vous pouvez utiliser ChDrive
et ChDir
pour le faire.
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
Workbooks.Open FileName:= ".\TRICATEndurance Summary.html"
Vous pouvez offrir plus de flexibilité à vos utilisateurs en leur fournissant Bouton Navigateur
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
avec ce morceau de code, vous pouvez y parvenir facilement. Code testé