Access VBAによる指定のExcelファイル編集方法

このQ&Aのポイント
  • Access VBAを使用して特定のExcelファイルを編集する方法について教えてください。
  • Runtime環境で使用するため、CreateObjectは使用できません。
  • ファイルをVBAから扱えるようにする方法やWorkbookをSETする方法について具体的に教えてください。
回答を見る
  • ベストアンサー

Access VBAより特定のExceファイル編集

お世話になります。 VBAよりExcelを編集したいのですがどのようにすればよい のでしょうか。 なお、Runtime環境で当該Accessは利用するので、 CreateObjectは使えません。 例えば、C:\test\123.xlsx のファイルに対して何か処理を 行ないたい場合、このファイルをVBAから扱えるように SET(格納?)する必要があると思うのですが。。 前に「抽出結果をExcelに出力したい」というような質問をさせて 頂き、GetObjectでExcelシートをSETして出力することが できたのですが、今回はWorkbook自体をSETするには どのようにすればよいか・・・という質問になります。 その辺の具体的なやり方をご教示頂けると幸いです。 宜しくお願い致します。

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

  • ベストアンサー
回答No.1

オートメーションで操作する場合は http://allabout.co.jp/gm/gc/297724/ のように少なくとも構造は把握しておかないと。 以前の質問と重複するようですが復習の意味で読んでください。 Q8801507 も停滞中のようですし。 で、ユーザーさんがExcelを立ち上げていないのを確認後 Dim XL as object Dim BK as object Dim SH as object '未使用です set xl=getobject("D:\123.xls").application set bk=xl.workbooks.open("D:\123.xls") bk.sheets("sheet1").cells(1,1) =1234 bk.close savechanges:=true xl.quit set bk=nothing:set xl=nothing みたいな感じです。 処理の間はユーザーにはExcelを立ち上げることすら行ってほしくないので 注意喚起は必要だと思います。

naoto0216
質問者

お礼

NotFound404様 いつもご回答ありがとうございます。 せっかくご回答頂いていたのに放置しており大変申し訳ございません。 当該ツールを作成する際に、もちろん予め仕様を決めた上で進めては いるのですが、作成途中で色々問題が生じてしまい、当初の仕様から 徐々に変わってきたりしてしまいます。 問題が生じるというよりは、元々わたしのスキル的な問題で「これで いける!」と思っても、いざ作り込んでいくうちに「この方法じゃできない。。」 となってしまいます。 で、じゃ別の方法ということで次から次へ質問を投稿している次第です。 結局「ここでこういう処理をやるなら、この処理(質問した内容)はいらない」 となったときに、質問を放置してました。。 回答して頂いた方々に大変失礼なことをしていたこと申し訳なく思います。 とりあえず、現在作成しているものは早急に仕上げる必要があるので 落ち着いたら復習する意味で、今回投稿させて頂いた一連の内容を 再度読み直したいと思います。 ありがとうございました。

関連するQ&A

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

    お世話になります。 現在、Accessにてツールを作成しておりますが、VBAより 特定のパスにあるExcelファイルのシート名を取得する必要が あります。 ※当該ツールはRuntime環境にて利用するため、CreateObject  が利用できません。 取得はDAO.Tabledefs を使って取得できましたが、GetObjectを 使って取得する方法をご教授頂けると幸いです。 シート名を取得するExcelファイルが、 C:\test\テスト.xlsxの場合 どのような記述になりますでしょうか。 勉強不足で大変恐縮ですが、ご教授のほど宜しくお願い致します。

  • VBAで生成されたExcelファイルの閉じ方

    VBAで以下の処理を書いています。 ・Excelオブジェクトを生成する。 ・Excelファイルをオープンする。 ・各行を読取、Accessのテーブルに挿入する。 ・終了 といった処理を行っています。終了する前に読取ったExcelの オブジェクトを終了しないといけないと思っています。 Workbook.Close Set Workbook = Nothing とやると、Workbook.Closeの所でファイルを保存しますかといった メッセージが出てきます。単純に開いていたファイルを閉じたいだけ なのですが、どういった処理を書けばExcelのファイルを何もメッセージを 表示せずに閉じることができるでしょうか?

  • Access VBA 新しいシート作成

    Access VBAにてExcelファイルを編集するプログラムを作成しています。 Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言 Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言 Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言 '実行時バインディング Set AppObj = CreateObject("Excel.Application") '編集を実施するワークブックを開く 'PathにはExcelファイルのフルパス、ExfにExcelファイル名が格納されています。 Set WBObj = AppObj.WorkBooks.Open(Path & Exf) 'Excelアプリケーションを表示する AppObj.Visible = True ※各Excelファイルはシートが1つだけ存在します。 この処理の直後に『数値』という名称の新しいシートを左から2番目に作成したいのですが、どのように記述すればよろしいでしょうか?

  • アクセスからエクセルファイルが開けない

    Cドライブに、新規 Microsoft Office Excel ワークシート.xlsxと言うファイルを作成しました。 そのうえで、アクセスから ―――――――――――――――――――――――――――――――― Sub できない1() Dim xlsWB As Object Set xlsWB = CreateObject("C:\新規 Microsoft Office Excel ワークシート.xlsx") xlsWB.Application.Run xlsWB.Name Set xlsWB = Nothing End Sub ―――――――――――――――――――――――――――――――― をすると ------------------------ 実行時エラー '1004' マクロ'新規 Microsoft Office Excel ワークシート.xlsxを実行できません。 このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。 ------------------------ となります。 なので別の方法で開こうと、 ―――――――――――――――――――――――――――――――― Sub できない2() Dim xlApp As Excel.Application Dim xlBook As Excel.Application Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\新規 Microsoft Office Excel ワークシート.xlsx") xlApp.Visible = True Set xlApp = Nothing Set xlBook = Nothing End Sub ―――――――――――――――――――――――――――――――― にしたのですが、 実行時エラー’13’型が一致しません になります。 何がダメなのでしょう? マクロ付きファイルにしないとダメですか? もしくはファイル名に空白があるからエラーになるのでしょうか? そして、なぜ二つのコードのエラー内容がちがうのでしょう? それと、なぜか上記マクロを実行していると ~$新規 Microsoft Office Excel ワークシート.xlsx と言うファイルが出来上がります。(添付画像参照) でもファイルは開いていません。 この状態で、新規 Microsoft Office Excel ワークシート.xlsx をダブルクリックして開こうとすると、一瞬だけ画面に表れてすぐ消えます。 オフィスのバージョンは2007です。 ご回答よろしくお願いします。

  • accessからエクセルのデータ転送上書きVBA

    宜しくお願い致します win10 access365 先日、ここでお尋ねした アクセスファイルのVBAコードからエクセルファイルを作成するための コードをお尋ねし、以下では L.xlsxが作成されて、 アクセスのテーブル KJKTから データ転送が 行われるというコードを教示頂きました しかしながら 同様の操作をするときに L.xlsxのデータが 上書きされずに 以前に作ったデータのまま 残ってしまってました そこで 以下のようなエクセルVBAを R.xlsmに作りました Ldataclear() です 毎回 このマクロを実行して いったんL.xlsxの データを当該シートから削除して まっさらにして そのうえで Exp123()を実行すれば 目的は叶うのですが 迂遠なような気もしました もっと簡単に 上書き保存のできる コードなど あるのでありましたら 御教示くださいませ 宜しくお願い致します Private Function Exp123() '変数宣言 Dim srchXls As String 'Excelエクスポート先のファイルパス srchXls = "C:\Users\USER\Desktop\ACCESS\L.xlsx" 'Excelファイルの出力 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "KJKT", srchXls, True, "output" 'Excelファイルをエクスポートした旨を通知する。 MsgBox "Excelをエクスポートしました。" End Function ---------------------- Public Function ExcelRmacro() Dim oApp As Object Set oApp = CreateObject("Excel.Application") oApp.Visible = True 'Only XL 97 supports UserControl Property On Error Resume Next oApp.UserControl = True 'ファイルを開く oApp.Workbooks.Open FileName:="C:\Users\USER\Desktop\ACCESS\R.xlsm" oApp.Application.Run ("'R.xlsm'!Ldataclear") End Function -------------------------------- Sub Ldataclear() ' FilePath = "C:\Users\USER\Desktop\ACCESS\L.xlsx" 'ここにファイルの場所ファイル名を記載 Set Wb = GetObject(FilePath) Set Ws = Wb.Worksheets("output") 'ここにシートを記載する Ws.Cells.Delete Wb.Save Application.CutCopyMode = False ActiveWorkbook.Save End Sub

  • もし該当のアクセスファイルが開いているのなら開かな

    エクセルからアクセスを開く方法を教えてください。 そして、 「もし該当のアクセスファイルが開いているのなら開かない」 と言う条件も付け加えたいです。 Sub test1() Dim strAcName As String Dim accApp As Object strAcName = "D:\ アクセスファイル名.mdb " 「GetObject」「CreateObject」どちらにしても結果は同じ? Set accApp = GetObject(strAcName) Set accApp = CreateObject(strAcName) 既にAccessファイルを開いている場合は、Visible = Trueにしたらエラーになる。 If Not accApp Is Nothing Then accApp.Visible = True accApp.OpenCurrentDatabase (strAcName) End If Set accApp = Nothing End Sub だと、 OpenCurrentDatabase の部分で、実行時エラー7867 既にこのデータベースは開いています。 になります。 だからってこの部分をコメントアウトすると 前回と同じように Set accApp = Nothingを通り越すと 折角開いたアクセスファイルが閉じてしまいます。 エクセルからアクセスを開く時にもハイパーリンクで Sub test2() Dim strAcName As String strAcName = "D:\ アクセスファイル名.mdb " ThisWorkbook.FollowHyperlink strAcName End Sub で開けたのですが、 「もし該当のアクセスファイルが開いているのなら開かない」 が出来ないので、 「GetObject」か「CreateObject」を 使って開くのかな?と思っています。

  • Excel VBA Accessでデータ取り込み

    Excel VBA、Access VBAについてお教え下さい。 「My_Excel.xlsm」というファイルがあります。このファイルにはボタンが1つあります。 このボタンを押すことにより、「Imp_Excel.xlsx」というファイルを取り込みたいと思います。 取り込み先ですが、「My_Excel.xlsm」に取込むのではなく、Accessの「My_Access.accdb」の「T_MyTable」というテーブルに取り込みたいと思っています。 Accessから直に「Imp_Excel.xlsx」をインポートするには、TransferSpreadsheetを用いれば比較的簡単にデータをAccessに取り込むことができるのですが、「My_Excel.xlsm」をまたいでAccessに取り込みたいので、TransferSpreadsheetは使えません。 やり方としては、 My_Excel.xlsxを開く。 レコードセット取得。 レコードセットがEOFになるまでまわして、SQLのINSERT、またはAddNewメソッドを使用して1件1件挿入していくしか方法はないでしょうか? 今のところ、私が思い浮かぶのは上記の方法なのですが、何かもっと簡単にやれるような方法はあるでしょうか?よろしくお願いします。

  • エクセルファイルの特定セルに別エクセルファイルのデータを入力することについて

     お詳しい方よろしくお願いします。 <状況> (1)ファイル名が「001.xlsx」から「100.xlsx」まで100個のエクセルファイルがあります。 (2)これら100個のファイルそれぞれのA1セルに入力したいデータが入力されたエクセルファイル(集約データ.xlsx)があります。 集約ファイル.xlsxの内容    A列          B列 1  001  平成21年4月から平成21年5月まで 2  002  平成21年7月から平成21年12月まで 3  003  平成21年4月から平成21年10月まで ・ ・ というように、A列にはデータ出力先エクセルファイル名 B列には、A列に入力されたエクセルファイルのA1セルに出力したいデータが格納されています。 <行いたい作業> 集約データ.xlsxのB列に格納してあるデータをA列のファイルに出力したいと考えています。 ついては、この方法をご教示いただきたいと存じます。 よろしくお願いします。

  • 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 2003 GetObjectを連続で使うとエラー

    以下のVBAを実行したいのですが Private Sub test() Dim objWorkbook1 As Excel.Workbook Dim objWorkbook2 As Excel.Workbook Set objWorkbook1 = GetObject("C:\あいうえお\200706.xls") Set objWorkbook2 = GetObject("C:\かきくけこ\200706.xls")←別の場所にある同じファイル End Sub 「アプリケーション定義またはオブジェクト定義のエラーです。」と 表示されます、GetObjectを2回連続で呼ぶことは 出来ないのでしょうか? よろしくお願いします。