「夫を成功」へ導く妻の秘訣 座談会

AccessのテーブルをExcelへ出力する際に、常に同じファイル名で保存する場合、
2回目以降は、上書きするかどうかを尋ねるメッセージが表示されます。
「常に上書きする」と決まっているので、メッセージを表示させたくないのですが、どうしたらいいのでしょうか。

現在、マクロで作成しており、出力の前後に「メッセージの設定」を入れてみたのですが、ダメでした。
VBAなら可能でしょうか?よろしくお願いします。

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

A 回答 (5件)

こんにちは。

maruru01です。

エクスポートする直前に、元のファイルを削除するか、移動するか、リネームするのはどうですか。(VBAですが)


削除
Kill "C:\エクスポート.xls"

移動
Name "C:\エクスポート.xls" As "C:\移動後\エクスポート.xls"

リネーム
Name "C:\エクスポート.xls" As "C:\エクスポート_1.xls"
    • good
    • 0
この回答へのお礼

maruru01さん、こんばんは。いろいろありがとうございました。
VBAでエクスポートしたExcelファイルを自動起動させる方法がわからなかったので、
マクロで制御して、マクロの中に元ファイルを削除するFunctionプロシージャを挟んで解決しました。
どうもありがとうございました。

お礼日時:2002/09/12 21:53

ricarさんごめんなさい。

単純にEnterを押す動作で出来るだろうと思ったのですが、上書き「いいえ」でEnterということになるのですね。
maruru01さん間違いの回答ありがとうございました。
これは補足回答ではなくておわびです。なんか普通のチャットみたいになってしまいました。
    • good
    • 0
この回答へのお礼

souta_nさん、こんばんは。ご丁寧にありがとうございます。
お詫びなんてとんでもないです。
VBA初心者の私にとって、OKWEBの皆さんは頼みの綱です。
また機会があれば、よろしくお願いします。

お礼日時:2002/09/12 21:44

ちょっと気になったので。



マクロの「メッセージの設定:いいえ」と、VBAの
DoCmd.SetWarnings False
は同じことなので、どちらかが出来て、どちらかが出来ないということは無いはずですが。
それから、この
DoCmd.SetWarnings False
は、ダイアログボックスが出たら自動的にENTERを押すという動作と同じなので、今回の「上書き確認」のダイアログでそのままENTERを押すと「いいえ」になり、上書きが出来ないような気がするのですが。
実際に新しいデータで上書きされているか確認してみてはいかがですか。
上書き出来ていないなら、私(No.1)やNo.2の方のように、元のファイルをどうにかするしかないと思いますが。
    • good
    • 0
この回答へのお礼

maruru01さん、度重なるご回答ありがとうございました。
恥ずかしながら、maruru01さんのおっしゃるとおりでした。
確認もせずにメッセージがでないと喜んでおりました。
ご指摘ありがとうございました。

元のファイルを消す方向で、チャレンジします。

お礼日時:2002/09/12 14:10

VBAでそのイベントプロシージャの最初の1行目に



Docmd.SetWarnings False と記述してみてはいかがでしょうか
    • good
    • 0
この回答へのお礼

souta_nさん、こんにちは、昨日は回答ありがとうございました。
教えていただきたいことがあります。(基本的なことですみません)

マクロで制御していたものをVBAに書き替えました。
Docmd.SetWarnings False を記述すると
上書き確認のメッセージは回避できましたが、
エクスポートしたファイルを自動起動させることができません。
どのように記述すればよいでしょうか?よろしくお願いします。

お礼日時:2002/09/12 10:04

VBAを使って、ファイルがあったら、予め削除するとか。


こんな感じ:

Const FNAME_EXPO = "export.xls"

if Dir( FNAME_EXPO ) <> "" Then Kill FNAME_EXPO
    • good
    • 1
この回答へのお礼

osamuyさん、こんばんは。
教えていただいた方法は全然知らなかったので、大変勉強になりました。
VBAって、結構奥が深いですね。回答をいただき本当にありがとうございました。

お礼日時:2002/09/12 22:00

この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プロシージャを指定しなければいけません。

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側からEXCELの書式を設定するには?

ACCESSからEXCELにエクスポートした際、ACCESS側でEXCELの書式設定は行えますか?(例:セルAの幅がX桁等)

データ件数が多すぎて、下記VBでエクスポート処理をしています。

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

お手数ですが、ご教授願います。

Aベストアンサー

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
xlApp.Cells.EntireColumn.AutoFit
xlApp.Range("A1").Select
xlApp.Visible = False

xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Exit_Cmd1_Click:
Exit Sub

Err_Cmd1_Click:
MsgBox Err.Description
Resume Exit_Cmd1_Click

End Sub

こんな感じで記述してください。

#1の中でxlApp.DisplayAlerts = False これは除いてください。保存しますかのメッセージが出ます。

例えばボタンにエクスポートの処理を書いているのでしたら
ボタンをCmd1とすると

Private Sub Cmd1_Click()
On Error GoTo Err_Cmd1_Click

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

DoCmd.TransferSpreadsheet acExport, 8, "XXX", "\XX.xls", False, ""

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("\XX.xls")
Set xlSheet = xlBook.Worksheets(1)

xlApp.Cells.Select
...続きを読む

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

QExcel VBAで確認なしで上書き保存

起動中のBookでファイル名が Data.xlsのものを閉じたいと思いますが、
上書き確認メッセージを出さないように
oExcel.DisplayAlerts = False
を設定すると

エラーになります。

CreateObject で作成した場合は、DisplayAlerts が使えるようですが、
すでに起動済みのBookを確認なしで上書き保存するにはどうしたらいい
のでしょうか?

Sub UnloadFile()
  Dim myBook2 As Workbook
  Dim myBook1 As Workbook

   For Each myBook2 In Workbooks
     If myBook2.Name = "Data.xls" Then
       Set myBook1 = myBook2
       myBook1.SaveAs myBook1.FullName
       myBook1.Close
     End If
   Next myBook2
   Set myBook1 = Nothing
End Sub

起動中のBookでファイル名が Data.xlsのものを閉じたいと思いますが、
上書き確認メッセージを出さないように
oExcel.DisplayAlerts = False
を設定すると

エラーになります。

CreateObject で作成した場合は、DisplayAlerts が使えるようですが、
すでに起動済みのBookを確認なしで上書き保存するにはどうしたらいい
のでしょうか?

Sub UnloadFile()
  Dim myBook2 As Workbook
  Dim myBook1 As Workbook

   For Each myBook2 In Workbooks
     If myBook2.Name = "Data.xls...続きを読む

Aベストアンサー

>保存しないで myBook1.Close だけしたいときはどうするのでしょうか?
>この場合は Application.DisplayAlerts = False でいいということになるのでしょうか?

myBook1.Close True
でよいのでは?

Qアクセスクエリ(複数)→マクロ→エクセル出力(ワークシート別)

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

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

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

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

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

Aベストアンサー

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

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

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

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

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

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

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

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

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

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-VBAでExcelファイルを作成する。

こんにちわお世話になります。

「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。
AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。
Office97を使用しています。

Aベストアンサー

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
  Dim xlSheet As Excel.Worksheet

  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Add
  Set xlSheet = xlBook.Worksheets(1)

  ' Excel のセルに値を代入します。
  xlSheet.Cells(1, 1).Value = " "

  ' Worksheet を名前をつけて保存します。ダイアグボックス等を使用して
   パスやBook名など入力できるようにしてもOKです。
  xlSheet.SaveAs "c:\Temp.xls"

  xlApp.Quit

  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
End Sub

こんな感じでしょうか。

プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryにチェックを入
れて下さい。

オブジェクトへの参照を格納する変数を事前バインディング。
変数にオブジェクトの参照を代入します。Addメソッドを使って新規workbookと
worksheet オブジェクトを作成します。
値を代入し名前を付けて保存してオブジェクトを開放する。という流れで良いと
思います。

Private Sub Command1_Click()

  On Error Resume Next

  Dim xlApp  As Excel.Application
  Dim xlBook As Excel.Workbook
...続きを読む


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

人気Q&Aランキング