Microsoft Access 掲示板

クラスモジュールについて / 14

17 コメント
views
4 フォロー
14

ToExcelでなぜエラーが出るかを解説(コメント)しておきますと。

Public Sub ToExcel()
    Dim ex As Excel.Application

    Set ex = CreateObject("excel.Application")
    ex.Visible = True
    '↑ここでエクセルアプリケーションが新規に開く
    'ただし、ブックは開いてないので空っぽの状態。
        
    DoCmd.OpenQuery QryName, , acReadOnly
    DoCmd.RunCommand acCmdOutputToExcel
    '↑エクセルへクエリデータを出力するが、上で開いているエクセルではなく
    '別に新規のエクセルを開いてそこに出力する。
    DoCmd.RunCommand acCmdClose
    
    If SaveBookName <> "" Then
        ex.ActiveWorkbook.SaveAs SaveBookName
        'exは最初に開いた空っぽのエクセルで、ブック自体存在しないので、エラーになる
    Else
        MsgBox "保存するブック名をSaveBookNameプロパティで設定してください"
    End If
    
    Set ex = Nothing
End Sub

対処法としては、CreateObjectで新規エクセルを開くのではなく、
GetObjectで開いているエクセルを取得して操作することになると思います。

前にも言いましたが、DoCmd.TransferSpreadsheetメソッドで1行でできることをわさわざクラスモジュールですることはないし、上記のような間違いもあるし、古い記事なので、クラスモジュールの学習サンプルとしては適切ではないです。

通報 ...