アプリ版:「スタンプのみでお礼する」機能のリリースについて

保存先を任意に選択して、クエリをエクセルファイルで出力したく、見よう見まねで以下のモジュールを作成しました。

ホームページのサンプルだと「xls」のところが、「CSV」になっていたので、今回、「xls」に直しました。

これを、実行すると「データベースまたはオブジェクトは読み取り専用なので、更新できません」の
メッセージが出力します。

「xls」を「CSV」に戻すと、正常にCSVファイルが出力できます。

原因が分かりません。どなたか助けてください。



Public Function GetFileName() As String

Const ENABLE_WIZHOOK = 51488399
Const DISABLE_WIZHOOK = 0

Dim CurrentPath As String: CurrentPath = Application.CurrentProject.Path
Dim StrFile As String: StrFile = "ベンチマーク_" & Format(Date, "yyyymmdd") & ".xls" ' 選択するファイルの絶対パス格納用
Dim myFilter As String: myFilter = "xlsファイル(*.xls)|*.xls" ' 選択可能ファイルのフィルタ

WizHook.Key = ENABLE_WIZHOOK

INTREXULT = WizHook.GetFileName(0, "", "", "", StrFile, CurrentPath, myFilter, 0, 0, 0, OpenOrSaveFlg)
If INTREXULT <> 0 Then '「ファイルを保存」ダイアログで[キャンセル]を押下した場合
GetFileName = ""
Exit Function
End If
WizHook.Key = DISABLE_WIZHOOK
GetFileName = StrFile

End Function

A 回答 (7件)

マクロを下記の様に作ります。



1. クエリを開く
クエリ名は、Excelに出力するクエリの名前を指定する
ビューは、データシートビューを指定する
データモードは編集を指定する。

2. コマンドの実行
Excelに出力を指定する。

これを実行すると、新規のExcelが開きます。ここに、クエリの内容が
入ります。ここから、先の操作はExcelの通常の操作になります。

これで、ユーザーに保存をさせるのが良いのではないでしょうか。
マクロとしては、単に上記に書いた様に2つのステップだけです。

やって見て下さい。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

教えて頂いたやり方でできました。

ありがとうございます♪

お礼日時:2017/02/17 08:27

保存先に付いては、InputBoxなどを利用する


訳には行かないのでしょうか。

それが出来れば、その内容で保存をする事
で問題は解決すると思いますが。

敢えて出来ない方法を選ぶのではなくて
今出来る方法を試すのも一手だと思います。

後は、時間が出来た時に本来の解決に
着手をすれば良いのかと思いますが。
    • good
    • 0

先ほどは失礼しました。



下記を貼り付けて下さい。
Function マクロ2()
On Error GoTo マクロ2_Err

DoCmd.TransferSpreadsheet acExport, 10, "クエリ1", "C:\Users\usui\Documents\Access\教えてGo\access\170215-1948\sample\01.xlsx", True, ""


マクロ2_Exit:
Exit Function

マクロ2_Err:
MsgBox Error$
Resume マクロ2_Exit

End Function
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

保存先を利用者に選択できるようにしたいのですが・・・

せっかく、教えて頂いた内容だと、保存先が固定になってしまいそうな・・・

お礼日時:2017/02/16 18:30

あ、なるほど。


出力時にフォルダを指定したいわけね。

これは参考程度に聞いてもらえればですが。
私なら、汎用的に利用出来る出力用のフォームを作るかな。
そのフォームで、出力フォルダの指定と、出力形式を選択出来るようにすると。
そのフォームにはテーブル(クエリ)名を引き渡す。
データの出力に関しては、全てそいつに任せると。
これなら、出力時はフォームを呼び出せば良いだけになります。

既出かな?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

今回のサンプルでは難しそうですね 

アクセス初心者のわたしにむずかしそう・・・(^_^;)

お礼日時:2017/02/16 18:27

標準モジュールに下記をコピペして下さい。



ここで、クエリ1とかマクロ1とかの名前は摘便変更して
使って下さい。

'------------------------------------------------------------
' マクロ1
'
'------------------------------------------------------------
Function マクロ1()
On Error GoTo マクロ1_Err

DoCmd.SetWarnings False
DoCmd.OpenQuery "クエリ1", acViewNormal, acEdit
DoCmd.Save acQuery, "クエリ1"


マクロ1_Exit:
Exit Function

マクロ1_Err:
MsgBox Error$
Resume マクロ1_Exit

End Function
    • good
    • 0

出力しようとしているファイルを貴方が別の所で使っていませんか。


ているメッセージは他の誰かががそのファイルを使っている為に、貴方
にはその権限が有りませんと言うメッセージだと思います。

その時に、例えば違うファイル名にするとかしたらどうでしょうか。あ
るいは、誰がそのファイルを掴んでいるのかを調べて、そのファイルを
クエリーで出力をしようとしている時は使わない様にするのも一つの手
です。

その時に誰がそのファイルを使っているのかどうかを調べるのは私は、
詳しくは無いですが。例えばタスクマネージャーなどで今動いているタ
スクの全てを調べて使っているファイルを調べると言うのも一つの手で
す。

それでも現象が出ると言うので有れば。多分に、貴方の今使っている
Accessその物で二重にそのファイルを指定をしていると言う事だと思い
ます。

出力の対象をファイル名を変更してCSVだと良いと言う事が、それを意
味していると思います。もう少し、今起きている現象を正確に捉える事
だと思います。

それでも出るので有れば、多分ここで使っている構文でそれが出来ない
のかも知れません。

Excelは当面はCSVでも読めるので、それで当面の運用に支障は出ないと
思います。なので取り敢えずは最初は、CSVで読ませてから後で、Excel
に名前を付けて保存をすると言うのも一つの手です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ACCESSはネットワークにつながっていないパソコンで実行しているため、他の誰かがつかんでいる可能性はありません。
パソコンを再起動して、再度、実行しましたが、結果は変わりませんでした。
また、お客さんに提供するものなので、できれば、手間をかけないようにするため、EXCEL形式で直接出力できるようにしたいです。

お礼日時:2017/02/16 08:17

Accessなら、他の方法あるでしょ?


docmd系で。

その方法じゃないとダメなの?
クエリを出力させるだけなら、簡単だったはずだけど。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
マクロで作成する方法もあると思いますが、出力ファイルの保存先を任意に選択できるようにしたいと思い、この方法を使っています。
他の方法があれば、ご指導をお願いします。

お礼日時:2017/02/16 08:17

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