|
anakin さん、だるま さん、こんばんは。
>>でしたらはじめからマクロブックとデータブックは分けておけば良いと思いますが。^d^
>
>すみません。まだ素人なので、いまいち意味がよくわかりません。もう少し詳しくお願いできますか。
anakin さんのご質問もanakin さんより、初心者の方には何が問題になっているのか、
どのようなコードでどうのような手順で操作すれば、このような問題の現象になるのか、
たぶん、わからないと思いますよ!!
だって、anakin さん記述では
anakin さんのおっしゃっている状況が再現できないですからね!!
実は、最近こういう御質問が本当に多いんです・・・。
一年に一人ぐらいじゃ笑って済ませますけど、
これ以上増えては困るので、記述しています。
これの本当の解決方法は、私もだるま さん同様、
「プログラム(VBAコード)を記述するブックと
データを作成するブックを分ける」
というのが正解だと思います。
でも、この正解に至るまでの過程がきちんと記述されていて、
後々この質問をみるVBAの初心者の方がanakin さんの困っている現象から
始まって、解決方法までの記述が再現可能になっていれば、
質問者と回答者が連携して作成した素晴らしいナレッジベースになります。
その一端を是非、anakin さんには担っていただきたいと思います。
さて、ご質問の件ですが、
例を出しましょう。これは、私とanakin さんが同じブックを見るための
一番、簡単な手段だとおもいます。
新規ブックの標準モジュールに以下のコードを記述してください
'==================================================================
Option Explicit
Sub auto_open()
On Error Resume Next
With Application.CommandBars.Add("サンプルバー")
If Err.Number = 0 Then
.Visible = True
With .Controls.Add(Type:=msoControlButton, ID:=2949, Before:=1)
.Style = msoButtonCaption
.Width = 100
.Caption = "VBAサンプル"
.OnAction = "macro"
End With
End If
End With
On Error GoTo 0
End Sub
'=====================================================================
Sub macro()
ThisWorkbook.Worksheets(1).Range("a1").Value = "書き込みTEST"
MsgBox ThisWorkbook.Name
End Sub
'======================================================================
Sub delete_bar()
On Error Resume Next
Application.CommandBars("サンプルバー").Delete
End Sub
1.このブックを適当なフォルダに適当な名前を付けて保存してください。
仮にこのブックのブック名をCmdbook.xlsとします。
2.保存が成功したら、一度このブックを閉じて、
マクロが作動可能な状態で改めてCmdbook.xlsを開いてください。
3.ツールバー「サンプルバー」が表示され、コマンドボタン「VBAサンプル」が
見えていますね?
4.このコマンドボタン「VBAサンプル」をクリックします。
5.コマンドボタン「VBAサンプル」に登録されているコードは、
「マクロの記述されているブックの最左端のワークシートのセルA1に
"書き込みTEST"と表示し、作動しているマクロがあるブック名を表示する
という動作をします。
6.いかがですか?最左端のワークシートのセルA1に
"書き込みTEST"と表示していますか?
7.「ファイル」----「名前を付けて保存」とクリックして、「Cmdbook.xls」
以外の名前で保存してください(例 Cmdbook2.Xls)
8.ブックの名前がCmdbook2.Xlsに変わっていますか?
9.このCmdbook2.Xlsを閉じてください。
10.再度、元のブックであるCmdbook.xlsを開いてください。
11.再び、コマンドボタン「VBAサンプル」をクリックしてください。
12.いかがですか?Cmdbook2.Xlsが開いて、
Cmdbook2.Xlsの最左端シートのセルA1に
"書き込みTEST"と表示し(実際には最初から表示されています)、
「Cmdbook2.Xls」とメッセージボックスで表示されましたか?
これが問題になっている現象ですが、
anakin さんの問題のブックでも似たようなことをしていませんか?
で、「プログラム(VBAコード)を記述するブックと
データを作成するブックを分ける」
というのは、
ブックCmdbook.xlsのプロシジャーmacroを以下のように変更してください。
'======================================
Sub macro()
With Workbooks.Add
.Worksheets(1).Range("a1").Value = "書き込みTEST"
MsgBox .Name
End With
End Sub
13.次いで、プロシジャー「delete_bar」を実行して、ツールバー「サンプルバー」
削除してください。
14.ブックCmdbook.xlsを上書き保存してください。
15.「2.」に戻って同じ操作を行ってください。
16.コマンドボタン「VBAサンプル」をクリックで
新規ブックが作成され、そのブックの最左端ワークシートのセルA1に
「書き込みTEST」と表示し、最後に作成された新規ブック名が表示されます。
17.これを保存すれば、データのみ保存となります。
尚、本来なら、Auto_Close()又、Closeイベント等で
ツールバー「サンプルバー」は削除することが望ましいですが、
ここでは、省略します。
上記を確認していただいて、実際のご自分が抱えているコードと
照らし合わせてみてください。
|
|