- ベストアンサー
エクセルVBAでFileNameを使用してブックを開き又は保存する方法
- エクセルVBAでFileNameを使用してブックを開く方法や保存する方法について教えてください。
- 現在の構文ではブックの名前を都度入力していますが、FileNameを使用して手間を減らしたいです。
- また、FileNameを使用してブックをアクティブにしたりセレクトする方法も教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
済みません。。わかりました。。 まず、謝ります。#3 の Sample1 はデタラメです。というのは、 Workbooks("C:\test.xls").Activate のようにカッコ内は、フルパスでも通るものと勘違いしていたのが原因で、 正しくは Workbooks("test.xls").Activate のように書かなくてはいけませんでした。また、良く確認したら、 Workbooks("test.xls").Select × ↓ Workbooks("test.xls").Activate ○ Select はエラーになります。Activate しかできません。 うろ覚えの半端な知識で、逆に混乱させてしまったようです。#4 で補足いた だいた内容が理解できました。上記のとおり、#3 の回答を一部修正させて いただきます。申し訳ありませんでした。 #4 で補足頂いたコードで良いと思います。 ただ、オブジェクト変数を使う方が柔軟性があり、コードの見通し(可読性)は よくなりますね。 > ブックをセーブ・アクティブ・セレクトするたびにブックの名前をいちいち > 入力していますが... すみません。未だに、ご質問の意図が掴めてないので、空回りな回答かもしれま せんが、 ' VBA が書かれたブック --> ThisWorkbook MsgBox ThisWorkbook.Name MsgBox ThisWorkbook.FullName MsgBox ThisWorkbook.Path ' 現在アクティブなブック --> VBA が書かれているブックとは限らない MsgBox ActiveWorkbook.Name MsgBox ActiveWorkbook.FullName MsgBox ActiveWorkbook.Path この辺を調べてみて下さい。この辺で Filename1 に使えそうなものはありますか?
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> FileName2 = "台帳.xls" を更に作成した上で... すみません。補足していただいた内容の意味が良く理解できません。台帳.xls を開いた状態で、同名ファイルを作るのは不可能では? ファイル名を可変にして、ループ処理の中で使いたいってことでしょうか? 取り合えず、現在のコードを補足して下さい。
補足
Sub SampleTest() Dim FileName1 As String FileName1 = "C:\台帳.xls" 'ここのブック名を変更するだけで他のブックに転用します。 Dim Sheet_Name As String '変数を定義しました Dim Book_Name As String '変数を定義しました Workbooks.Open Filename:=FileName1 Sheet_Name = "サブメニュー" Book_Name = ActiveWorkbook.Name Workbooks(Book_Name).Sheets(Sheet_Name).Select Range("A1").Select End Sub 以上の通り変更して見ました。更に良い方法があればお教え下さい。 尚、SAVE・SELECT に付いても現在挑戦中です。 ご指導誠に有難うございます。
- KenKen_SP
- ベストアンサー率62% (785/1258)
変数 FileName1 の型が String 型 か Object 型 で記述が異なります。 > FileName1 = "C:\台帳.xls" この場合、文字列ですから Sample1 の方法になりますね。比較してみて下さい。 ' String 型変数を使う場合 Sub Sample1() Dim FileName1 As String FileName1 = "C:\台帳.xls" ' 開く Workbooks.Open FileName:=FileName1 ' アクティブにする Workbooks(FileName1).Activate ' Select する Workbooks(FileName1).Select ' 保存して閉じる Workbooks(FileName1).Close SaveChanges:=True End Sub ' Object 型変数を使う場合 Sub Sample2() ' 変数名を変えています Dim WB As Workbook ' 開く(開かれたブックを参照する) Set WB = Workbooks.Open(FileName:="C:\台帳.xls") ' アクティブにする WB.Activate ' Select する WB.Select ' 保存して閉じる WB.Close SaveChanges:=True '参照を破棄 Set WB = Nothing End Sub
補足
Dim FileName1 As String とし FileName1 = "C:\台帳.xls" Workbooks.Open FileName:=FileName1 でブックはで開きました。 以下の処理の時は FileName2 = "台帳.xls" を更に作成した上で ' アクティブにする Workbooks(FileName2).Activate ' Select する Workbooks(FileName2).Select ' 保存して閉じる Workbooks(FileName2).Close SaveChanges:=True と定義しなければ作動しないのですが、何か良い方法はありますか。
- chie65536
- ベストアンサー率41% (2512/6032)
名前を付けて保存して閉じる Workbooks("台帳.xls").Close Savechanges:=true, Filename:=FileName1 名前を付けて保存(閉じない) Workbooks("台帳.xls").SaveAs Filename:=FileName1, FileFormat:=xlNormal アクティブ化 Workbooks("台帳.xls").Activate ウィンドゥを最前面にするだけなのでファイル名は関係ありません。
- hana-hana3
- ベストアンサー率31% (4940/15541)
Dim FileName1 Set FileName1 = Workbooks("台帳.xls") FileName1.Activate FileName1.Close ファイルを開いたあとに、setコマンドで上記のような事なら可能です。 Dim FileName1 FileName1 = "\\C\台帳.xls" Workbooks.Open FileName1 'Set FileName1 = ActiveWorkbook 'ファイルのオープンに失敗した場合の動作は不定 Set FileName1 = Workbooks("台帳.xls") '上記よりこちらを推薦 FileName1.Close Savechanges:=True Set FileName1 = Nothing という方法もあります。
補足
ご親切な説明有難うございました。 これからも少しずつチャレンジしますので、又宜しくお願い致します。