Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2013)
実行時エラー9 インデックスが有効範囲にありません
投稿日時: 19/07/06 20:22:00
投稿者: ひろと

教えてください。
  
標準モジュールにて、まずデスクトップに出力したファイルを参照します
出力F(フォーム上にある 年月日 〜 年月日 の値を取得しています)
  
Function EXPASS() As String
      
  Dim D1, D2 As String
      
    D1 = Forms![出力F]![cmb_10] & "年" & Forms![出力F]![cmb_11] & "月" & Forms![出力F]![cmb_12] & "日"
    D2 = Forms![出力F]![cmb_13] & "年" & Forms![出力F]![cmb_14] & "月" & Forms![出力F]![cmb_15] & "日"
      
    EXPASS = CreateObject("WScript.Shell").SpecialFolders.Item("Desktop") & "\" & "データ" & D1 & "〜" & D2 & ".xlsx"
          
End Function
  
上記を利用して、エクセルをコントロールしたいのですが、
  
Sub EXCELCONTROL()
  
    Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言
    Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言
    Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言
    Dim FilePath As String
      
    FilePath = EXPASS 'Excelファイルのパスを指定
      
    Set AppObj = CreateObject("Excel.Application") '実行時バインディング
    Set WBObj = AppObj.WorkBooks.Open(FilePath) 'ワークブックを開く
    ★ Set WsObj = WBObj.Worksheets("Sheet1")
      
    AppObj.Visible = True 'Excelアプリケーションを表示する
      
    'ワークシートへの処理
    WsObj.range("A1").Value = "Access"
      
    'ワークシートのコピー作成
    WsObj.Copy after:=WsObj
    WBObj.Activesheet.Name = "test"
      
    'Excelを保存して閉じる
    WBObj.Save 'ワークブックを保存する
    WBObj.Close 'ワークブックを閉じる
    AppObj.Quit
      
End Sub
  
エクセルを操作しようとおもいますが、★の所で 実行時エラー9 インデックスが有効範囲にありません となります。
Debug.Print FilePath
では、きちんとデスクトップのエクセルファイル名が取れております。
(もちろん、デスクトップに ログデータ2019年6月1日〜2019年6月30日.xlsx のファイルもあります)。
  
また、パスが間違っている可能性もあるので、直接ファイルプロパティからコピーしてみましたが、
FilePath = C:\Users\PC\Desktop\ログデータ2019年6月1日〜2019年6月30日.xlsx
やはり、インデックスが有効範囲にありません となってしまいます。
  
デスクトップパスでは操作できないのでしょうか。
 

回答
投稿日時: 19/07/06 21:23:57
投稿者: よろずや

エラーになったときに、VBE画面のメニューから 表示→ローカルウィンドウ を選択すると
そのプロシージャ内の変数の値が全部見れます。
 
多分、ブックは開いているでしょう。
 
WBObjの左の+記号をクリックすると、ブックの各種プロパティが見れます。
 
シート名を確認してみましょう。

投稿日時: 19/07/06 22:35:46
投稿者: ひろと

よろずや さんの引用:
エラーになったときに、VBE画面のメニューから 表示→ローカルウィンドウ を選択すると
そのプロシージャ内の変数の値が全部見れます。
 
多分、ブックは開いているでしょう。
 
WBObjの左の+記号をクリックすると、ブックの各種プロパティが見れます。
 
シート名を確認してみましょう。

 
 
よろずや様
 
アドバイスありがとうございます。
Set WsObj = WBObj.Worksheets("Sheet1")
シート名が違っておりました。
 
ただ、エクセルのシート名 決め打ちではなく、シートの1枚目、2枚目といった汎用的な指定はVBAでできるのでしょうか。
 

回答
投稿日時: 19/07/06 22:48:45
投稿者: よろずや

>シートの1枚目
 
ごく単純に、
 
Set WsObj = WBObj.Worksheets(1)
 
です。

投稿日時: 19/07/07 07:09:08
投稿者: ひろと

よろずや さんの引用:
>シートの1枚目
 
ごく単純に、
 
Set WsObj = WBObj.Worksheets(1)
 
です。

 
 
よろずや 様
 
ありがとうございます。
無事、目的の事ができました。