Excel VBA質問箱 IV

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

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


9975 / 13646 ツリー ←次へ | 前へ→

【24482】Workbooks(1)と個人用マクロブック たこ 05/4/22(金) 23:36 質問[未読]
【24488】Re:Workbooks(1)と個人用マクロブック IROC 05/4/23(土) 0:24 回答[未読]
【24490】Re:Workbooks(1)と個人用マクロブック たこ 05/4/23(土) 1:56 質問[未読]
【24495】Re:Workbooks(1)と個人用マクロブック ウッシ 05/4/23(土) 10:08 回答[未読]
【24500】Re:Workbooks(1)と個人用マクロブック たこ 05/4/23(土) 12:54 お礼[未読]

【24482】Workbooks(1)と個人用マクロブック
質問  たこ  - 05/4/22(金) 23:36 -

引用なし
パスワード
   こんばんは、初めて質問します。

会社でいつも使っていたマクロが急に使えなくなりました。
サーバーに有るファイルで他の人は使えます。なので原因は私パソコンの環境?
ど素人なのでよく分かりませんが、どうも原因は最近会社の私のパソコンに
個人用マクロブックを作ったせいで問題のBookのマクロの中の
 Workbooks(1).Activate などの部分で個人用マクロブックも数に数えて、
そこでエラーが出ているのでは?と思います。
パソコンによって個人用マクロブックが有る無いなど環境が違う時には
Workbooks(1).Activate は使わないほうが良いのでしょうか。

使うとした場合は

  Workbooks(2).Activate
  Sheets("Sheet1").Select
  Range("A1:A90").Select
  Selection.Copy 

  Workbooks(1).Activate 
  Range("B5").Select

今このようなコードをどんな風に直すのでしょうか。
個人用マクロブックを数えないコードなどありましたら教えてください。
宜しくお願いします。

【24488】Re:Workbooks(1)と個人用マクロブック
回答  IROC  - 05/4/23(土) 0:24 -

引用なし
パスワード
   >Workbooks(1).Activate は使わないほうが良いのでしょうか。

ほとんどの状況において、そのような対象が不確定となる記述は避けるべきです。
さらに、ActivateやSelect のような選択処理も、まったく必要ありません。


ActiveWorkbook.Worksheets("Sheet1").Range("A1:A90").Copy

【24490】Re:Workbooks(1)と個人用マクロブック
質問  たこ  - 05/4/23(土) 1:56 -

引用なし
パスワード
   IROC さんお返事有難うございます。

>ほとんどの状況において、そのような対象が不確定となる記述は避けるべきです。

分かりました。

>さらに、ActivateやSelect のような選択処理も、まったく必要ありません。

すみません。コードを省略しすぎましたが
  Workbooks(2).Activate
  Sheets("Sheet1").Select
  Range("A1:A90").Select
  Selection.Copy 

  Workbooks(1).Activate 
  Range("B5").Select

  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False   
  Application.CutCopyMode = False


Workbooks(1)が問題のBookで、マクロで他のBook5つを開き、Workbooks(2)〜(6)
からデータを集計、照合します。そのためActivateやSelectを使いました。
この時は必要なんですよね。(初歩以前の質問ですみません)
問題のBookはマクロを起動すると他のBook5つを一度に開き、後で開いた順番に
データを処理します。
この手順は特に意味は無いので他Bookを開いた時都度データ処理したほうが良いのでしょうか。

【24495】Re:Workbooks(1)と個人用マクロブック
回答  ウッシ  - 05/4/23(土) 10:08 -

引用なし
パスワード
   こんにちは

簡単な例です。
>ActivateやSelect のような選択処理も、まったく必要ありません。
どのブックのどのシートのセルか明示すればいいのです。

これはブックだけですけど、シートもオブジェクト変数を用意してセットしておけば
もっとコードがシンプルに保守し易くなると思います。

各ブックとも同じ処理なら配列変数にブックをセットしてループ処理してもいいです。

Sub test()
  Dim BK1 As Workbook
  Dim BK2 As Workbook
  Dim BK3 As Workbook
  Dim BK4 As Workbook
  Dim BK5 As Workbook
  Dim BK6 As Workbook
  
  Set BK1 = ThisWorkbook
  Set BK2 = Workbooks.Open("C:\Book2.xls")
  Set BK3 = Workbooks.Open("C:\Book3.xls")
  Set BK4 = Workbooks.Open("C:\Book4.xls")
  Set BK5 = Workbooks.Open("C:\Book5.xls")
  Set BK6 = Workbooks.Open("C:\Book6.xls")
  
  BK2.Sheets("Sheet1").Range("A1:A90") _
    .Copy BK1.Sheets("Sheet1").Range("B5")
  BK3.Sheets("Sheet1").Range("B1:B90") _
    .Copy BK1.Sheets("Sheet1").Range("C5")
  BK4.Sheets("Sheet1").Range("C1:C90") _
    .Copy BK1.Sheets("Sheet1").Range("D5")
  BK5.Sheets("Sheet1").Range("D1:D90") _
    .Copy BK1.Sheets("Sheet1").Range("E5")
  BK6.Sheets("Sheet1").Range("F1:F90") _
    .Copy BK1.Sheets("Sheet1").Range("F5")
  
  BK2.Close False
  BK3.Close False
  BK4.Close False
  BK5.Close False
  BK6.Close False

  Set BK2 = Nothing
  Set BK3 = Nothing
  Set BK4 = Nothing
  Set BK5 = Nothing
  Set BK6 = Nothing
End Sub

【24500】Re:Workbooks(1)と個人用マクロブック
お礼  たこ  - 05/4/23(土) 12:54 -

引用なし
パスワード
   ウッシさん 回答有難うございます。

教えていただいたコードを参考に直してみます
ど素人なので自信ありませんが分からなくなればまた質問させて下さい。

皆さんお世話になりました。

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