OS:Win2000
Excel2000

ExcelでモジュールシートとThisWorkBookにVBAコードを作成しました。
このVBAを他の16個のExcelブックへ展開するのですが、
何か変更があった場合、16個のbookを修正しなければなりません。
管理が煩雑になるので、避けたいのですが何か良い方法はありますでしょうか?

16個のExcelブックは同じフォルダーで管理され、
Lan又はHttp(Web)で複数人が照会、変更を行います。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

アドインを利用するには、


1.利用者のパソコン内のアドインフォルダにアドインファイルを入れる(ファイルのコピー等)
2.Excelでアドインを追加(登録)
して、初めて使用可能になります。

アドインを更新した場合に備えて、利用者がファイルを開いたときに、アドインファイルのバージョンをチェックして書き換えを行うような処理が必要になります。

全ユーザーに「プログラムを変えたからexcelのアドインを更新してください」って通知しても、意味を理解して更新を行う方はどれくらい居るでしょうか・・・。

その辺りを考慮しておかないと、メンテナンスの為に無用な手間が増える可能性も有ります。

上記の事はVBAで処理が可能ですが、後々の事(担当が変わる等)を考えると簡便な方法で行う方が良いかと思います。
    • good
    • 0
この回答へのお礼

参考Urlを見て試した所、

1.共通マクロのあるブックを拡張子「.xla」で保存。(アドイン化)
2.共通マクロを使用するブックから「WorkBook.Open」で「.xla」を開く

と言う処理をすれば、本当の意味での「アドイン」では無いかも知れませんが、
思った事が実現できるようです。

>全ユーザーに「プログラムを変えたからexcelのアドインを更新してください」って通知しても、意味を理解して更新を行う方はどれくらい居るでしょうか・・・。

これは全く期待できません。
クライアントにPGMを持たせ、入れ替えが発生する用ならActiveX等を考えます。

回答ありがとうございました。

お礼日時:2005/04/13 17:48

#1 の応用と言うか 逆のほうが扱いやすいかも・・。



「16個のいずれかが読み込まれた時点で、
"プログラムBOOK.xls"は、読み込まれている状態であれば」
と言う点について
"プログラムBOOK.xls"(プログラムが書かれている) を 主のBookとして
複数人が照会、変更の際 主のBook を開き
このBookの(選択ボタンなどで作ったメニュー)マクロ操作から 16個のBookを開く。 
場合によっては 共有のため 読み込み専用などのアクセス制限をする。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

マクロのあるブックにメニューを作るって事ですよね?

実はWebページ(ASPプログラム)があってそこにブックの一覧が表示され、
webページのボタンとチェックボックスで開くブックを
コントロールしています。

なので、この案はちょっと無理です。

お礼日時:2005/04/13 11:13

アドインにして仕舞えば面倒なコードの展開も不要ですし、管理も一括で行えます。


マクロでアドインの組み込みや解除の制御も可能です。

あとは、アドインが修正された場合の自動対応が必要ですね。

なので、#1さんの方法が一番簡単かもしれません。

参考URL:http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub0 …

この回答への補足

お返事ありがとうございます。

参考URLを見させていただきました。
アドインなんて機能があるのですね。知りませんでした。
ユーザーさんから別のファイルが開いているのも判らないし、これなら、良さそうな気がします。

ただ、「アドインが修正された場合の自動対応が必要ですね」とはどういう事なんでしょうか?

私はこのアドイン機能は#1さんの提案の「Excelブック(.xls)を開く」って所が「アドイン(.xla)を開く」に変わっただけと理解しているのですが?

補足日時:2005/04/13 11:01
    • good
    • 0

こんな方法は、いかがでしょうか?



共通のVBAのプログラムを
"共通プログラム1"
と、します。
VBAのプログラムの書かれたBOOKを
"プログラムBOOK.xls"
として、保存します。
他の16個のBOOKには、

Sub 実行するプログラム()
'
Application.Run "プログラムBOOK.xls!共通プログラム1"
End Sub

という、VBAを書きます。
16個のいずれかが読み込まれた時点で、
"プログラムBOOK.xls"
は、読み込まれている状態であれば、INOPIIさんの目的通りのことが出来ると思いますが。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
最初はそう考えたのですが、ユーザーにとって関係のないブックを開くのに抵抗があります。
また、Httpでも使用するのですが、ちゃんと動くのかが不安です(テストしてませんが)
ちょっとサンプル作ってテストしてみます。

お礼日時:2005/04/13 10:55

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

Q【Excel VBA】ThisWorkbook モジュールのマクロ

Excel2003を使用しています。

39枚のシートから成るBook1のThisWorkbook モジュールに、C列に“○月計”と入力されたら、その行のE列、F列、G列へ数式を入力するコードを書いています。

現在は、それぞれのシート(39枚のシートのうち3枚を除く36枚)のC列最終行から2行下のセルへ“○月計”と手入力していますが、マクロで“○月計”と入力されるようにすれば、ThisWorkbook モジュールに書いているコードも実行されて、数式の入力までマクロで処理できるのかな?と思い、試しに、36枚それぞれシートのC列最終行から2行下のセルへ“○月計”と入力されるようコードを書いてみました。

…が、そうではないのか、それぞれのシートのC列最終行から2行下のセルへ“○月計”と入力されるものの、E列、F列、G列へ数式は入力されません。

せっかくなので、できることなら数式の入力までマクロで処理したいのですが、どのようにしたらThisWorkbook モジュールに書いているコードまで実行されるのでしょうか?
よろしくお願いします。

Excel2003を使用しています。

39枚のシートから成るBook1のThisWorkbook モジュールに、C列に“○月計”と入力されたら、その行のE列、F列、G列へ数式を入力するコードを書いています。

現在は、それぞれのシート(39枚のシートのうち3枚を除く36枚)のC列最終行から2行下のセルへ“○月計”と手入力していますが、マクロで“○月計”と入力されるようにすれば、ThisWorkbook モジュールに書いているコードも実行されて、数式の入力までマクロで処理できるのかな?と思い、試しに、36枚それぞれシートのC列最終行から2...続きを読む

Aベストアンサー

No2です。

<方法1>
(No1様の回答の前半の方法)
・Macro1の処理内(End Withの前)に、 Workbook_SheetChangeの処理
 内容をそのまま入れてしまう。(コピペでも良い)
・そのままだと処理がうまくつながらないので、データの受け渡し部分
 を修正。
 Dim shName As String
 shName = Sh.Name
    ↓
 Dim shName As String, Target as Range
 shName = .Name
 Set Target = .Cells(LastR, "C")
みたいな感じ。


<方法2>
(No2の回答内容:基本的には方法1と同じ)
・Private Sub Workbook_SheetChangeはイベント用サブルーチン名の
 予約語なので、別の適当な名に変更する。(例えば: Sub Test)
・Macro1のループ内から<方法1>でコードをコピペした変わりに、↑の
 Sub Testを呼び出すようにする。
 Call Test(Worksheets(shNum), .Cells(LastR, "C"))

注)
1)もしもMacro1が、ThisWorkbookモジュール以外にある場合は<方法2>
 のままではサブルーチンコールができません。
 Macro1をThisWorkbookモジュールに移動するか、Testを標準モジュール
 に移動します。
 TestとMacro1が同じモジュール内にあるならそのままでOKですが、
 違うモジュールにおく場合(Module1とModule2など)、はTestの前の
 Private宣言をはずしてください。
2)Targetは多分予約語ではないと思いますが(未確認)、できれば他の
 変数名にしておいた方が安全かも…

No2です。

<方法1>
(No1様の回答の前半の方法)
・Macro1の処理内(End Withの前)に、 Workbook_SheetChangeの処理
 内容をそのまま入れてしまう。(コピペでも良い)
・そのままだと処理がうまくつながらないので、データの受け渡し部分
 を修正。
 Dim shName As String
 shName = Sh.Name
    ↓
 Dim shName As String, Target as Range
 shName = .Name
 Set Target = .Cells(LastR, "C")
みたいな感じ。


<方法2>
(No2の回答内容:基本的には方法1と同じ)
・Private...続きを読む

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

QExcel VBAで検索(Win2000 Excel2000)

現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。

-----------------------------------------
Sub 検索1()
Worksheets("Data").Activate
Dim x As Integer
For x = 3 To 22
If Cells(2, x).Value >= 12 Then
MsgBox x
Exit Sub
End If
Next
MsgBox "見つかりません"
End Sub
---------------------------------------------
Sub 検索2()
Worksheets("Data").Activate
Dim i As Integer
For i = 4 To 42
If Cells(i, 2).Value = "A" Then
MsgBox i
Exit Sub
End If
Next
MsgBox "見つかりません"
End Sub

現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。

-----------------------------------------
Sub 検索1()
Worksheets("Data").Activate
Dim x As Integer
For x = 3 To 22
If Cells(2, x).Value >= 12 Then
MsgBox x
Exit Sub
End If
Next
MsgBox "見つかりません"
End Sub
-----------------...続きを読む

Aベストアンサー

Worksheets("Data").Activate
Dim x As Integer
Dim y as Integer

For x = 3 To 22
 If Cells(2, x).Value >= 12 Then
 MsgBox x
 For y = 4 To 42
  If Cells(y, 2).Value = "A" Then
   MsgBox y
   Exit Sub
  End If
 Next
 End If
Next
MsgBox "見つかりません"
End Sub

これだと、縦位置2の行で、まず横方向で12を探し見つかったら、その位置をメッセージ表示します。
で、横位置2の列を、縦方向に検索し見つかったら、メッセージ表示をし、関数を抜けます。見つからなければ”見つかりません”のメッセージを表示します。
こんな所で如何でしょう?

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

Qエクセル2013VBAでThisWorkbook.Close実行後残ったブックが停止する

お世話になります。
エクセル2013のVBAで質問があります。

VBAを使って、あるブックをコピーして新しいブックを新規作成します。
それで、元のブックを保存して閉じるのですが、なぜか新しいブックの方に文字入力しようとすると
Microsoft excelは動作を停止しました、と表示され一旦とじられてしまいます。
再起動すると、正常動作しますが、どうしてこのようになると考えられますか?
実験的に、クローズさせるところのみを抜き出して他のブックで試しましたが、問題なく動作しました。

あと、Application.ScreenUpdatingとかは、複数開く場合、両方のブックに対して行う必要はないですか?
特に、どのブックと意識せずに単純に指定しておけばよいものなのでしょうか?

Sub sample()
Dim etc_path As String

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

etc_path = "クローズ実験2.xlsm"
 Workbooks(etc_path).Activate

If MsgBox("ファイルを保存して閉じておきますか?", vbYesNo, "前月ファイル保存クローズ!") = vbNo Then
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
Else
ThisWorkbook.Activate
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic

Workbooks(etc_path).Activate
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Workbooks(etc_path).Save

ThisWorkbook.Save
ThisWorkbook.Close
End If
End Sub

お世話になります。
エクセル2013のVBAで質問があります。

VBAを使って、あるブックをコピーして新しいブックを新規作成します。
それで、元のブックを保存して閉じるのですが、なぜか新しいブックの方に文字入力しようとすると
Microsoft excelは動作を停止しました、と表示され一旦とじられてしまいます。
再起動すると、正常動作しますが、どうしてこのようになると考えられますか?
実験的に、クローズさせるところのみを抜き出して他のブックで試しましたが、問題なく動作しました。

あと、Applic...続きを読む

Aベストアンサー

こんにちは。

>何かが他のブックにも影響しており一応操作ができるけど裏でユーザーフォームが解放されずに残っているのではないか?という所が引っかかります。

この話は、97の時代からなのです。私の中では確信を得ているのに、Microsoft とか、掲示板でとかでは、あまりこの話題は上がらないような気がします。
おっしゃっている話は、私もずっと長い間の懸念しています。

>Closeより前にUnload Meで終了するようにはなっており
UserForm から、Application全体を終了させようとしたら、突然、Excelが消えてしまうということがありました。また、掲示板でも、プロの開発者の人から、そういう現象を問題にしていることを教えてもらいました。

つい先月の質問者さんでも、かなり難しい本で勉強している方が、そのような部分が出てきましたので、アドバイスをしました。

>ユーザーフォームが解放されずに残っているのではないか
先程から、私の持っているツール総動員でプロセスを調べてみましたが、ずっとUserForm の出入りの違いは出てきません。Excel自体で、立ち上げとUnloadで、UserFormのメモリが増減することはありませんでした。ということは、UserForm というインスタンスが既にある以上は、立ち上げていてもそうでなくても、アプリケーション上?は、立ち上げているのと同じことにならないでしょうか。

ただ、プロセスモニター(Promon)で、UserForm を終了する時に、こんな項目が出てきています。調べてみました。

IRP_MJ_CLOSE

と、いうことは、これはキャッシュの終了の時に出てくるものだそうです。詳しいことは分かりませんが、この処理の手間が問題を起こすのかもしれません。

ちなみに、Mr.Excel や StackOverFlow サイトでも同じような、hang とか crash という言葉は出てきますが、肝心の、VBAコードがほとんど出ていないので、確証をつかめませんでした。

こんにちは。

>何かが他のブックにも影響しており一応操作ができるけど裏でユーザーフォームが解放されずに残っているのではないか?という所が引っかかります。

この話は、97の時代からなのです。私の中では確信を得ているのに、Microsoft とか、掲示板でとかでは、あまりこの話題は上がらないような気がします。
おっしゃっている話は、私もずっと長い間の懸念しています。

>Closeより前にUnload Meで終了するようにはなっており
UserForm から、Application全体を終了させようとしたら、突然、Excelが消えて...続きを読む

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

QExcelで大量の2000個のリストを100個ずつ

お世話になります。

データが12000件ほどあるのですが、これを100件くらいずつにわけて保存したいのです。

途中で区切りとかがあるわけではなく、タダひたすらデータが

××××××@×××.××.××
××××××@×××.××.××
××××××@×××.××.××








と入力されてあるのですが、これを300個区切りくらいに分けるのを簡単にする方法はないものでしょうか。

なければ地道にマウスで100個ずつ選んで切り取っていくしかないので、もしなにか良い方法があれば是非ご助言いただきたいです。

Excel2000です。

どうかよろしくお願いいたします。

Aベストアンサー

テキストファイルにして、
テキストファイルの行数を指定して分割するフリーソフトを
使うのがいいのでは、

http://www.vector.co.jp/soft/win95/util/se088352.html

http://www.vector.co.jp/soft/dos/util/se228325.html

http://www.vector.co.jp/soft/dos/util/se300863.html

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

QExcel VBAでブックを閉じる時、複数のブックが開いていると・・・。

WinXP+Excel2002なのですが、

ExcelのVBAでつくったアプリの中に、

Application.Quit
ThisWorkbook.Close False

と記述し、終了させる部分があります。
複数のブックが開いているときにこのプログラムを実行すると、
他のブックまで閉じようとするのですが、
これは何ともならないのでしょうか。

複数のブックを開いた状態でVBEを開くと、
どのブックをアクティブにしておいても、他のブックの
モジュールが出てきますよね。これに関係あるのでしょうか。
VBAはそのブックだけに記述することができる・・・のでしょうか?
調べてみたのですがよくわかりませんでした。

基本的なことで恐縮ですが、こんな私にわかるよう
教えてくださる方いらしたらお願いいたします。

Aベストアンサー

>複数のブックを開いた状態でVBEを開くと、

アドインを除けば、エクセルのウィンドウメニューに表示されたブック名のプロジェクトが表示されます。

複数のエクセルプログラムが起動しているのではなくて、エクセルというプログラムで管理されたファイル(ブック)が表示されています。

>VBAはそのブックだけに記述することができる・・・のでしょうか?

VBAのコード(モジュール)はブック単位で管理しています。
しかし、動作が影響するのは「エクセル上」ですから、記述したブックだけと言うことはできません。
しかし、動作範囲を限定させたりそれを考慮したプログラムを書くことは可能です。

「Application」はエクセルの機能を指すので、「.Quit」させると、同時に開いているブックも閉じてしまいます。(エクセルアプリケーションの終了)
「ThisWorkbook」は、VBAが実行しているブックの事なので、「.Close」しても他のブックに影響する事はありません。

workbooks.count
で、同時に開いてるブックの数が解ります。
1かそれ以外で処理を分ける事で、今回の件は解決(回避)が可能です。


プログラムの動作が理解出来ていて、実際の使用時の事を考慮した場合、ご呈示のようなプログラムを書くことはまず無いでしょう。

>複数のブックを開いた状態でVBEを開くと、

アドインを除けば、エクセルのウィンドウメニューに表示されたブック名のプロジェクトが表示されます。

複数のエクセルプログラムが起動しているのではなくて、エクセルというプログラムで管理されたファイル(ブック)が表示されています。

>VBAはそのブックだけに記述することができる・・・のでしょうか?

VBAのコード(モジュール)はブック単位で管理しています。
しかし、動作が影響するのは「エクセル上」ですから、記述したブックだけと言う...続きを読む


人気Q&Aランキング

おすすめ情報