• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access VBA 新しいシート作成)

Access VBAで新しいシートを作成する方法

このQ&Aのポイント
  • Access VBAを使用してExcelファイルを編集するプログラムを作成しています。このプログラムでは、新しいシートを作成する必要があります。
  • Excelファイルを開き、新しいシートを作成するためには、Access VBAで次のコードを使用します。
  • Dim WsObj As Object Set WsObj = WBObj.Sheets.Add(, WBObj.Sheets(1))

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1です。回答者の補足について、すみません。 下記でやってみてください。 私のテスト例と質問者の場合と異なるための修正は、前回答と同じです。 Sub test01() Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言 Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言 Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言 Dim ws1 As Object '実行時バインディング Set AppObj = CreateObject("Excel.Application") '編集を実施するワークブックを開く 'PathにはExcelファイルのフルパス、ExfにExcelファイル名が格納されています。 PathExf = "C:\Users\XX\Documents\住所録例.xlsx" Set WBObj = AppObj.WorkBooks.Open(PathExf) 'Excelアプリケーションを表示する AppObj.Visible = True '---- Set sh1 = AppObj.worksheets(1) MsgBox sh1.Name '確認用 Set sh2 = AppObj.Sheets.Add sh2.Name = "abc" MsgBox sh2.Name '確認用 sh2.Move After:=sh1 End Sub テストは前回も今回もやっていて、結果を見届けています。 オフィスのファミリーソフト(エクセル、ワード、アクセスほか)で、他の種類のオフィスVBAコード(アクセスでエクセルVBAなど)を書くことの難しさがあります。 この点、小生は、甘かったのかも知れない。 (エクセルVBA内でシートを増やし、そのシートtabの位置を定めるコードは難しくありませんし、経験済みです。) 定数の、xl..などがそのままアクセスで使えるか?は有名ですが、他にも考慮すべき点があるようです.小生は十分理解が足らないのかもしれません。 この点、余りWEBにも記事が少ないようですが、 https://www.sanei-print.co.jp/blog/2017/01/24/184 Excel VBAでWordをコントロール などで、objWord.がしつこく被せられているのが、このことを示しているのでしょう。Objectを捉えたら、あとはエクセルVBAと同じコードが通用するようです。

Yoshikun0928
質問者

お礼

年末のお忙しい中ご回答いただきまして誠にありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

修正後 Sub test01() Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言 Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言 Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言 Dim ws1 As Object '実行時バインディング Set AppObj = CreateObject("Excel.Application") '編集を実施するワークブックを開く 'PathにはExcelファイルのフルパス、ExfにExcelファイル名が格納されています。 PathExf = "C:\Users\XXX\Documents\住所録例.xlsx" Set WBObj = AppObj.WorkBooks.Open(PathExf) 'Excelアプリケーションを表示する AppObj.Visible = True '---- 'Set ws1 = AppObj.worksheets.Add.Name("ebc") 'NO ' AppObj.Sheets.Add(After:=AppObj.wb.obj.workSheets(1)).Name = "abc" 'NO AppObj.Sheets.Add.Name = "abc" 'OK AppObj.activesheet.Move After:=WBObj.worksheets(1) 'OK End Sub 後半(最後あたり)の2行を追加してやってみてください。 標準モジュールにコードを置くこと。 PathExf = "C:\Users\XXX\Documents\住所録例.xlsx"とOpen(PathExf)の部分は、(私のテスト例なので)質問の通りのもとへ戻すこと。 同名のブックはエクセルで開いてないこと。 エクセルはAccessにとっては、オブジェクト的に、他世界のことなので 普通に、エクセルで、エクセルVBAのコードを使うときと違った点があることを注意すること。 恥ずかしながら、'NOと書いて(参考までに)残した行は、「失敗の記」です。

Yoshikun0928
質問者

補足

回答いただきまして誠にありがとうございます。 回答いただいたコードを実行してみたところ、先頭に新しいシートが作成されてしまいました。 先頭から2番目に作成しようとした場合はどうすればよろしいでしょうか?

関連するQ&A

専門家に質問してみよう