[リストへもどる]
一括表示

投稿時間:2004/06/10(Thu) 16:02
投稿者名:Tom
Eメール:
URL :
タイトル:
Excelのシートのコピーについて
はじめまして。
Excel2000、WinXPで処理を行っております。

質問ですが、原本となるシートがあり、そのシートを新規シートとしてVBAでコピーしている
のですが、原本に貼り付けられているコントロール(コマンドボタンを貼り付けています)の
モジュールのコピーの仕方がわかりません。
そもそも無理なことなのでしょうか?
申し訳ないのですが、どなたかご教授いただけませんでしょうか?
よろしくお願い申し上げます。

投稿時間:2004/06/11(Fri) 09:02
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re: Excelのシートのコピーについて
モジュール単位でコピーできるかどうかは試してないんですが、
    Workbook.VBProject.VBComponents
あたりの機能を使えば、フォーム モジュール、標準モジュール
またはクラス モジュールをコンポーネントとして操作できる
はずです。
    Workbook.VBProject.VBComponents.Item(i).CodeModule
で行単位の削除はやったことありますが…結構手間が掛かりました。

まるまるコピーするなら VBA からはずれますが、VB から
ブックごとコピーすることも考えてみてはどうでしょうか。

投稿時間:2004/06/11(Fri) 10:15
投稿者名:Tom
Eメール:
URL :
タイトル:
Re^2: Excelのシートのコピーについて
お返事ありがとうございます。
できました(^^

>     Workbook.VBProject.VBComponents.Item(i).CodeModule
> で行単位の削除はやったことありますが…結構手間が掛かりました。

上記の表記はExcelのHelpに載ってないんですね(^^;
色々調べて下記記述で出来ましたので載せておきます。

  Dim lngLS       As Long
  Dim lngLC       As Long
  Const strProc   As String = "Command1_Click" 'コピー対象のプロジャージ
    
  With ThisWorkbook.VBProject.VBComponents("Sheet1")
    'プロジャージの開始行と行数
    lngLS = .CodeModule.ProcBodyLine(strProc, 0)
    lngLC = .CodeModule.ProcCountLines(strProc, 0)
    '[Sheet1]に指定のプロジャージが無い場合はコピー不可
    If lngLS = 0 Then Exit Sub
        
    ThisWorkbook.VBProject.VBComponents(Sheets(Sheets.Count).CodeName).CodeModule
    .InsertLines 1, .CodeModule.Lines(lngLS, lngLC)
    'Sheets(Sheets.Count).NameでなくCodeNameで指定してください
  End With

どなたかのお役に立てれば幸いです(^^
ありがとうございました。

投稿時間:2004/06/11(Fri) 11:15
投稿者名:るしぇ
Eメール:
URL :
タイトル:
Re^3: Excelのシートのコピーについて
>上記の表記はExcelのHelpに載ってないんですね(^^;
VBA 側のヘルプだと載ってないってことは無いと思うんですが、
キーワード検索に引っかからなかったりして、知らないと探すのは
難しいかもしれません。コードを選択して[F1]キーで飛んでみて下さい。

…たいした情報は載ってないので、やっぱり自分で調べるしかないですが(汗)

…あと
……プロジャージ → プロシージャ?
(一応『プロジャージ』で検索してもジャージしか引っかからなかったので)

投稿時間:2004/06/11(Fri) 11:25
投稿者名:Tom
Eメール:
URL :
タイトル:
Re^4: Excelのシートのコピーについて
> ……プロジャージ → プロシージャ?
> (一応『プロジャージ』で検索してもジャージしか引っかからなかったので)

正解です(^^;;

難なく変換できてしまったので確認してませんでした(^^;
またよろしくお願いいたしますm(_ _)m
(ってゆうか、たまには回答する側になりたいと思いますw)