Excel VBA 質問スレッド №2079 (解決済)

workbook.open 引数に変数を代入してブックを開く方法

投稿者 : クエ     投稿日時 : 2025/02/08(Sat) 21:38:29     OS : Windows 10     EXCEL : Office 365
(質問)workbooks.open ファイルパスを入力した場合は、ファイルが開くのですが、以下のとおり
workbooks.open filename:=filePath
とFileNameに変数を代入するとファイルは開きません。

ファイル一覧上の複数のファイルをLOOPで開きたいため、FileNameには、変数FilePathを設定したいです。
どうしたら、変数FilePathでWorkbook.Openできますか?

Dim filepath as variant
Dim filename as variant
'選択したファイル名を変数に格納する
filename=Application.GetOpenFileName(FileFilter:="EXCELファイル,*.xls*")

'ファイル名が空の場合は、処理を終了する
If FileName=false then
    exit sub
end if

'ファイルを開く
workbooks.open filename

'開いたファイルを変数に格納する
set filename=activeworkbook

'開いたファイルの1シート目のファイル一覧の3行目、5列目のセルを変数FilePathに代入する
filePath=filename.worksheets(1).cells(3,5)

'ファイルパスに記載されているファイルを開く
Workbooks.open filename:=filePath

end sub

スポンサーリンク
[返信 1] Re : workbook.open 引数に変数を代入してブックを開く方法
投稿者 : とりあえず     投稿日時 : 2025/02/09(Sun) 13:10:58
filename:=f
filenameは、変数ではない、何とか語というらしい(忘れたというより覚えなかった)

つまらないことやってないで、普通にやれば・・・
と思った

[返信 2] Re : workbook.open 引数に変数を代入してブックを開く方法
投稿者 : とりあえず     投稿日時 : 2025/02/09(Sun) 13:27:54
filename:=
あーこれでワンセットの語
後に変数か文字が続く

[返信 3] Re : workbook.open 引数に変数を代入してブックを開く方法
投稿者 : ピロリ     投稿日時 : 2025/02/09(Sun) 17:59:53
■[質問] クエさん(2025-02-08 21:38:29)の記事
> (質問)workbooks.open ファイルパスを入力した場合は、ファイルが開くのですが、以下のとおり
> workbooks.open filename:=filePath
> とFileNameに変数を代入するとファイルは開きません。

> ファイル一覧上の複数のファイルをLOOPで開きたいため、FileNameには、変数FilePathを設定したいです。
> どうしたら、変数FilePathでWorkbook.Openできますか?
12step目の workbooks.open filename では、変数(filename)で Workbooks.Open できている訳ですよね。それならば、
21step目の Workbooks.open filename:=filePath だけ 変数(filepath)で Workbooks.Open できない訳は無いかと・・・
ちなみに、私の環境ではご提示のコードで正常に動作できましたし、下のテストコードでも問題なしです。

ご自身の動作環境とか、上手くいかなかったときの変数の値とか、再確認(ステップ実行)されてはいかがでしょう。

Sub Test()
    Dim filepath As Variant
    Dim filename As Variant
    
    '直接パス指定で Workbooks.Open
    Workbooks.Open "C:\Temp\Sample.xlsx"    '直接パスを指定(多分こんな感じでしょうか)
    MsgBox "直接パス指定で Workbooks.Open"
    ActiveWorkbook.Close
    
    '変数(filename)経由で Workbooks.Open ・・・ 第1オプション名(filename:=)指定を省略した場合
    filename = "C:\Temp\Sample.xlsx"
    Workbooks.Open filename                 '変数経由でパス指定 :12step目のパターン
    MsgBox "変数経由で Workbooks.Open (1)"
    ActiveWorkbook.Close
    
    '変数(filepath)経由で Workbooks.Open ・・・ 第1オプション名(filename:=)を指定した場合
    filepath = "C:\Temp\Sample.xlsx"
    Workbooks.Open filename:=filepath       '変数経由でパス指定 :21step目のパターン
    MsgBox "変数経由で Workbooks.Open (2)"
    ActiveWorkbook.Close
End Sub

[返信 4] Re : workbook.open 引数に変数を代入してブックを開く方法
投稿者 : クエ     投稿日時 : 2025/02/10(Mon) 00:25:01
■[返信 3] ピロリさん(2025-02-09 17:59:53)の記事
> ■[質問] クエさん(2025-02-08 21:38:29)の記事
わざわざ、コードを入力して確認してくださり、どうも有難うございました。
私の質問の書き方が分かり辛くて申し訳ございませんでした。質問の趣旨は、4行目の
Filename=application.getopenFilename(FileFilter:="EXCELファイル,*.xls*")
を行った場合、12行目で選択したリストファイル(LOOPで開きたい約250ブックのパスがリストファイルの3行目5列目以降に1行ずつ計250行入力されています)は開き、15行目で開いたリストファイルの名前を変数Filenameに格納でき、18行目でリストファイルのパスを変数Filepathに格納できますが、21行目で変数Filepathでブック(3行5列目に入力されているPathのブック)は開かないという意味です。
workbook.open リストファイルの3行5列目に入力されているファイルパスを直接手入力した場合は、ブックが開くのにです。

なお、やりたい事は、リストファイルの3行目以降、5列目と6列目にそれぞれ対応するファイルパスを入力し、6列目のファイルの一部の列をコピーし、5列目のファイルの余白に貼り付けるという作業を約250ファイル分それぞれに実行したかったのです。

直にファイルパスを手入力する場合は、
それぞれのファイルパスを手入力し、それぞれOpenさせ、コピー貼り付けするという事を約250回、手入力すれば作業は終わるのですが、LOOPでリストファイル上の文字列(ファイルパス)を読み込み、Openできれば、約250回のコードの入力の手間が、省けるし、修正する場合は、ファイルパスを探しやすいと思ったため、質問をいたしました。
ステップを実行すると、21行目のFilename:=FilePathのFilePath上にカーソルをかざすと、FilePath上にファイルのパスは、浮かび上がるのに、なぜ、ファイルは、Openしないのだろうか、もしかして、Application.getopenFilenameでファイルを開いた場合は、開いたファイルの中に記載されているファイルパスを読み込めるけれども、読み込んだファイルパスを使ってファイルはOpenできないという仕様になっているのかもしれないとも思われましたが、私の知識が足りないだけで、ファイルを開く手がある可能性もあると思いましたので、質問いたしました。

[返信 5] Re : workbook.open 引数に変数を代入してブックを開く方法
投稿者 : ピロリ     投稿日時 : 2025/02/10(Mon) 12:24:45
■[返信 4] クエさん(2025-02-10 00:25:01)の記事から察するに、
Workbooks.Open の第1オプションへ指定するファイルパスに、変数を使用できるか否かって話ではなく、
E3セルから取得した文字列(ファイルパス)を使用した Workbooks.Open ができないって話ですかね?

[返信 3]で申し上げた通り、私の環境では、ご質問時にご提示されたコードで正常に動作できています。
4step目で、E3セルへ "C:\Temp\Sample.xlsx" を入力した「C:\Temp\PathList.xlsx」を選択しますが、
21step目では問題無く「C:\Temp\Sample.xlsx」が開きます。
ですので、ご心配のような変な仕様は無いでしょうし、ファイル一覧のループ処理も可能かと思います。

何か、リストファイルが怪しそうなので、新しいブックで作り直してみる(E3セルの再入力)とか・・・
ご質問のような事象の経験が無い(再現もしない)ので、的を得た回答ができず、ご免なさい。
他の方(この辺りの経験者や有識者)の回答もお待ちいただけたらと思います。

[返信 6] Re : workbook.open 引数に変数を代入してブックを開く方法
投稿者 : クエ     投稿日時 : 2025/02/11(Tue) 15:41:49
■[返信 5] ピロリさん(2025-02-10 12:24:45)の記事
> ■[返信 4] クエさん(2025-02-10 00:25:01)の記事から察するに、
> Workbooks.Open の第1オプションへ指定するファイルパスに、変数を使用できるか否かって話ではなく、
> E3セルから取得した文字列(ファイルパス)を使用した Workbooks.Open ができないって話ですかね?

本当にどうも有難うございます。
私の質問は、workbook.openに
・workbook.open Filename:=変数
と変数が設定出来るか
及び
・変数を呼び出し、workbookを開けるか
でした。
変数にカーソルを近づけると、FilePathは、入っていますし、debug.print Filenameで、
workbook.open 出力されたFilePathを直接入力
するとworkbookは、openします。
なのに、workbook.open 変数では、workbookはopenしないため、質問させていただきました。
今回は、諦めて、約250File分をopenさせ、加工するコードをコード単位を250回、コピー貼り付けする事にします。
本当に有難うございました。改めてお礼申し上げます。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-05 17:30:47 )
タイトルとURLをコピーしました