見守り電球またはGPS端末が特価中!

現在AccessのテーブルをExcelへエクスポートする処理を書いています。
内容は以下のとおりです。
・エクスポート先のExcelファイルは新規のものではなく既存のファイルを使用
・エクスポートする際、以前エクスポートした分のシートを削除してから転送させたい

下記のようなコードを書きましたが実行してみると前回エクスポートした分のシートは削除されておらず
今回エクスポートしたものが追加されているという状況です。
●エクスポート先Excelファイル名:エクセルファイル.xls
●エクスポートするテーブル名(Excelではシート名):転送テーブル

Set xlsApp = CreateObject("Excel.Application")
Set wkBook = xlsApp.Workbooks.Open("C\エクセルファイル.xls")

wkb.Application.DisplayAlerts = False
wkBook.Worksheets("転送テーブル").Activate
wkBook.Worksheets("転送テーブル").Delete
wkBook.Save
wkBook.Close
wkb.Application.DisplayAlerts = True

Set xlsApp = Nothing
Set wkBook = Nothing

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "エクセルファイル.xls", FullPath

どうぞよろしくお願い致しますm<_ _>m

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

A 回答 (1件)

ところどころ変なところがありましたが、大きな変更無く、下記コードをAccessの標準モジュールに置いて実行すると、目的シートの削除ができました。

DoCmdの方は試してありませんが、ご参考まで。当方Access2000です。
Sub test()
Dim xlsApp As Object, wkBook As Object
Set xlsApp = CreateObject("Excel.Application")
Set wkBook = xlsApp.Workbooks.Open("C:\エクセルファイル.xls")

xlsApp.DisplayAlerts = False
wkBook.Worksheets("転送テーブル").Activate
wkBook.Worksheets("転送テーブル").Delete
wkBook.Save
wkBook.Close
xlsApp.DisplayAlerts = True

Set wkBook = Nothing
Set xlsApp = Nothing
End Sub
    • good
    • 0
この回答へのお礼

mitarashi様、どうもありがとうございました!!!
教えていただいたとおりにやってみるとすんなり目的の動作をしてくれました(TT)

メッセージを非表示にする
xlsApp.DisplayAlerts = False
をwkb.Application.DisplayAlerts = False
としていたのが致命的な間違いだったようです。

これは自分だけでは気づくことが出来なかったと思います。
本当にありがとうございました。

お礼日時:2009/06/14 19:53

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

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

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

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

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

QAccessからExcelにエクスポートする時に常に上書きしたい

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

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

Aベストアンサー

こんにちは。maruru01です。

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


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

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

リネーム
Name "C:\エクスポート.xls" As "C:\エクスポート_1.xls"

QAccessVBAで作成したExcelファイルを削除する方法は?

AccessVBAでExcelファイルを作成しました。
これは一時的なもので、不要なので、処理の中で削除したいのですが、DeleteFile関数では無理なのでしょうか?
DeleteFile関数の使い方を間違えているのか、上手くいきません・・・。

どなたかよろしくお願いします。

Aベストアンサー

Kill ステートメントで指定したパスのファイルを削除できます。

(例) Kill "c:\tmp\test.xls"

【注意!】
『Kill "c:\"』という風にファイル名を指定しないとフォルダ内の全ての
ファイルを削除してしまいますので注意して下さい。

Qアクセスからエクセルのシートを追加して、名前をつける方法

アクセス2000で、ある所定の条件を満たした時に、規定の場所にあるエクセルファイルの先頭から2番目に空のワークシートを追加し、そのシート名を変数に格納されている値でリネームしようとしております。結構急務なんですが、excel.application~等使っても出来ませんでした・・・。プロフェッショナルな方、誰か方法を教えていただけないでしょうか?よろしくお願いします。

Aベストアンサー

こんにちは。

急ぎということで、取り急ぎで作ったコードです。目的の処理以外は一切おこなっていませんので、カスタマイズしてください。

また、処理速度の点で実行時バインドではなく、参照設定を予め行って下さい。


Option Compare Database

'要参照設定:Microsft Excel x.x Object Library
Sub AddXLWorksheet()

  Dim xlApp As Excel.Application
  Dim WB As Excel.Workbook
  Dim SH As Excel.Worksheet
  Dim strXLfile as stirng

  strXLfile = "C:\TEST.xls" 'Excelブックフルパス

  Set xlApp = Excel.Application
  With xlApp
    .Visible = True
    Set WB = .Workbooks.Open(strXLfile)
    'シートを3番目に追加
    Set SH = .Worksheets.Add(After:=WB.Worksheets(2))
    'シート命名
    SH.Name = "aaaaa" 'ここを変数で渡せば良い
  End With

  Set SH = Nothing
  Set WB = Nothing
  Set xlApp = Nothing

End Sub

こんにちは。

急ぎということで、取り急ぎで作ったコードです。目的の処理以外は一切おこなっていませんので、カスタマイズしてください。

また、処理速度の点で実行時バインドではなく、参照設定を予め行って下さい。


Option Compare Database

'要参照設定:Microsft Excel x.x Object Library
Sub AddXLWorksheet()

  Dim xlApp As Excel.Application
  Dim WB As Excel.Workbook
  Dim SH As Excel.Worksheet
  Dim strXLfile as stirng

  strXLfile = "C:\TEST.xls" 'Excel...続きを読む

QAccess VBAよりシート名を取得したい

お世話になります。

現在、Accessにてツールを作成しておりますが、VBAより
特定のパスにあるExcelファイルのシート名を取得する必要が
あります。
※当該ツールはRuntime環境にて利用するため、CreateObject
 が利用できません。

取得はDAO.Tabledefs を使って取得できましたが、GetObjectを
使って取得する方法をご教授頂けると幸いです。

シート名を取得するExcelファイルが、 C:\test\テスト.xlsxの場合
どのような記述になりますでしょうか。

勉強不足で大変恐縮ですが、ご教授のほど宜しくお願い致します。

Aベストアンサー

Access VBAよりExcelのシート名を取得
http://oshiete.goo.ne.jp/qa/8772873.html

ここでの OpenSchema を使用したものは不評だったでしょうか

というのは置いといて


関数を用意しました
いろんなパターンでテストはしていないので・・・
(完成形ではないので不具合等は修正してください)

GetExcelSheet に、Excelファイルのフルパスを与えると
シート名の配列が Variant で得られます。
内部でエラーがあったら、最後のエラー番号を返します。

内部の動きとして、GetObject で対象の Excel ファイルを開きます。
GetObject で初めて開かれた場合、そのファイルの Visible は False
False なら後始末としてそのファイルを閉じ、
結果 Excel で開いているファイルが無ければ、Excel を終了します。
つまり、既に開いていたものについては閉じる事はしません。

この関数の使い方は、後半の Samp1 を例としてください。

Public Function GetExcelSheet(sPath As String) As Variant
  Dim oApp As Object, oBook As Object
  Dim vA() As Variant, v As Variant
  Dim i As Long

  On Error Resume Next
  i = 0
  Set oBook = GetObject(sPath)
  If (Not oBook Is Nothing) Then
    For Each v In oBook.Worksheets
      ReDim Preserve vA(i)
      vA(i) = v.Name
      i = i + 1
    Next
    Set oApp = oBook.Application
    For Each v In oApp.Windows
      If (v.Caption = oBook.Name) Then
        If (Not v.Visible) Then
          oBook.Close SaveChanges:=False
        End If
        Exit For
      End If
    Next
    Set oBook = Nothing
    If (oApp.Workbooks.Count = 0) Then oApp.Quit
    Set oApp = Nothing
  End If
  GetExcelSheet = vA
  If (Err <> 0) Then GetExcelSheet = Err.Number
End Function

Public Sub Samp1()
  Dim v As Variant
  Dim sS As String
  Dim i As Long

'  v = GetExcelSheet(CurrentProject.Path & "\test.xlsm")
  v = GetExcelSheet("C:\test\テスト.xlsx")
  If (IsArray(v)) Then
    sS = "> シート数 = " & UBound(v) + 1 & vbCrLf
    For i = 0 To UBound(v)
      sS = sS & v(i) & vbCrLf
    Next
    MsgBox sS
  End If
End Sub


余談)

piroin654 さんのは

>  With appObj
>    For Each appObj In .Sheets

部分の、For Each 用の変数を変更すれば良いと思います。
また、Shell で起動しておくことは不要と思います。
(/Runtime オプション付きで起動した中での確認なので?)

Access VBAよりExcelのシート名を取得
http://oshiete.goo.ne.jp/qa/8772873.html

ここでの OpenSchema を使用したものは不評だったでしょうか

というのは置いといて


関数を用意しました
いろんなパターンでテストはしていないので・・・
(完成形ではないので不具合等は修正してください)

GetExcelSheet に、Excelファイルのフルパスを与えると
シート名の配列が Variant で得られます。
内部でエラーがあったら、最後のエラー番号を返します。

内部の動きとして、GetObject で対象の Excel ファイルを開...続きを読む

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
...続きを読む

QEXCELマクロで上書きメッセージ無しで保存する方法

EXCELマクロで上書きメッセージ無しで保存する方法をお願いします
ActiveWorkbook.SaveAs "C:\Documents andSettings\Nakatani\MyDocuments\Book1.xls"
の様にするとすでにファイルがある場合上書きメッセージが出ます
メッセージを出さずに上書きするプログラミングを教えて下さい
宜しくお願いします

Aベストアンサー

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs "C:\Documents andSettings\Nakatani\MyDocuments\Book1.xls"
Application.DisplayAlerts = True

QACCESSからexcelブックを開いて保存したい

ACCESS初心者です。
仕事でどうしても必要に迫られて、受付管理のツールを作ることになりました。


1つの注文で、受付ID(オートナンバー)が付与されます。

メインフォームにタブオーダーをつけてサブフォームを複数配置しています。
そのサブフォームにボタンを置いて
Access から既存のエクセルファイルをテンプレートとして開いて
テンプレートに入力後、受付IDをファイル名にして、テンプレートとは別もので保存
保存後は、ボタンを押したときに受付IDと同じエクセルファイルが開く

このようなことをやりたいと思っています。

ネットでいろいろ探しているのですが
ファイルを開くのは見つかっても、保存したものを開くのが見つからず
そもそもできるのかどうかもわかっておりません。

自分にスキルがなく、あれこれ凝ったものは作れないので、
保存は自動じゃなくて、自分で別名で保存にしてもかまわないのですし
フォームに入力したものが、テンプレートに反映(出力?)されなくてもかまわないです。


参考になるサイト等ありましたら、ご教示いただけますか。

どうぞよろしくお願いいたします。


下記はやりたいことに近いかなと思って見つけたサイトです。
http://www.nurs.or.jp/~ppoy/access/access/acX013.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1220895032
http://accessclub.jp/bbs/0227/beginers70136.html

ACCESS初心者です。
仕事でどうしても必要に迫られて、受付管理のツールを作ることになりました。


1つの注文で、受付ID(オートナンバー)が付与されます。

メインフォームにタブオーダーをつけてサブフォームを複数配置しています。
そのサブフォームにボタンを置いて
Access から既存のエクセルファイルをテンプレートとして開いて
テンプレートに入力後、受付IDをファイル名にして、テンプレートとは別もので保存
保存後は、ボタンを押したときに受付IDと同じエクセルファイルが開く

このよう...続きを読む

Aベストアンサー

1番目のリンクの方のサイト、すごいですね。テクニカルかつ分かりやすいです。
同じ方のサイト、#001ではEXCELファイルを新規に作って、データベース内のデータを埋めて保存して閉じる
やり方を紹介しています。
http://www.nurs.or.jp/~ppoy/access/access/acX001.html

リンクの#013では、テンプレートを元にデータを埋め込み、EXCELの画面を表示したところで、マクロを終了させる
(保存はユーザーの手動に任せる)方法を紹介しています。

この#013の最後に#001の保存方法を組み合わせれば、たぶん出来ると思います。

#013の末尾(http://www.nurs.or.jp/~ppoy/access/access/acX013.html)
--------------------------------------------------------------
'データ貼り付け
With wkb.Worksheets(stSheet)
.Range(stRng).CopyFromRecordset Data:=rst
End With

'#001の保存コード(http://www.nurs.or.jp/~ppoy/access/access/acX001.html)

'保存ダイアログからの入力を受けて保存
' fName = xls.Application.GetSaveAsFilename(,"Microsoft Excel(*.xls),*.*", 1)

'保存ダイアログを使わず、fnameを自動的に指定する方法(jacob-wk9付け足し)
fName=rst!受付ID

If fName <> False Then
wkb.SaveAs FileName:=fName
MsgBox "新規ブックは、「" & fName & "」の名前で保存しました!", vbOKOnly
Else
MsgBox "新規ブックは保存できませんでした。", vbOKOnly
End If

Set rst = Nothing: Set cnn = Nothing

Exit_opnXLtmp:
Set wkb = Nothing: Set xls = Nothing
Exit Sub

Err_opnXLtmp:
MsgBox Err.Description
Resume Exit_opnXLtmp
End Sub
----------------------------------------------------------------------

こんな感じになるのではないでしょうか。

1番目のリンクの方のサイト、すごいですね。テクニカルかつ分かりやすいです。
同じ方のサイト、#001ではEXCELファイルを新規に作って、データベース内のデータを埋めて保存して閉じる
やり方を紹介しています。
http://www.nurs.or.jp/~ppoy/access/access/acX001.html

リンクの#013では、テンプレートを元にデータを埋め込み、EXCELの画面を表示したところで、マクロを終了させる
(保存はユーザーの手動に任せる)方法を紹介しています。

この#013の最後に#001の保存方法を組み合わせれば、...続きを読む

QACCESSのVBAにてExcelのシートをコピーしたい

入庫.xlsに現在、"原紙"というシートがあります。
入庫.xlsには、"原紙"と入庫のあった日のシートがあるようにしたいのです。
今日、入庫があれば、入庫.xlsには
"原紙"と"20"のシートが存在するようにしたいのです。
AccessのVBAにて1文でシートのコピーってできないでしょうか?
Dim oApp As Object
Dim StWk1 As String
Dim SHizk As String
Dim Hizk As Integer
Hizk = DatePart("d", Me![入庫日付])
SHizk = CStr(Hizk)
StWk1 = "c:入庫.xls"
Set Xls = GetObject(StWk1)
Xls.Application.Windows(1).Visible = True
Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk)
Xls.Application.worksheets(SHizk).Activate

上記のように作成してみたのですが、実行すると、
Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk)
のところで、エラーになります。
実行エラー'9':
インデックスが有効範囲にありません。
のメッセージが表示されます。
教えてください。

入庫.xlsに現在、"原紙"というシートがあります。
入庫.xlsには、"原紙"と入庫のあった日のシートがあるようにしたいのです。
今日、入庫があれば、入庫.xlsには
"原紙"と"20"のシートが存在するようにしたいのです。
AccessのVBAにて1文でシートのコピーってできないでしょうか?
Dim oApp As Object
Dim StWk1 As String
Dim SHizk As String
Dim Hizk As Integer
Hizk = DatePart("d", Me![入庫日付])
SHizk = CStr(Hizk)
StWk1 = "c:入庫.xls"
Set Xls = GetObject...続きを読む

Aベストアンサー

Private Sub CmdCopySheet_Click()
  
  'Dim xlApp As Excel.Application
  'Dim xlBook As Excel.Workbook
  'Dim xlSheet As Excel.Worksheet
  Dim xlApp As Object
  Dim xlBook As Object
  Dim xlSheet As Object
  Dim stFileName As String
  Dim stSheetName As String
  Dim lngCnt As Long
  
  'ファイル名指定
  stFileName = "C:\入庫.xls"
  
  'コピーシート名指定
  stSheetName = Format(Date, "dd")
  
  'エクセル展開
  'Set xlApp = New Excel.Application
  Set xlApp = CreateObject("Excel.Application")
  Set xlBook = xlApp.Workbooks.Open(stFileName)
  
  'コピー先取得
  For Each xlSheet In xlBook.Worksheets
    If xlSheet.Name = stSheetName Then
      If Len(stSheetName) = 2 Then
        stSheetName = stSheetName & " (2)"
      Else
        stSheetName = Left(stSheetName, 2) & " (" & Val(Mid(stSheetName, 5)) + 1 & ")"
      End If
    End If
    lngCnt = lngCnt + 1
  Next
  
  'シートコピー
  Set xlSheet = xlBook.Worksheets("原紙")
  xlSheet.Copy , xlBook.Worksheets(lngCnt)
  
  'シート名変更
  lngCnt = lngCnt + 1
  Set xlSheet = xlBook.Worksheets(lngCnt)
  xlSheet.Name = stSheetName
  
  'エクセルファイルを閉じる
  xlBook.Close (True)
  xlApp.Quit
  
  'オブジェクトの開放
  Set xlSheet = Nothing
  Set xlBook = Nothing
  Set xlApp = Nothing
  
  '完了メッセージ
  MsgBox "シートをコピーしました"
  
End Sub

作成時は、参照設定で「Microsoft Excel *.* Object Library」にチェックをつけておくと楽ですよ
作成し終わったら、CreateObjectを使って参照設定を元に戻しておけば、バージョン違いのエクセルにも対応できます

Private Sub CmdCopySheet_Click()
  
  'Dim xlApp As Excel.Application
  'Dim xlBook As Excel.Workbook
  'Dim xlSheet As Excel.Worksheet
  Dim xlApp As Object
  Dim xlBook As Object
  Dim xlSheet As Object
  Dim stFileName As String
  Dim stSheetName As String
  Dim lngCnt As Long
  
  'ファイル名指定
  stFileName = "C:\入庫.xls"
  
  'コピーシート名指定
 ...続きを読む

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のマクロでモジュールを実行させたい。

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

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

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

Aベストアンサー

#1です。

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

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

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


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


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

人気Q&Aランキング