Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3379 / 13645 ツリー ←次へ | 前へ→

【62608】支店名でsaveするには にしもり 09/8/10(月) 15:18 質問[未読]
【62609】Re:支店名でsaveするには kanabun 09/8/10(月) 15:22 発言[未読]
【62610】Re:支店名でsaveするには にしもり 09/8/10(月) 15:36 質問[未読]
【62611】Re:支店名でsaveするには kanabun 09/8/10(月) 16:10 発言[未読]
【62612】Re:支店名でsaveするには kanabun 09/8/10(月) 16:25 発言[未読]
【62613】Re:支店名でsaveするには にしもり 09/8/10(月) 17:03 お礼[未読]
【62614】Re:支店名でsaveするには kanabun 09/8/10(月) 17:39 発言[未読]
【62615】Re:支店名でsaveするには にしもり 09/8/10(月) 17:46 質問[未読]
【62616】Re:支店名でsaveするには kanabun 09/8/10(月) 18:34 発言[未読]
【62617】Re:支店名でsaveするには にしもり 09/8/10(月) 18:43 お礼[未読]

【62608】支店名でsaveするには
質問  にしもり  - 09/8/10(月) 15:18 -

引用なし
パスワード
   こんにちは。
下記をRunすると「実行時エラー424 オブジェクトが必要です。」とでます。
どこが悪いでしょうか。 

Sub Macro1()

Dim MyBranch(1) As String
Dim i As Long

  MyBranch(0) = "北海道支店.xls"
  MyBranch(1) = "青森支店.xls"

For i = 0 To 1
'中略
  Workbooks.Open Filename:="U:\" & MyBranch(i)
  Activebooks.SaveAs Filename:="U:\shiten\" & MyBranch(i) 'ここが黄色くなる
  Activebooks.Close.True
    
Next i
End Sub

【62609】Re:支店名でsaveするには
発言  kanabun  - 09/8/10(月) 15:22 -

引用なし
パスワード
   ▼にしもり さん:

>下記をRunすると「実行時エラー424 オブジェクトが必要です。」とでます。
>どこが悪いでしょうか。 


>  Activebooks.SaveAs Filename:="U:\shiten\" & MyBranch(i) 'ここが黄色くなる
>  Activebooks.Close.True

「Activebooks」とは何者か?
どこにも宣言されてないですね?

モジュールの先頭に
Option Explicit
と宣言して、コンパイルをかけてみるといいですよ。

【62610】Re:支店名でsaveするには
質問  にしもり  - 09/8/10(月) 15:36 -

引用なし
パスワード
   ▼kanabun さん:
すみません、いまだ勉強不足です。

Option Explicitで変数を宣言してないことは解りました。
ですが腑におちません。
Workbooks.Open Filename:="U:\" & MyBranch(i)で、
いまアクティヴなブックは定まっているんではないでしょうか?
名前を付けて保存する時に、開いているブックは一つしかないはずです。

【62611】Re:支店名でsaveするには
発言  kanabun  - 09/8/10(月) 16:10 -

引用なし
パスワード
   ▼にしもり さん:

>Option Explicitで変数を宣言してないことは解りました。
で、宣言して、
コンパイルかけてみるとどうなりましたか?


>Workbooks.Open Filename:="U:\" & MyBranch(i)で、
>いまアクティヴなブックは定まっているんではないでしょうか?
>名前を付けて保存する時に、開いているブックは一つしかないはずです。

Workbooks.Open すれば、OpenしたBookがアクティブになります。
ですが、いまアクティブなBookは 「ActiveWorkbook」です、
変数 Activebooks ではありません。

【62612】Re:支店名でsaveするには
発言  kanabun  - 09/8/10(月) 16:25 -

引用なし
パスワード
   ▼にしもり さん:
Option Explicit宣言については
リンクは張らないけれど、こういう説明があります。
(以下引用)


- 変数は必ず宣言する -

標準状態では、宣言しなくても変数を使用できます。その場合、変数はVariant型となります。これはBASICの仕様を受け継いだもので、一見便利なようですが、実は非常に危険な存在です。
変数名を間違って入力しても、それは「Variant型の別の変数」とみなされてしまい、いざ実行すると結果が正しくなかった…ということになります。変数名の綴り間違いを見つけるのは、非常に手間がかかります。
必ず名前とデータ型を明示して、変数を宣言してから使用することを心がけましょう。変数の宣言を強制するステートメント

 Option Explicit

を、コードウィンドウの最上行(宣言セクション)に記述すると、宣言していない変数を使っていた場合に実行時エラーが発生するようになります。
複数のモジュールを用いる場合は、「ツール(T)」→「オプション(O)」メニューで「オプション」ダイアログボックスを開き、「編集」パネルの「コードの設定」で「変数の宣言を強制する(R)」チェックボックスをONにしておきましょう。すべてのモジュールの宣言セクションに“Option Explicit”ステートメントが挿入されます。

【62613】Re:支店名でsaveするには
お礼  にしもり  - 09/8/10(月) 17:03 -

引用なし
パスワード
   ▼kanabun さん:
変数に関してご丁寧な説明をお書きくださり、ありがとうございます。
Option Explicitは以前にもこのサイトでご教示いただいたことがありました。
大変申し訳ありません。
コンパイルの結果は「変数が定義されていません」でした。

ご指摘いただいたとおりActiveWorkbookをActivebooksと記載したため
変数ととられました。

出来合いのものをつぎはぎしてやってるせいと思います。
下記のように直したら実行できました。
ありがとうございました。
(変なところは無いでしょうか。。)

Option Explicit
Sub Macro1()

  Dim MyBranch(1) As String
  Dim i As Long
  
  MyBranch(0) = "北海道支店.xls"
  MyBranch(1) = "青森支店.xls"

For i = 0 To 1

  Workbooks.Open Filename:="U:\" & MyBranch(i)
  ActiveWorkbook.SaveAs Filename:="U:\shiten\" & MyBranch(i)
  ActiveWorkbook.Close True
      
Next i
   
End Sub

【62614】Re:支店名でsaveするには
発言  kanabun  - 09/8/10(月) 17:39 -

引用なし
パスワード
   ▼にしもり さん:

>ご指摘いただいたとおりActiveWorkbookをActivebooksと記載したため
>変数ととられました。

>(変なところは無いでしょうか。。)
>
>Option Explicit
>Sub Macro1()

>  Workbooks.Open Filename:="U:\" & MyBranch(i)
>  ActiveWorkbook.SaveAs Filename:="U:\shiten\" & MyBranch(i)
>  ActiveWorkbook.Close True

今度は、とくに変なところはないと思います。

番外ですが、処理は
FileCopyステートメントを利用されると、もっと簡単になりそうですね(^^

【62615】Re:支店名でsaveするには
質問  にしもり  - 09/8/10(月) 17:46 -

引用なし
パスワード
   ▼kanabun さん:
すみません、もうひとつ御教えください。
保存時のファイル名を安全安心_東京支店.xlsにようにすることになりました。
そのため下記のように変え実行したのですが、
「U:\Shiten\安全安心_がありません」というようなMSGがでます。
書き方が悪いでしょうか?

Option Explicit
Sub Macro1()

  Dim MyBranch(1) As String
  Dim i As Long
  
  MyBranch(0) = "北海道支店.xls"
  MyBranch(1) = "青森支店.xls"

For i = 0 To 1

  Workbooks.Open Filename:="U:\" & MyBranch(i)
  ActiveWorkbook.SaveAs Filename:="U:\Shiten\安全安心_\" & MyBranch(i) & " .xls"
  ActiveWorkbook.Close True
      
Next i
   
End Sub

【62616】Re:支店名でsaveするには
発言  kanabun  - 09/8/10(月) 18:34 -

引用なし
パスワード
   ▼にしもり さん:

>保存時のファイル名を安全安心_東京支店.xlsにようにすることになりました。
>そのため下記のように変え実行したのですが、
>「U:\Shiten\安全安心_がありません」というようなMSGがでます。
>書き方が悪いでしょうか?

>  ActiveWorkbook.SaveAs Filename:="U:\Shiten\安全安心_\" & MyBranch(i) & " .xls"

悪いです(^^
U:\Shiten\ というフォルダに
「安全安心_東京支店.xls」
という名前で保存するのですから、

安全安心_\"
    ↑この \ は不要です。

【62617】Re:支店名でsaveするには
お礼  にしもり  - 09/8/10(月) 18:43 -

引用なし
パスワード
   ▼kanabun さん:
パスを書く時フォルダ間に「\」を記述するのでした。
失礼しました。
直したら正しく走りました。
今回もどうもありがとうございました。

3379 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free