ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

お世話になります。

Accessのマクロのコマンドで
データベースの最適化をしたいのですが、
「マクロまたはVisual Basicコードの実行中に、開いているデータベースを最適化することはできません。」とういうエラーメッセージが出て最適化されません。

マクロの一連の流れの最後で、データベースの最適化をしたいと
思っていますが、具体的にどのようにすれば、
データベースの最適化を実行できるのでしょうか?
※直前に「データベースを閉じる」的な物をいれられるのでしょうか?

素人で大変申し訳ございませんが、具体的に教えて頂ければ助かります。

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

A 回答 (1件)

> マクロの一連の流れの最後で、データベースの最適化をしたいと


> 思っていますが、具体的にどのようにすれば、
> データベースの最適化を実行できるのでしょうか?

一連のマクロの最後に最適化するということなら可能だと思いますが、
一連の流れの途中に入れるは原理的に不可能だと思います。
最適化はいったんデータベースファイルを閉じますので。


方法は下記を参照ください。

Access2003以前の場合
開いているデータベースを最適化する(Access VBA)
http://www.ka-net.org/office/of05.html

Access2007
開いているデータベースを最適化する(Access 2007 VBA)
http://www.ka-net.org/office/of06.html

VBAになりますので、上記の Sub を Function に書き換えて、マクロの「プロシージャの実行」で呼び出します。
    • good
    • 1

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

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

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

関連するカテゴリからQ&Aを探す

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

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

QAccess データベースの最適化をマクロでしたい

お世話になります。

Access2000のマクロコマンドで
データベース最適化をしたいのですが、
「マクロまたはVisual Basicコードの実行中に、開いているデータベースを最適化することはできません。」とういうエラーメッセージが出て最適化できませんでした。

マクロの一連の流れの「最後」で、データベース最適化をしたいと
思っていますが、具体的にどのようにすればよいのでしょうか?

最適化をVBAなどでするのではなく、
 マクロのコマンド:データベースの最適化
でしたいと思っております。


過去の質問で、mdb自身が開いているので絶対に無理!!
と言われたのですが、いまいち信じられません。

・私が求める回答は、VBA・プロシージャは使用しない
・マクロコマンドのデータベースの最適化を使用
・マクロの流れの一部で実行
・具体的手順を記載できる人のみ回答をお願いします。


何度か同様の投稿をしましたので、ユーザーから迷惑!と言われていますので
 もうこれ以上同様の投稿はしたくありません。
この質問が迷惑と思われている方は、回答しなければ
 これ以上質問はしませんので、無視お願いします。


ひつこいですが、
・マクロコマンド:最適化を使用した具体的手順を記載できる人のみ回答をお願いします。

宜しくお願いします。

お世話になります。

Access2000のマクロコマンドで
データベース最適化をしたいのですが、
「マクロまたはVisual Basicコードの実行中に、開いているデータベースを最適化することはできません。」とういうエラーメッセージが出て最適化できませんでした。

マクロの一連の流れの「最後」で、データベース最適化をしたいと
思っていますが、具体的にどのようにすればよいのでしょうか?

最適化をVBAなどでするのではなく、
 マクロのコマンド:データベースの最適化
でしたいと思っております。


過去の質問で...続きを読む

Aベストアンサー

No2です

蛇足ではありますが、示したページにはボタンで実行するように説明さてれてますが、アクション名:キー送信、キー操作:%TDCをご自身のマクロの最後に付け足すということで実行してください。

もちろん、ページのように最適化マクロという名前にしてご自身のマクロから「マクロの実行」「最適化マクロ」で実行させてもよろしいでしょう。

ただし、ページに書かれている注意事項は確認しておいてください。

QAccess、マクロの最後に最適化を入れられる?

Access2003を使用しています。
マクロの最後に最適化を組み込むことは可能でしょうか?

マクロの内容は、
1、昨日のデータ抽出に使用した作業用テーブル内のデータを削除する
2、本日のデータをインポートしてくる
3、1で空にしたテーブルに、2のデータを追加クエリで流し込む
4、2でインポートしてきたデータ(テーブル)を削除する
です。
この後、「5、データベースを最適化する」を入れてマクロを終わらせたいのです。

インポートしてくるテーブルは8個あり、1テーブルに20万を超すデータが入っているため、インポート、追加をやっているうちに、データベースの大きさが1,126,528KBにもなってしまいます。
この後、この大容量のテーブルを使って、大容量のテーブルを作成しているうちに・・・・データベースは更に大きくなってしまい困っています。
マクロの最後に「ここで一旦最適化」を入れられないでしょうか?

このデータベースを使用するのは自分で使用するものでないため、「マクロ終了後ツールボタンで最適化する」ということが出来ません。
また、VBAはわからないので・・・出来ればマクロなどで対応できると助かります。
どなたか詳しい方、教えてください!

Access2003を使用しています。
マクロの最後に最適化を組み込むことは可能でしょうか?

マクロの内容は、
1、昨日のデータ抽出に使用した作業用テーブル内のデータを削除する
2、本日のデータをインポートしてくる
3、1で空にしたテーブルに、2のデータを追加クエリで流し込む
4、2でインポートしてきたデータ(テーブル)を削除する
です。
この後、「5、データベースを最適化する」を入れてマクロを終わらせたいのです。

インポートしてくるテーブルは8個あり、1テーブルに20万を超すデータが入っ...続きを読む

Aベストアンサー

ここら辺が参考になるかな? いずれにせよ「要VBA」です。
http://www.nurs.or.jp/~ppoy/access/access/acM018.html
http://www.ka-net.org/office.html

Access2007にすると動かなくなることもあるので、コードの
組み方には注意が必要です。手動でやる方が正解なように
私は思いますけど・・・。

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

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

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

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

Aベストアンサー

#1です。

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

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

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


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

QAccessデータベースの最適化をExcelVBAでやりたい

 レコードの追加・削除を繰り返して重たくなったAccessデータベースを軽くするために、手作業で「ツール→データベースユーティリティ→最適化」とやっているのですが、これをExcelVBAで自動化したいのです。
 ADOのコマンドでできるのでは?と勝手に考えているのですが、どうなんでしょうか?
 ExcelVBAから可能でしたら、どのように書けばよいか教えてください。
 なお、ADOの知識は非常に乏しいのですが、「ConnectionオブジェクトやRecordsetオブジェクトを定義して、レコードの追加・削除を行う」程度なら分かります。(逆に言うとそれくらいしか分かりません…)
 平易な言葉でお教えいただけると助かります。よろしくお願いいたします。

Aベストアンサー

ExcelでACCESSのライブラリを参照させます。
その上で以下のコードを実行してみてください。
ただし詳細設定は未確認です。とりあえず最適化はできてます。
(WinME+Office2000の場合)
C:\DB1.mdb を C:\DB1_2.MDBにします。


1.ExcelVBAのメニュー[ツール]-[参照設定]をクリック。
2.[Microsoft Access 9.0 ObjectLibrary]にチェックを付ける。
3.以下のコードを貼り付けて実行。
Sub ACCESSの最適化()

Dim mdbSourceDB As String
Dim mdbTargetDB As String

'最適化対象のデータベースファイル
mdbSourceDB = "C:\db1"

'最適化後のデータベースファイル
mdbTargetDB = "C:\db1_2"

'最適化を実行する
DBEngine.CompactDatabase mdbSourceDB, mdbTargetDB

End Sub

これでとりあえずは最適化できますがチューニングはがんばって見てください。

ExcelでACCESSのライブラリを参照させます。
その上で以下のコードを実行してみてください。
ただし詳細設定は未確認です。とりあえず最適化はできてます。
(WinME+Office2000の場合)
C:\DB1.mdb を C:\DB1_2.MDBにします。


1.ExcelVBAのメニュー[ツール]-[参照設定]をクリック。
2.[Microsoft Access 9.0 ObjectLibrary]にチェックを付ける。
3.以下のコードを貼り付けて実行。
Sub ACCESSの最適化()

Dim mdbSourceDB As String
Dim mdbTargetDB As String

...続きを読む

QAccessのMDBファイルを自動で最適化する方法

ACCESSで作成したMDBを自動で最適化する方法をご存知方いましたら教えて下さい。
自動で最適化といっても、例えばコマンドラインから対象MDBを最適化できる方法などでも結構です。

理想としては、対象MDBを最適化するBATを作成し、それをタスクのスケジューリングできたらいいなと思っています。

なにか良いヒントでも結構ですので宜しくお願いします。

Aベストアンサー

コマンドライン
msaccess.exe 最適化MDBファイルパス/compact [最適化後MDBファイルパス]

#MSAccessバージョンくらいは明記して欲しいところですね。

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

Qマクロでデータベースの最適化をしたい

お世話になります。

Access2000のマクロコマンドで
データベース最適化をしたいのですが、
「マクロまたはVisual Basicコードの実行中に、開いているデータベースを最適化することはできません。」とういうエラーメッセージが出て最適化できませんでした。

マクロの一連の流れの「最後」で、データベース最適化をしたいと
思っていますが、具体的にどのようにすればよいのでしょうか?

最適化をVBAなどでするのではなく、
 マクロのコマンド:データベースの最適化
でしたいと思っております。

勝手で申し訳ございませんが
A.mdbファイルを「マクロコマンド:データベースの最適化」で
最適化する具体的手順を教えて頂けないでしょうか?

過去の質問で、mdb自身が開いているので絶対に無理!!
と言われたのですが、自分自身を終了させて、最適化
などできないのでしょうか?
また、できないのであれば、「マクロコマンド:データベースの最適化」
は、使えないのに、なぜそのようなコマンドがあるのでしょうか?

具体的手順以外の回答は、結構ですので、
宜しくお願いします。


具体的手順を記載できる人を待ちたいので、できない場合は、
この質問は無視して下さい。

宜しくお願いします。

お世話になります。

Access2000のマクロコマンドで
データベース最適化をしたいのですが、
「マクロまたはVisual Basicコードの実行中に、開いているデータベースを最適化することはできません。」とういうエラーメッセージが出て最適化できませんでした。

マクロの一連の流れの「最後」で、データベース最適化をしたいと
思っていますが、具体的にどのようにすればよいのでしょうか?

最適化をVBAなどでするのではなく、
 マクロのコマンド:データベースの最適化
でしたいと思っております。

勝手で申し訳...続きを読む

Aベストアンサー

(1)
解りません。
もちろんkgyqk433さんがそのように要求される権利はありますが、私が従う義務はありませんので従いません。
この後に発言するかどうかはその時に決めます。

(2)
既に回答済みなので、読解力があるならご一読ください。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessのテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

よろしくお願いいたいます

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。


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

人気Q&Aランキング