データの計算を実行する前に、HTMLファイル(ローカルに保存)からデータをインポートするExcel VBAマクロを作成しました。
現時点では、HTMLファイルは絶対パスで参照されます。
Workbooks.Open FileName:="C:\Documents and Settings\Senior Caterer\My Documents\Endurance Calculation\TRICATEndurance Summary.html"
ただし、絶対パスではなく相対パスを使用して参照します(これは、同じフォルダー構造を使用していない可能性のある同僚にスプレッドシートを配布するためです)。 htmlファイルとExcelスプレッドシートが同じフォルダーにあるので、これは難しいとは思わなかったでしょうが、それを完全に行うことはできません。私はウェブで検索しましたが、提案された解決策はすべて非常に複雑に見えました。
私は職場でExcel 2000および2002を使用していますが、配布する予定があるため、できるだけ多くのバージョンのExcelで動作するようにしたいと考えています。
どんな提案もありがたいことに受けました。
Yalestarが言ったことを明確にするために、これは相対パスを提供します:
Workbooks.Open FileName:= ThisWorkbook.Path & "\TRICATEndurance Summary.html"
次のいずれかを相対パスルートに使用できます。
ActiveWorkbook.Path
ThisWorkbook.Path
App.Path
問題は、「カレントディレクトリ」が正しく設定されている場合にのみ、パスなしでファイルを開くことができることだと思います。
イミディエイトウィンドウに「Debug.Print CurDir」と入力してみてください。ツール...オプションで設定したデフォルトファイルの場所が表示されます。
私はそれが完全に満足していると確信していません。おそらくそれはレガシーのVBコマンドですが、これを行うことができます:
ChDir ThisWorkbook.Path
ThisWorkbook.Pathを使用して、HTMLファイルへのパスを作成したいと思います。私はScripting Runtime(常にインストールされているようです)のFileSystemObjectの大ファンなので、(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
オペレーティングシステムの現在のディレクトリが使用しているブックのパスである場合、Workbooks.Open FileName:= "TRICATEndurance Summary.html"
で十分です。パスを使用して計算を行う場合、現在のディレクトリを.
として参照し、次に\
としてファイルがそのディレクトリにあることを確認できます。また、osの現在のディレクトリをワークブックのパスでは、ChDrive
とChDir
を使用してそうすることができます。
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
Workbooks.Open FileName:= ".\TRICATEndurance Summary.html"
ユーザーにBrowser Buttonを提供することにより、ユーザーに柔軟性を提供できます。
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
このコードを使用すると、簡単にこれを実現できます。 テスト済みコード