人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルマクロについて質問です。
ブック内のデータをマクロでワークシートに整理するマクロを作成しました。
テンプレートで保存し、整理したいブックを開いてワークシートの挿入からテンプレートを選んでも標準モジュールがなくなってしまってマクロが実行できません。逆にテンプレートを先に開き、整理したいデータをテンプレートのほうのシートに貼ればマクロは実行可のです。この方法では不可能なのでしょうか。なにか解決案があれば教えてください。

●質問者: ablation
●カテゴリ:コンピュータ
✍キーワード:エクセル テンプレート データ マクロ モジュール
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ardarim
●23ポイント

標準モジュールに書いたマクロはテンプレートでコピーされないようなので、ブックに付随するマクロとしてテンプレートに登録すれば問題ないと思います。(私の環境ではできました)


Visual Basic Editorを開き、プロジェクトビューから

[VBAProject (テンプレートファイル名)]
 -[Microsoft Excel Object]
 -[ThisWorkbook]

をダブルクリックし、ここにテンプレート化したいマクロをコピーし、テンプレートファイルを保存してください。


2 ● ardarim
●23ポイント

すみません。先ほどの回答ウソでした...

テンプレート挿入時にマクロ警告が出るので大丈夫だと思ったら肝心のマクロはコピーされていませんでした。


別のやり方としてすべてのブックから共通で呼び出せるマクロを登録する方法(personal.xls)が下記に書いてありますので、こちらを参考にしてみてはいかがでしょうか。

http://itpro.nikkeibp.co.jp/article/COLUMN/20060206/228642/

◎質問者からの返答

検討してみます。


3 ● robbie21
●22ポイント

挿入したいシートの中にコードを書いておけば大丈夫です。

(操作の例:ワークシート名の書かれたタブの上で右クリック-[コードの表示])

ただし、操作後にデータの書いてあるブックでマクロを使用する必要がないのなら、データ整理用のマクロを書かれたブックは他に作って、データのブックにはマクロを残さない方法をお勧めします。

例えば

C:\Temp\Data.xlsのDataシートにデータがあるとして、

新しいシートにデータを移すマクロは以下のようになります。


'データをテンプレートにコピー

'新シート版

Sub FormatData1()

FormatDataToNewSheet Workbooks("C:\Temp\Data.xls").Worksheets("Data")

End Sub

Sub FormatDataToNewSheet(DataSheet As Worksheet)

'あらかじめ自分で保存したテンプレートの場所

Const TemplatePath = "C:\temp\x.xlt"

Dim NewSheet As Worksheet

Set NewSheet = DataSheet.Parent.Sheets.Add(Type:=TemplatePath)

DataSheet.Cells.Copy

NewSheet.Cells.PasteSpecial xlPasteValues

End Sub



新しいシートでなくて、ブックに作る場合。


'データをテンプレートにコピー

'新ブック版

Sub FormatData2()

FormatDataToNewBook Workbooks("C:\Temp\Data.xls").Worksheets("Data")

End Sub

Sub FormatDataToNewBook(DataSheet As Worksheet)

Const TemplatePath = "C:\temp\x.xlt"

Dim NewBook As Workbook

Set NewBook = Workbooks.Add(TemplatePath)

Dim NewSheet As Worksheet

Set NewSheet = NewBook.Sheets(1)

DataSheet.Cells.Copy

NewSheet.Cells.PasteSpecial xlPasteValues

End Sub

◎質問者からの返答

シートに書くとそのシートに対する操作はうまくいきますが別のシートに対する操作でエラーになるます。


4 ● robbie21
●22ポイント

ablationさん

シートに書くとそのシートに対する操作はうまくいきますが別のシートに対する操作でエラーになるます。

具体的にはどんなエラーが出ますか?

書き方次第で、別のシートの操作は可能です。

例えば以下のコードをシート内に記入して試してください。

Public Sub 他のブックを操作()
 Dim NewBook As Workbook
 Set NewBook = Workbooks.Add
 NewBook.Sheets(1).Range("A1").Value = "このセルは新しいブックの新しいシートのA1セルです。"
End Sub
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ