Excel VBA質問箱 IV

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

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


3332 / 13644 ツリー ←次へ | 前へ→

【62882】配列を使ったブック間シート移動 しん 09/9/12(土) 12:51 質問[未読]
【62883】Re:配列を使ったブック間シート移動 Yuki 09/9/12(土) 14:21 発言[未読]
【62885】Re:配列を使ったブック間シート移動 しん 09/9/12(土) 15:24 発言[未読]
【62886】Re:配列を使ったブック間シート移動 Yuki 09/9/12(土) 21:29 発言[未読]
【62887】Re:配列を使ったブック間シート移動 通りすがり 09/9/12(土) 23:23 発言[未読]
【62888】Re:配列を使ったブック間シート移動 しん 09/9/13(日) 0:47 お礼[未読]

【62882】配列を使ったブック間シート移動
質問  しん  - 09/9/12(土) 12:51 -

引用なし
パスワード
   下記のようなコードでブック間の移動を試みたところ
エラーがでます。実行時エラー1004 Sheetsオブジェクトのエラーとの
ことですが、シートの選択までは動き、移動時点でエラーとなります。
修正のヒントをいただきたく投稿させていただきました

1.データ取得ブック(読み込み元)よりデータ取得
2.ThisWorkbookで作業
3.作業により作成したSheetをデータ取得ブックへ移動
問う流れです。シートの選択まではできているので、
最後でつまづいてしまっています。
ご教授のほどよろしくお願いいたします。

Sub 移動()

  Dim Sh As Worksheet
  Dim mySh() As Variant
  Dim 移動先 As String
  
  
  移動先 = Worksheets("売上").Range("F1").Value  '読み込み元のブック名取得
  
  ReDim mySh(1)

  For Each Sh In ThisWorkbook.Worksheets
  If Sh.Name Like "月間*" Then
    i = i + 1
    ReDim Preserve mySh(i)
    mySh(i) = Sh.Name

  End If
  Next

  Worksheets(mySh).Select
  ActiveWindow.SelectedSheets.Move After:=Workbooks(移動先).Sheets(1) ’ここでエラー


End Sub

【62883】Re:配列を使ったブック間シート移動
発言  Yuki  - 09/9/12(土) 14:21 -

引用なし
パスワード
   ▼しん さん:
>下記のようなコードでブック間の移動を試みたところ
>エラーがでます。実行時エラー1004 Sheetsオブジェクトのエラーとの
>ことですが、シートの選択までは動き、移動時点でエラーとなります。
>修正のヒントをいただきたく投稿させていただきました

こんにちは。
配列の定義の問題です

>  ReDim mySh(1)
このとき mySh(0) と mySh(1)
となります。
で mySh(1 to 1)

>  For Each Sh In ThisWorkbook.Worksheets
>  If Sh.Name Like "月間*" Then
>    i = i + 1
>    ReDim Preserve mySh(i)
ここも同じように
    ReDim Preserve mySh(1 to i)
とすれば良いでしょう。
>    mySh(i) = Sh.Name
>
>  End If
>  Next
>
>  Worksheets(mySh).Select
>  ActiveWindow.SelectedSheets.Move After:=Workbooks(移動先).Sheets(1) ’ここでエラー
上の2行は
  Worksheets(mySh).Move after:=Workbooks(移動先).Sheets(1)
でも良いでしょう。
>
>
>End Sub

では、頑張ってください。

【62885】Re:配列を使ったブック間シート移動
発言  しん  - 09/9/12(土) 15:24 -

引用なし
パスワード
   修正してみたのですが、やはり同様のエラーがでます。
選択まではできているので、ブック間の移動の
なんかしらのエラーかとは思いますが、
うまくいきません。。。

【62886】Re:配列を使ったブック間シート移動
発言  Yuki  - 09/9/12(土) 21:29 -

引用なし
パスワード
   ▼しん さん:
>修正してみたのですが、やはり同様のエラーがでます。
>選択まではできているので、ブック間の移動の
>なんかしらのエラーかとは思いますが、
>うまくいきません。。。

此方では再現できないですが。
移動先のブックは開いていますよね。

あとは、最初に
ThisWorkbook.Activate
を追加されてはどうでしょうか。

【62887】Re:配列を使ったブック間シート移動
発言  通りすがり  - 09/9/12(土) 23:23 -

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

横から失礼します。

>Sub 移動()
>
>  Dim Sh As Worksheet
>  Dim mySh() As Variant
>  Dim 移動先 As String
>  
>  
>  移動先 = Worksheets("売上").Range("F1").Value  '読み込み元のブック名取得
>  
>  ReDim mySh(1)
>
>  For Each Sh In ThisWorkbook.Worksheets
>  If Sh.Name Like "月間*" Then
>    i = i + 1
>    ReDim Preserve mySh(i)
>    mySh(i) = Sh.Name
>
>  End If
>  Next
>
>  Worksheets(mySh).Select
         ↑
   myShは配列ですから、mySh(0)やmyS(1)と指定するとどうなりますか?
   Yukiさんが書いた Redim mySh(1 to 1)としている場合は
   mySh(1)となりますが、違う場合はローカルウインドでmyShの中身を
  確認することをお勧めします。
  
   
>  ActiveWindow.SelectedSheets.Move After:=Workbooks(移動先).Sheets(1) ’ここでエラー
>
>
>End Sub

はずしていたらスルーして下さい。
失礼しました。

【62888】Re:配列を使ったブック間シート移動
お礼  しん  - 09/9/13(日) 0:47 -

引用なし
パスワード
   アドバイスありがとうございました。
ThisWorkbook.Activateなど追加したりいろいろ
試したのですが、なかなか。。。
実は、同じコードでもうまくいったようなことが
何度かあった気がしておかしいと思い、
マクロを止めて普通に移動を試みても
動作しませんでした。
そこで、
MoveをやめCopyにするとうまくいきました。
Copyで不要なSheetは削除という方法でいこうと思います。
ありがとうございました。

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