エクセルで作ったマクロを自動実行・自動保存・自動終了したいので、下記のような
記述のマクロをつくり、Windowsのタスク処理で1回/日実行させようとしています。
----<ここから>------------------------------------
Sub Auto_Open()
   :
  :
  Workbooks("ekuseru.xls").Close SaveChanges:=True
End Sub
----<ここまで>------------------------------------

質問その1
 マクロを編集したい場合はどうすればいいのでしょう?
 そのBookを開くとマクロが動き出し、保存した上で終了してしまいます。
 マクロ無効でBookを開くと「ツール」⇒「マクロ」⇒「マクロ」で「編集」はクリッ
 クできないようになってます。

質問その2
 マクロが終了するとき、Bookは閉じますがエクセル自体は閉じません。
 (意味通じますか?)
 エクセル自体を閉じるにはマクロの記述はどうすればいいのでしょう?


以上、よろしくお願いします。

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

A 回答 (1件)

(1)


無効で開いて、Alt+F11を押して
左上辺りにある奴を適当にダブルクリックして下さい。
その中のどこかにあります。
見えない理由は頭にPrivateが付いてるからだと思います。

【見える】
Sub プログラム名()
End Sub
【見えない】
Private Sub プログラム名()
End Sub

(2)
(大きい) エクセル→ブック→シート→セル (小さい)って
感じになってます。Close命令はブックを終了させる事は出来ても
エクセルを終了させる事は出来ません。
エクセルを終了させる場合はapplication.Quitを使います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
教えていただいた内容でやりたいことができました。

(2)のApplication Quitは試行錯誤したのですが、ネットで検索し、
記述内容がわからないまま「流用したらできてしまった」って感じですが、
やりたいことが叶ったのでそのまま使ってます(^^;)

お礼日時:2009/05/26 05:55

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

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

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

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

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

Aベストアンサー

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

QPrivate Sub Workbook_BeforeSaveについて

エクセル2000です。
腑に落ちない現象が起きているので質問させてください。
Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.TextBoxes("テキスト").Visible = True
Sheet1.Buttons("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と書いてみました。
手動で保存する場合には正しく、テクストボックスやボタンは正しく表示されます。もちろんMsgboxも出ます。

ところが、標準モジュールに書いた以下のコード、

Sub 保存()
ActiveWorkbook.Save
End Sub

を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。
試行錯誤の結果、
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.Shapes("テキスト").Visible = True
Sheet1.Shapes("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と書くと、標準モジュールから、ActiveWorkbook.Saveでも表示されることがわかりました。
どうしてでしょうか?

エクセル2000です。
腑に落ちない現象が起きているので質問させてください。
Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.TextBoxes("テキスト").Visible = True
Sheet1.Buttons("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と...続きを読む

Aベストアンサー

>を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。

ユーザー関数を抜けて「シートが待ち状態になるまで」は、シート上の子コントロールのVisibleプロパティの変化は反映されません。

ところが「セーブしちゃうと、Visibleプロパティが変化したのを忘れてしまう」ので「Sub 保存()を抜け、Visibleプロパティの変化が反映されるタイミング」には、もう「Visibleプロパティが変化したのを忘れている」のです。

つまり、Sub 保存()を抜けるまで、Visibleプロパティを変化させても反映されません。

しかし、ShapesのVisibleプロパティは「見た目だけを即座に画面に反映する」ので、Visibleプロパティを変更した瞬間に画面に反映されます(但し、反映されるのは「見た目だけ」なので、そのコントロールがクリック可能とは限りません)

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

Q複数Bookオープンで片方閉じると全て閉じてしまうのはなぜ?

Windows98環境でEXCEL2000を使用していますが、どうしても納得いかない現象に出くわしています。EXCELで複数Book(複数のXLSファイル)をオープンして作業することはよくあると思います。ところが、一方のBookファイルを閉じる(Close)と他のオープン中のBookも全て閉じて(Close)しまいます。さらに始末が悪いのは他のオープン中のBookが
編集中であっても、何のメッセージもなく問答無用で閉じてしまうのです。勿論編集中のデータは消えてしまっています。こんなことってあって良いのでしょうか。EXCEL97を使っていた時は、こんな現象はなかったと思います。使い方が悪いのか、EXCEL2000の不具合なのかわかりません。どうかご教授頂ければと思います。宜しくお願い申し上げます。

Aベストアンサー

あまり自信は無いのですが…
個人用マクロブック(personal)にマクロが登録されているって事は、ありませんでしょうか?
または、複数Bookの中にマクロが記述されているbokkがあるとか…

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【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

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のマクロでBook1立ち上げ時に自動で別のBookを起動するには

あるアプリケーションでEXCEL型式での出力処理をすると自動的にEXCELが起動し、「Book1」として出力されます。
このときに、自動的に別の.xlsファイルが起動するマクロを組みたいと考えています。

他のEXCELファイルから起動する際にはこの機能は必要ないため、「Book1」が開いたときにのみ有効にしたいのです。

どうぞ、お知恵をお貸しください。

Aベストアンサー

VBAProject(PERSONAL.XLS)
に、クラスモジュールを追加

クラスモジュールのプロパティを下記に設定

(オブジェクト名) EventClassModule
Instancing 1-Private

EventClassModule クラスに下記のコードを追加
'-------------------------------------------
Public WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
If (Wb.Name = "Book1.xls") Then
'----------------------------
'実際には開きたいブックに変更
Call Application.Workbooks.Open(C:\abc.xls")
End If
End Sub
'-------------------------------------------


ANo.2 さんの回答で記載した
Sub Auto_Open()
Workbooks.Open "C:\abc.xls" ←フルパスで
End Sub

の部分を下記に変更
Dim X As New EventClassModule
Sub Auto_Open()
Set X.App = Application
End Sub

ここで、一旦ブックを保存 → PERSONAL.XLS 再立ち上げして
Book1を読み込んでみてください。

VBAProject(PERSONAL.XLS)
に、クラスモジュールを追加

クラスモジュールのプロパティを下記に設定

(オブジェクト名) EventClassModule
Instancing 1-Private

EventClassModule クラスに下記のコードを追加
'-------------------------------------------
Public WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
If (Wb.Name = "Book1.xls") Then
'----------------------------
'実際には開きたいブックに変更
Call Application.Workbooks.Open(C:\abc.xl...続きを読む

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),"")を設定
   入力文字列が存在しない場合は空白としています。

Q続 EXCELのマクロでBook1立ち上げ時に自動で別のBookを起動するには

QNo.3774822 「EXCELのマクロでBook1立ち上げ時に自動で別のBookを起動するには」(http://oshiete1.goo.ne.jp/qa3774822.html)でお世話になった者です。その節は多くの方にご回答いただき有難うございました。

前質問ではANo.6にて必要な回答が得られたため締め切り手続きを行ったのですが、この間にANo.7の回答をいただきました。この内容は私にとって大変興味深いもので早速試してみたのですが、私には高度な内容でうまく動作させられませんでした。既に締めていたため新たな質問もできず、こちらに質問させていただく次第です。

次のコードを正しく実行するための記述の仕方をアドバイスいただければ幸いです。

以下ANo.7のご回答者様の回答の抜粋です。

'=============================================
以下は、ほんのお遊びにしか過ぎませんが、こんなことが可能です。
なお、Book1... のような名称というのは、仮の名称であって、特に、それ自体が存在しているとはいえません。

Book1... のSheet1 のA1 に、hirakegoma と入ったときにだけ、別のファイルが開きますが、以下の「待ち時間」の4秒後を過ぎると、何も起こりません。4秒後に入れたものには何も起こりません。開いたと同時では、場合によってはマクロの検索は利かないはずです。

以下のマクロは、カプセル化もしておりませんし、本格的な内容ではありませんが、このようなことが可能です。また、別のソフトのインスタンス生成自体では、Excelのアプリケーションがどのような反応をするかは分かりません。

個人の場合は、"PERSONAL.XLS" ですが、他人に配布する場合は、アドインになると思います。

また、Excelが起動したときに、ブックの中身やブックの名称を全部調べるという方法も可能だと思います。

ループで、
For Each wb In Workbooks
 If wb.Name Like "Book#*" Then
   Workbooks.Open "Abc.xls"
 End If
Next

'-------------------------------------
'Class1
'-------------------------------------
Public WithEvents App As Application

Private Sub App_NewWorkbook(ByVal Wb As Workbook)
'待ち時間
Const TIMELAG As Integer = 4
  Set NewWb = Wb
  Application.OnTime Now + TimeValue("00:00:" & CStr(TIMELAG)), "OpenSesame"
End Sub

'--------------------------------------
'標準モジュール
'--------------------------------------
Public myClass As New Class1
Public NewWb As Workbook
Public Sub OpenSesame()
'添付用のブック
Const MYBOOK As String = "Test1.xls"
With NewWb.Worksheets(1)
 If StrComp(.Range("A1").Value, "HirakeGoma", 1) = 0 Then
  If Dir(MYBOOK) <> "" Then
   Workbooks.Open "Test1.xls"
  Else
   MsgBox MYBOOK & "のワークブックが見当たりません。", 48
  End If
 End If
End With
Set NewWb = Nothing
End Sub


'--------------------------------------
'ThisWorkbookモジュール
'--------------------------------------

Private Sub Workbook_Open()
 Set myClass.App = Application
End Sub

'標準モジュールのAuto_Openの場合は、オートメーションでは、そこを通らない可能性があるから、ThisWorkbook モジュールに入れたほうがよいです。Auto_Open は、あくまで、Excelを単独に開いたときだけです。

QNo.3774822 「EXCELのマクロでBook1立ち上げ時に自動で別のBookを起動するには」(http://oshiete1.goo.ne.jp/qa3774822.html)でお世話になった者です。その節は多くの方にご回答いただき有難うございました。

前質問ではANo.6にて必要な回答が得られたため締め切り手続きを行ったのですが、この間にANo.7の回答をいただきました。この内容は私にとって大変興味深いもので早速試してみたのですが、私には高度な内容でうまく動作させられませんでした。既に締めていたため新たな質問もできず、こちらに質問さ...続きを読む

Aベストアンサー

こんばんは。

>吐き出した際に立ち上がるEXCELには個人用マクロブック(PERSONAL.XLS)が存在しないようです。
>プログラムがEXCELを立ち上げているからでしょうか。

期待をさせて大変にすみません。ご指摘の通りでした。その立ち上がりが、オートメーションといって、

Set objExcel = CreateObject("Excel.Application")

こういうスタイルで、呼び出されているのではないか、ということに気がつきました。

Shell で呼び出しされているのなら可能ですが、その可能性は薄いです。理由は、データの吐きだしが利かないからです。

そうすると、例えば、アドインなども呼び出されてはいないはずです。本来、そのオートメーション側がある程度書き換えることが可能なら、この先の展開も可能なのですが、この場合は、自動起動するマクロ自体が、そのオートメーション側から呼び出さない限りは、使えないのです。

ただし、PESONAL.XLS 等に登録した、コマンドボタンの呼び出しだけには応じるようです。

だから、アドインでコマンドボタン自体を取り付けることは可能(XL2003以下)ですが、そのまま、自動起動というわけにはいかないようです。思うようにいかなくて、すみません。

こんばんは。

>吐き出した際に立ち上がるEXCELには個人用マクロブック(PERSONAL.XLS)が存在しないようです。
>プログラムがEXCELを立ち上げているからでしょうか。

期待をさせて大変にすみません。ご指摘の通りでした。その立ち上がりが、オートメーションといって、

Set objExcel = CreateObject("Excel.Application")

こういうスタイルで、呼び出されているのではないか、ということに気がつきました。

Shell で呼び出しされているのなら可能ですが、その可能性は薄いです。理由は、データの...続きを読む


人気Q&Aランキング

おすすめ情報