テーブルのみのMDBファイルがあります。(フォームなし)
このMDBファイルを開いたときにマクロ1を実行させるにはどうすればいいでしょうか?
フォームやレホ゜ート以外にもイベントプロシージャーはあるのでしょうか?
もしくは「起動時の設定」で「マクロ1を実行する」ことは可能ですか?
よろしくお願い致します。(ヴァージョン2003)

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

A 回答 (2件)

No.1です。



> 標準モジュールに

・・・すみません。
AccessよりExcel等の方に慣れている方の場合、「VBA=マクロ」と
思われることが多いというのを忘れていました(汗)

データベースウィンドウ(テーブルやクエリ、フォームなどの一覧が表示
される画面)に、『マクロ』というのがあると思います。
そこで作成する方の『マクロ』で、VBAで組む『モジュール』とは別の
ものになります。
そちらで、『AutoExec』という名前のマクロを作成してください。


※添付画像は、『AutoExec』マクロのデザインビューの例になります。
 (「マクロ1」がSubプロシージャの場合は、戻り値はなくても構わない
  のでとりあえずFunctionプロシージャに変更した上で、
  『AutoExec』マクロの『アクション』欄に「プロシージャの実行」を
  指定し、画面左下でそのプロシージャ名を指定します:
  末尾に「()」(括弧)が必要だったはずなのでご注意のほど)
「アクセス起動時にVBAを実行させるには?」の回答画像2
    • good
    • 0
この回答へのお礼

そっちのマクロですね!
できました!できました!
わざわざご丁寧にありがとうございます。

お礼日時:2009/05/27 23:40

「Autoexec」または「AutoExec」という名前のマクロを作成すると、


そこに記述されたアクションが、起動時に自動的に実行される
ようになります。

ですので、
 a)マクロ1の内容をこちらに転記する
 b)マクロ1の名前を上記の名前に変える
 c)上記のマクロの『アクション』に「マクロの実行」を追加し、
  その『マクロ名』引数に「マクロ1」を指定
のどれかやりやすい方法で対応すれば、Okです。

なお、『起動時の設定』と同様、Shiftキーを押しながら起動した
場合は、このマクロも無視されますので、併せて参考まで。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
しかしうまくいきません。
試しに、b)の方法で
標準モジュールに
Sub AutoExec()
MsgBox "test"
End Sub
としてみましたが
起動時に動きません。
何かおかしいでしょうか?

お礼日時:2009/05/27 22:30

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

Qアクセスでファイルを開いたときにマクロ実行しない方法はありますか?

セキュリティレベルが「中」の場合
エクセルなら「マクロを無効にする」「マクロを有効にする」
という選択がありますが
アクセスの場合
「キャンセル」と「開く」しかない為
マクロ実行せずにファイルを開けないです。

もし起動時に実行するとまずいコードを作ってしまった場合
アクセスならファイルを起動すれば
強制的にマクロを実行することになるのでしょうか?

アクセスで
ファイルを起動時にフォームを起動しそれと同時にデータ削除のマクロを組んでしまった場合
ファイルを開くけどマクロ実行しない方法はありますか?

Aベストアンサー

『起動時の設定』(メニューで「ツール(T)→起動時の設定(U)」)や、
『Autoexec』マクロ(この名前で保存したマクロは、通常起動時に
自動的に実行される)を中止させたい、という意味でよろしければ、
Shiftキーを押しながら起動すればOkです。
(「キャンセル」と「開く」で、Shiftキーを予め押した状態にして、
 そのまま「開く」をクリック(またはEnter)を押す:Shiftと同時押し)

なお、こうして起動した場合も、Excelとは違って、Autoexecマクロや
各フォームのVBA/マクロは、それらを開くと起動してしまいますので
ご注意下さい。
(Accessでは、マクロを完全に無効にした状態で開くことはできず、
 あくまで『起動時の設定』と『Autoexec』マクロを無視するだけです)

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。

QAccess終了時にマクロまたはVBAの実行したい

Access初心者です。
Accessを起動するときにマクロを実行する方法として「autoexec」がありますが、終了時にマクロまたはVBAを実行する方法がありますか教えてください。(Access終了時に自動的にバックアップを取るようにしたいため。)

Aベストアンサー

起動時の autoexec マクロのようなものはないので、

常に開いてるメニューフォームのようなものがあるなら、そのフォームの閉じるときのイベントにマクロかVBAを設定してください。

そのようなフォームがないなら、autoexec か 起動時の設定で、特定のフォームを非表示で開いておいて、そのフォームの閉じるときのイベントに設定します。

QACCESSを開くと最初にフォームを開くには?

いつもお世話になっています。
Access2003を使っています。
例えばデスクトップ上からAccessを開くと最初にテーブルの一覧等の画面がでてきますよね?
それを最初に開いたときに作成済みのフォームが開くようにしたいのです。要はユーザーインターフェイスで開きたいのです。
いろいろ探しては見たものの、そもそも探し方がわからずまたここにきてしまいました。
ヒントでも良いので教えていただければ幸いです。
よろしくお願い致します。

Aベストアンサー

ツールの中に「起動時の設定」ってのがあるので
そこのフォーム/ページのとこを
開いてほしいフォームにすればOK

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

QACCESSでDBを開いたときに、フォームを起動させたい

ACCESSを開こうとして、
test.mdbのアイコンををダブルクリックなどして開いたときに、
testのフォームを起動させたいのですが、
どうしたらいいのでしょうか。
宜しくお願いします。

Aベストアンサー

どうもです。
ツール→起動時の設定→フォーム/ページの表示
で起動した時に表示したいフォームを選べば出来ます。
デザインなどを変更する時は、Shiftを押しながら起動すれば出来ます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報