• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelユーザーフォームでシートの移動)

Excelユーザーフォームでシートの移動方法

このQ&Aのポイント
  • Excelユーザーフォームを使用してデータブック内のシートを移動させる方法について解説します。
  • ユーザーフォームにリストボックスを配置し、データブック内のシート一覧を表示します。
  • 選択したシートを移動ボタンをクリックすることで、別のファイルに移動させることができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

ブックが毎回変わることは元のご相談から読み取れましたが,少なくとも「今日の対象のブックを開く」ことだけは出来ていたからこのマクロが動いたので,出来ると思いましたが無理ですか。 では仕方ないのでお薦めしたくない手段ですが,少なくとも「リストボックスから選んで『これとこれのシートを移動しろ』と命じるその瞬間」には,データブックがアクティブになっているハズだという前提で綱渡りをしましょうか。 UserForm_Initializeは,以前に他の誰かが作ってくれたマクロ?のその通りの状態に正しく戻します。 絶対に直し間違えないように,よくよく注意してください。 Private Sub SheetIdou_Click()  dim Targetbook as workbook ’(中略)  If MsgBox("以下のシートを移動しますか?" & vbLf & Join(v, "/"), vbYesNo, "確認") = vbYes Then   set targetbook = activeworkbook   Sheets(v).Move After:=Workbooks("Book2.xlsx").Worksheets(1)   targetbook.activate   listbox1.clear   userform_initialize  End If End sub #今となっては別に構わないことですが >とりあえずアクティブなシートを対象にするのは当たり前ですよね いいえ,全然逆です。 アクティブなブック,アクティブなシートを対象にするのは,まさに今回ひっかかったように失敗しやすい「典型的なダメなマクロ」です。

narnia_aslan
質問者

お礼

ありがとうございます。 ダメなマクロ…その通りです… ダメなのは分かりつつもどこをどうしたらダメじゃなくなるのかが分かっていないという… 今回のユーザーフォームは完全に自分で作ったのでUserForm_Initializeも自分で作りました。 他の(詳しい人が作った)ユーザーフォームは少し特殊な操作をするコードが書いてあるのでそのままあてはめることはできませんでした。 なのでUserForm_Initialize自体をなくして、コマンドボタンをもう一つ作ってそこでシート一覧のリストを取得するようにしました。 何度もご回答ありがとうございました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

簡易には 1.sheets(v).moveをした直後に 2.リストボックスをclearして 3.userformのinitializeをやり直す でいいと思います。 ただし一つ問題なのは,今のUserForm_Initializeのプロシジャが「作業対象のデータブックを指定せずに」アクティブブックを対象としている中途半端なマクロになっているため,今のまま動かすと上手く作動しません。 作成の基本方針: Private Sub UserForm_Initialize() ’(前略) ’★下記のままでは上手くないので,キチンと作業対象ブックを取得して指定すること  For Each a In workbooks("データブック.xlsx").Sheets   ListBox1.AddItem a.Name  Next End Sub Private Sub SheetIdou_Click() ’(前略)  If MsgBox("以下のシートを移動しますか?" & vbLf & Join(v, "/"), vbYesNo, "確認") = vbYes Then   Sheets(v).Move After:=Workbooks("Book2.xlsx").Worksheets(1)   listbox1.clear   userform_initialize  End If End sub

narnia_aslan
質問者

補足

ありがとうございます。 UserForm_Initializeプロシジャが中途半端なのには理由がありまして… このマクロブックは複数のデータブックに使うものなのですが、そのデータブックの名前が毎日変わるのです。 (格納されているフォルダも日毎に変わる) それで、他の操作をするマクロでは常にそのデータブックをアクティブにしておくコードを詳しい人に書いていただいたのですが、私があまり知識がないものでその指定方法が分からず… (書かれたコードを見ながら応用できないかと試行錯誤しましたができませんでした) よく考えたらおっしゃる通り、とりあえずアクティブなシートを対象にするのは当たり前ですよね 再取得する時にデータブックを指定することは無理でしょうか…

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

詳しく見ていませんが、シート移動後に Call UserForm_Initialize と、でも入れてリストを更新してやっては?

narnia_aslan
質問者

お礼

ありがとうございます。 他の問題もあって指定したファイルの一覧が再取得できません…

関連するQ&A