出産前後の痔にはご注意!

Accessでマクロを使ってエクセル出力をしています。
出力時に自動的にマイドキュメントに保存されてしまうのですが、
保存先を選択するダイアログを表示させることは可能でしょうか。
VBAを使わないとだめなのでしょうか。
教えてください。
よろしくお願いします。

A 回答 (1件)

マクロは何を使っていますか?


「出力」 アクションなら、
ファイル名を省略すれば 「ファイルへ出力」 ダイアログが表示されますが。
    • good
    • 1
この回答へのお礼

別のマクロを使っていたのですか、「出力」アクションにして、
ダイアログを表示させるようにできました。
どうもありがとうございました。

お礼日時:2007/04/09 16:13

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

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

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

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

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

QAccess Excel出力する保存先を指定したいのですが?

Access初心者です。2003です。
7000ほどのデータを70ほどの抽出条件ごとにエクセルにしています。

抽出条件毎にクエリを複数作成し、各クエリが抽出したデータをマクロでエクセルに出力させています。このマクロをクエリ分作成し、別のマクロでその複数マクロをいっせいに実行させています。マクロには「コマンドの実行」で「Excelに出力」を使用しています。このアクションを使用するとマイドキュメントにエクセルが保存されてしまいます。(たまにディスクトップになります。)
この保存先を指定したいのです。ダイアログではなく、設定した任意のフォルダにいっせいに収まるようにです。

「出力」アクションだと保存先のダイアログが出てくれますが、クエリの数が多いので手作業が増えてしまいます。「コマンドの実行」のExcel出力ですと手作業が無いのですが、マイドキュメントに保存されてしまいます。

私がツールを作成し、Accessを知らない人間がフォーム画面で使用するのでなるべく自動化したいと考えています。

へたくそな文ですが、どなたか助けてください。

Access初心者です。2003です。
7000ほどのデータを70ほどの抽出条件ごとにエクセルにしています。

抽出条件毎にクエリを複数作成し、各クエリが抽出したデータをマクロでエクセルに出力させています。このマクロをクエリ分作成し、別のマクロでその複数マクロをいっせいに実行させています。マクロには「コマンドの実行」で「Excelに出力」を使用しています。このアクションを使用するとマイドキュメントにエクセルが保存されてしまいます。(たまにディスクトップになります。)
この保存先を指定したいので...続きを読む

Aベストアンサー

1つ目のクエリだけ「出力」で保存先を指定し
残りを「コマンドの実行:Excelに出力」 にしたらいかがですか?
1度ダイアログで変更するとカレントがそのフォルダにかわりますので
以降は、新しいカレントのフォルダに出力されます。

QCSVファイルを任意の場所に出力するには?

ACCESS-VBAの初心者です。
ACCESSのテーブルを、csvファイルとして、任意の場所に出力させるには、どのようにしたら良いのでしょうか。
当方初心者につき、なるべく簡単な方法だとさらに助かるのですが。

Aベストアンサー

No.2です。
便利な使い方があるんですね。知りませんでした!

せっかくやる気を出しているので、以下のAPIでダイアログを表示したらどうでしょうか(ネットで調べたものを多少修正しました)。自分の使いやすいように修正してください。このまま使用するなら該当するフォームにそのまま貼り付けてください(=== の間)。
=============================================================
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
lStructSize As Long '構造体のサイズ
hwndOwner As Long '親ウィンドウのハンドル
hInstance As Long 'モジュールのインスタンスハンドル
lpstrFilter As String 'VBのファイルパターン
lpstrCustomFilter As String 'カスタムフィルタ
nMaxCustFilter As Long '同バイト数
nFilterIndex As Long 'フィルタのインデックス
lpstrFile As String 'フルパス名を受取るバッファ
nMaxFile As Long '同バイト数
lpstrFileTitle As String 'ファイル名を受取るバッファ
nMaxFileTitle As Long '同バイト数
lpstrInitialDir As String '初期ディレクトリ名
lpstrTitle As String 'ダイアログボックスのキャプションタイトル
flags As Long '動作を指定する定数の組合せ
nFileOffset As Integer 'フルパス中のファイル名までのオフセット
nFileExtension As Integer '同 拡張子までのオフセット
lpstrDefExt As String 'デフォルトの拡張子
lCustData As Long 'フックプロシージャに渡すデータ
lpfnHook As Long 'フックプロシージャOFNHookprocへのポインタ
lpTemplateName As String 'テンプレートリソース名
End Type

Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_EXPLORER = &H80000

'--------------------------------------
' ダイアロゴを表示(名前を付けて保存)
'--------------------------------------
Private Function FileSaveDialog(Optional folder As String = "C:\") As String
Dim tOpenFileName As OPENFILENAME
Dim lngRet As Long

With tOpenFileName
.lStructSize = Len(tOpenFileName)
.hwndOwner = Me.hWnd
.hInstance = 0
.lpstrFilter = "テキストファイル(*.txt)" & vbNullChar & "*.txt" _
& vbNullChar & "すべてのファイル(*.*)" & vbNullChar & "*.*"
.nFilterIndex = 1
.lpstrFile = strFileName & String$(256, Chr$(0))
.nMaxFile = 256
.lpstrFileTitle = String$(256, Chr$(0))
.nMaxFileTitle = 256
.lpstrInitialDir = folder
.lpstrTitle = "名前を付けて保存"
.flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or _
OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT
End With

lngRet = GetSaveFileName(tOpenFileName)
FileSaveDialog = Left$(tOpenFileName.lpstrFile, _
InStr(tOpenFileName.lpstrFile, vbNullChar) - 1)
End Function
=============================================================
呼び出しは fileName = FileSaveDialog("デフォルトフォルダ")
デフォルトフォルダが指定されなかったときは C:\ とみなします。
戻り値は fileName に指定ファイルの FullPath が返されます。
キャンセルした場合は空文字が返ります。
以上お試しください。
APIの詳細は GetSaveFileName でネット検索してみてください。

No.2です。
便利な使い方があるんですね。知りませんでした!

せっかくやる気を出しているので、以下のAPIでダイアログを表示したらどうでしょうか(ネットで調べたものを多少修正しました)。自分の使いやすいように修正してください。このまま使用するなら該当するフォームにそのまま貼り付けてください(=== の間)。
=============================================================
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OPENF...続きを読む

Qアクセスからエクスポートするファイル名に日付を入れたい

アクセス2003を使用しています。

エクセルからデータをインポートして、データ加工後、エクセルにエクスポートさせるように作成中です。

マクロで
エクスポートするファイル名に日付を自動で設定せたいのですが、方法が判りません。
例)処理後20070824.xls 

どうか教えてください。よろしくお願いいたします。

Aベストアンサー

昔の回答で悪いけど参考にしてください。バージョン違いでうまくいかなかったらご勘弁。

参考URL:http://okwave.jp/qa1482781.html

QAccessからExcelへエクスポートするVBA

いつもお世話になっております。

AccessのクエリからデータをExcelにエクスポートします。
形式はMicrosoft Excel97-2003です。
フォーム"F_全データ"にボタンを付けて、クリックするとファイル名を自分で付けて保存する。というVBAを作成したいです。

1つ目のVBAは

DoCmd.OutputTo acForm, "F6_全データ", "MicrosoftExcelBiff8(*.xls)", "", False, "", 0

これだと、ファイルの種類が、Microsoft Excel5-7になってしまい困ります。
この形式になってしまうと、Excelデータを開くと、文字数が多いところが保存されていません。これだと困ります。

2つ目が

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "F_全データ", "○○○.xls"

こちらですと、ファイルの種類は97-2003になりまして、問題はないのですが、ファイル名は自分で指定したいのです。

ご指導よろしくお願いします。

いつもお世話になっております。

AccessのクエリからデータをExcelにエクスポートします。
形式はMicrosoft Excel97-2003です。
フォーム"F_全データ"にボタンを付けて、クリックするとファイル名を自分で付けて保存する。というVBAを作成したいです。

1つ目のVBAは

DoCmd.OutputTo acForm, "F6_全データ", "MicrosoftExcelBiff8(*.xls)", "", False, "", 0

これだと、ファイルの種類が、Microsoft Excel5-7になってしまい困ります。
この形式になってしまうと、Excelデータを開くと、文字数が多い...続きを読む

Aベストアンサー

単純な方法だと

mFileName = InputBox("ファイル名を入力してください")

にして

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "F_全データ",mFileName

にしておけば良いと思います。
後は「ファイルの保存ダイアログ」を開いてファイル名を取得するという方法も
取れますね。

Access VBA:
ファイルを開く、名前を付けて保存ダイアログボックスを表示するサンプル
http://billyboy.blog81.fc2.com/blog-entry-53.html

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

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

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

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

Aベストアンサー

#1です。

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

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

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


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

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

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

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

Aベストアンサー

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

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の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アクセスクエリ(複数)→マクロ→エクセル出力(ワークシート別)

仕事で必要になり、マクロ(アクセス)の勉強を始めました。
そこでわからないことがあります。どうか、よろしくお願いします。

マクロでエクセルに出力する方法はわかったのですが、それはばらばらのエクセルファイルで作成してしまう方法で、私の希望する一つのエクセルファイルに別々のシートで作成するのとは違うものでした。
試行錯誤してみたのですが、私の今の力ではできそうにありあません。

もしかしたらスクリプトを使ったりすればいいのかもしれませんが、私はエクセルでもマクロを使ったことがないのでとてもビビってます。

もしこの場合はスクリプトしか方法がないのであれば、これを機会に勉強をしようと思っています。
ただ、何から手をつけていいものか、さっぱりわからないのでオススメの参考書籍などあれば是非教えて下さい。

質問は2点「マクロの組み方」「スクリプトを使う場合は参考書籍等」を教えて下さい。
どうかよろしくお願いします。

Aベストアンサー

複数のクエリーの結果を、1つのエクセルファイルに別々のシートとして出力したいんですよね。
自分も試行錯誤していて、先程ちょうどできたところです。

まず、マクロの「アクション」で「ワークシート変換」を選び、引数(画面下部分の設定)を以下のように指定します。

変換の種類: 「エクスポート」
ワークシートの種類: Microsoft Excel 8-10など
テーブル名: クエリー名 <テーブルとあるがクエリーも可能>
ファイル名: (出力するエクセルのファイル名をフルパスで指定)
フィールド名の設定: フィールド名を1行目の見出しにするなら「はい」
範囲: <エクセル出力時のシート名>

最後の「範囲」がミソで、これでシート名が指定できることが、試してみて初めてわかりました。

上記の「ワークシート変換」アクションを、出力したいクエリーの数だけ順番に作成し、テーブル名と範囲だけ変えれば、同じエクセルファイルに複数のクエリーを出力できます。

ちなみに、AccessはVBAの解説書は多いようですが、マクロなどが詳しく載っている本は自分も見たことがありません。

複数のクエリーの結果を、1つのエクセルファイルに別々のシートとして出力したいんですよね。
自分も試行錯誤していて、先程ちょうどできたところです。

まず、マクロの「アクション」で「ワークシート変換」を選び、引数(画面下部分の設定)を以下のように指定します。

変換の種類: 「エクスポート」
ワークシートの種類: Microsoft Excel 8-10など
テーブル名: クエリー名 <テーブルとあるがクエリーも可能>
ファイル名: (出力するエクセルのファイル名をフルパスで指定)
フィールド...続きを読む

QACCESS VBAでファイルを開くダイアログを表示させたい

ACCESSのフォームからコマンドボタンを押すことで、
ファイル開くダイアログが表示されて、
そこでファイル名をクリック指定することで、
実際にそのファイルがインポートされるように仕組みを作りたいと思っています。

VBAでどう記述するのでしょうか?
類似ケースの質問内容も調べましたがピンと来るものがありませんでした。
ご存知の方、教えて頂けるとありがたいです。よろしくお願いします。

Aベストアンサー

CSVファイルの場合ですが、こちらを参考に。
http://www.accessclub.jp/bbs3/0364/superbeg109189.html

Excelの場合は
DoCmd.TransferSpreadsheet acImport, 8, "テーブル名", strFileName, True, ""
のようになります。
詳しくは、TransferSpreadsheet をヘルプで調べてください。
マクロの「ワークシート変換」を 作成し
「マクロを Visual Basic に変換」で
VBA のコードにしてみるのも良いでしょう。


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

人気Q&Aランキング