この人頭いいなと思ったエピソード

現在の構文は以下の通り作成し使用しています。
Dim FileName1
FileName1="\\C\台帳.xls"
Workbooks.Open FileName1 で目的のブックを開きます。
 更新等の作業をした後ブックを保存する場合
Workbooks("台帳.xls").Close Savechanges:=true
 で保存していますが、
(1)「FileName1」を使用して保存する方法を教えて頂きたいのですが可能でしょうか。
(2)同時に「FileName1」を使用してブックをアクティブにしたりセレクトする方法も教えて頂きたいのです。

ブックをセーブ・アクティブ・セレクトするたびにブックの名前をいちいち入力していますが、「FileName1」を使用してブック名の入力手間を減らしたいのです。

A 回答 (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 に使えそうなものはありますか?

この回答への補足

ご親切な説明有難うございました。
これからも少しずつチャレンジしますので、又宜しくお願い致します。

補足日時:2006/07/03 08:56
    • good
    • 0

> 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 に付いても現在挑戦中です。
ご指導誠に有難うございます。

補足日時:2006/06/30 15:09
    • good
    • 0

変数 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
と定義しなければ作動しないのですが、何か良い方法はありますか。

補足日時:2006/06/29 16:15
    • good
    • 0

名前を付けて保存して閉じる


Workbooks("台帳.xls").Close Savechanges:=true, Filename:=FileName1

名前を付けて保存(閉じない)
Workbooks("台帳.xls").SaveAs Filename:=FileName1, FileFormat:=xlNormal

アクティブ化
Workbooks("台帳.xls").Activate
ウィンドゥを最前面にするだけなのでファイル名は関係ありません。
    • good
    • 0

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

という方法もあります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!