• 締切済み

【ACCESS】 VBA

accessのVBAからエクセルファイルを参照する仕組みを作成しています。 エクセルファイルのシート名は数字になっており 下記のように記述するとエラーとなります。対応方法を教えてください。 STR_sheetは1 Set Xls_sheet = Xls_book.Worksheets(STR_sheet) こうしてみてもダメ Set Xls_sheet = Xls_book.Worksheets(Format(STR_sheet)) ちなみに、エクセルのシート名は変更不可です。

みんなの回答

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

シート名が数字でも数字文字であっても、 エクセルVBAの世界のはなしですが Sub test02() s = 2 Worksheets(Trim(Str(s))).Activate Worksheets("2").Activate End Sub (Trim関数は、余分な前後の空白を取り除くため。) のようにすると、うまく行くことからして、それを参考にアクセスでのVBAコードをつくってテストしてください。 Worksheets(数字)はシートの画面のシート名のタブの左からの順番をさすことになり、0はダメだし、シートの数以上の数字を指すと「みつかりません」的エラーになるはず。要注意。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1338225338 こういう記事が参考になるのでは。

mimi0106
質問者

お礼

シート名が半角+数字になっていたことがエラーの原因でした。 ご回答ありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

回答するには情報が不足しておりますが、エクセルのシート名が1,2,...でも下記コードは問題なく動作しました。当方、Office2010(32bit)、Win7(64bit)です。 ご参考まで。 'Book1.xlsxの一番左のシート名を「2」、二番目のシート名を「1」とする。 Sub test001() Dim xlApp As Excel.Application Dim Xls_book As Excel.Workbook Dim Xls_sheet As Excel.Worksheet Dim STR_sheet As Long '普通STR_sheetという変数名には文字列型を割り当てると思うのですが... STR_sheet = 1 Set xlApp = New Excel.Application ' xlApp.Visible = True Set Xls_book = xlApp.Workbooks.Open(GetDesktopPath & "\Book1.xlsx") Set Xls_sheet = Xls_book.Worksheets(STR_sheet) Debug.Print Xls_sheet.Name Set Xls_sheet = Xls_book.Worksheets(CStr(STR_sheet)) Debug.Print Xls_sheet.Name Xls_book.Close savechanges:=False xlApp.Quit Set xlApp = Nothing End Sub '実行結果 '2 '1 Sub test002() Dim xlApp As Excel.Application Dim Xls_book As Excel.Workbook Dim Xls_sheet As Excel.Worksheet Dim STR_sheet As String STR_sheet = "1" Set xlApp = New Excel.Application ' xlApp.Visible = True Set Xls_book = xlApp.Workbooks.Open(GetDesktopPath & "\Book1.xlsx") Set Xls_sheet = Xls_book.Worksheets(STR_sheet) Debug.Print Xls_sheet.Name Set Xls_sheet = Xls_book.Worksheets(CLng(STR_sheet)) Debug.Print Xls_sheet.Name Xls_book.Close savechanges:=False xlApp.Quit Set xlApp = Nothing End Sub '実行結果 '1 '2 Private Function GetDesktopPath() As String Dim wScriptHost As Object, strInitDir As String Set wScriptHost = CreateObject("Wscript.Shell") GetDesktopPath = wScriptHost.SpecialFolders("Desktop") Set wScriptHost = Nothing End Function

mimi0106
質問者

お礼

シート名が半角+数字になっていたことがエラーの原因でした。 ご回答ありがとうございました。

関連するQ&A

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • ACCESSからexcelを操作

    accessのVBからEXCELのデータ編集を行う際、 最後エクセルを開放しているつもりなのですが、できていないようです。 ※タスクマネージャーにエクセルのタスクが残っており、 該当のファイルを開くと白くなっている。閉じて再度開くと正常動作する。 いくつかの帳票がありますが、 現象が起こるものと起こらないものがあります。 試しに Xls_app.ScreenUpdating = Trueにしてみるとタスクには残っているが 問題なく開けます。 Xls_app.ScreenUpdating = Falseだとタスクにも残るし、ファイルを開くと白くなっているような感じです。 しかし発生原因がわからず、再発するような気もするので根本原因を 突き止めたいです。 Excel起動時 ---------------- Set Xls_app = CreateObject("Excel.Application") Set Xls_book = Xls_app.Workbooks.Open(STR_out_file) Set Xls_sheet = Xls_book.Worksheets(STR_sheet1) Set Xls_sheet2 = Xls_book.Worksheets(STR_sheet2) 'DEBUG Xls_app.Visible = False Xls_app.ScreenUpdating = False Xls_app.UserControl = True ' Xls_app.Visible = True ' Xls_app.ScreenUpdating = True Private Sub Excel終了()----------------------- Xls_book.Close (True) Xls_app.Quit Set Xls_sheet = Nothing Set Xls_sheet2 = Nothing Set Xls_book = Nothing Set Xls_app = Nothing End Sub

  • Access2000:VBAを使用したエクセル操作

    下記のように既存のエクセルファイルにクエリからとってきたデータを挿入したいと考えております。 既存のエクセルファイルを開くことは成功したのですが、ある条件だとシートを追加するという処理(オブジェクト記述)がわかりません。 シート追加、あわせてブック追加方法もお願いします。 Set ExcelApp = CreateObject("Excel.Application") Set Book = ExcelApp.Workbooks.Open("C:\query\module\VBExcel.xls") Set Sheet = Book.Worksheets("test1")←追加したい

  • Excel VBAで他のワークブックからのコピぺの仕方について

    Excel VBAで開いている全てのワークブックから決められたセルの中身とそのシート名をそれぞれ決められた一つのワークブックにコピぺする マクロを作りたいのですが、どうやって作って良いのかが分かりません。 例えば、 Sub Mac() For i = 1 To 100 Workbooks("Book1.xls").Worksheets("sheet1").Range(Cells(2108, 2), Cells(3108, 2)).Cut Destination:=Workbooks("Book1.xls").Worksheets("sheet1").Cells(13, 2) End Sub みたいにすれば良いと思うのですが、開いている全てのファイルからのコピぺってどうやって記述するのでしょうか? 何卒よろしくお願い致します。

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • vba ワークシートを変数を用いて開くには

    初歩的な質問ですが、 ワークシートの書式が新しくなったことで、書き換えをすることになりました。 現在のエクセルファイルから、新しいエクセルファイルへ、セルの値を参照しながら VBAにて作業をしたいのですが、 Sub changesheet() Dim iname As String Dim wbname As String iname = InputBox("ブック名を入力", "対象ブックを入力") wbname = "シート2012(" & iname & ").xls" ActiveSheet.Range("P4").Value = Workbooks(wbname).Worksheets("Sheet1").Range("P4").Value End Sub この記載で実行すると、インデックスが有効範囲にありません とエラーになってしまいます。 変数(inputbox)を用いたセルの参照はどのように記述すればよろしいでしょうか? よろしくお願いします。

  • Excel VBAを使って、Excelデータを別のExcelファイルに取り込みします

    報告書にexcel VBAを使って、(報告書を開いたまま)報告書のデータを別のexcelファイル(一覧)に取り込みします。 Sub k() Dim ブック As Workbook Set ブック = Workbooks.Open("c:\テスト\" & "一覧.xls") ブック.Worksheets("Sheet1").Cells(3, 2) = Worksheets("企業情報シート").Cells(3, 3) End Sub 報告書の"Worksheets("企業情報シート").Cells(3, 3)"は書き方がおかしいみたいで、正しい書き方を教えてください。

  • ACCESSのVBAについて

    ACCESSのVBAを使って、データの集計・分析などをしてEXCELに出力、さらにそのEXCELを少しいじる、←このVBAをVBSで実行 といった事をしていたのですが、 会社の端末が一部Office2003から2010に変わったため、参照設定に不具合が出てきました。 内容は、元々2003で作成されたデータベースを2010で開くとVBAの参照設定が「Microsoft Access 11.0 Object Library」だったものは「Microsoft Access 14.0 Object Library」に変わるのですが、 「Microsoft Excel 11.0 Object Library」は変更されずに参照不可になってしまいます。 以前、別のところで同様の質問をした際に、 →「参照設定」をして、コードを作成したあと、コードに使われている定数を全部調べ上げて、変数宣言のコードを作成し、 参照設定のチェックを外して、宣言のコードを追加する、ということで、参照設定の対策をします。 といった回答を頂いたのですが、いまいち理解できていません。 以下のコードをEXCELの参照設定を外しても動くようにするにはどのようにしたら良いのでしょうか?よろしくお願いします。 Sub TEST() Dim xls As Excel.Application Dim wb As Excel.Workbook DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "TEST", "C:\TEST.xls", True Set xls = CreateObject("Excel.Application") Set wb = xls.Workbooks.Open("C:\TEST.xls") With xls .Sheets("Sheet1").Select .Range("A1").Value = "成功" .Visible = True End With End Sub

  • EXCEL VBAで指定したブックの保存場所を検索したい。(EXCEL2003)

     こんにちは、チェーン店型の店舗で働いている者です。  私が作ったVBA付のエクセルファイルを複数の店舗で使ってもらおうと考えてます。しかし、そのワークシートの中に他のブック(ここでは『売上集計表.xls』)のセルの値を参照しているセルが含まれており、参照する『売上集計表.xls』の保存場所が店舗によって違うので困っています。 『売上集計表.xls』は会社で作成されたものですので、どの店舗でも同じファイル名、レイアウトのうえ、『売上集計表.xls』という名のEXCELファイルはパソコンの中にひとつしか存在しません。 エクセルを起動したときに、参照するファイルが見つからないとリンクの編集をたずねてくるので、それでも大丈夫なのですが、パソコンに疎い人も多いので出来ればVBAで自動的にリンクを設定できるような仕組みがあればと思い質問させていただきました。

  • ExcelのVBAについてです。

    例えば"Book1.xls"という名前のブックの"Sheet1"という名前のシートの一部を削除する。 これをVBAでやらせようと思うんですが、"Book1.xls"を開かずに行うことはできるんでしょうか。 Workbooks("Book1.xls").Worksheets("Sheet1").Range("C7:M51").ClearContents のようにしてるんですがうまくいきません。 "Book1.xls"はLAN上のブックで実際はフルパスで指定してます。 よろしくお願いします。