Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 8 : Access 2010)
vba 初心者です。
投稿日時: 19/02/08 15:03:59
投稿者: しがない学生

vba初心者です。
Access内でvbaを使い実行したいことがあります。
何もわからなく調べてもよくわかりません。
実行したいものは以下になります。
集計テーブルを開く→全体をコピー→指定エクセルを開く→指定のシートの(A1)に値の貼り付け
までの動作をvbaで実行したいのですが、できません。
誰かご教授ください。

回答
投稿日時: 19/02/08 15:35:46
投稿者: sk

引用:
集計テーブルを開く
→全体をコピー
指定エクセルを開く
指定のシートの(A1)に値の貼り付け

・ここでの「指定エクセル」とは、いずれかのフォルダに存在する
 作成済みの Excel ブックのことか。
 
・「指定シート」がそのブックに存在するワークシートの 1 つだとして、
 何故「貼り付け」ではなく「値の貼り付け」を行ないたいなのか。
 
・単純に[集計テーブル]の全てのレコードを Excel ブックとして出力するだけなら、
 例えばマクロならば[ワークシートのインポート/エクスポート]アクション、
 VBA ならば DoCmd オブジェクトの TransferSpreadsheet メソッドを
 呼び出すようにすればよいが、それでは実現出来ない理由があるのか。

投稿日時: 19/02/13 13:50:21
投稿者: しがない学生

 
・ここでの「指定エクセル」とは、いずれかのフォルダに存在する
 作成済みの Excel ブックのことか。
→デスクトップにあるexcelブックになります。
 
・「指定シート」がそのブックに存在するワークシートの 1 つだとして、
 何故「貼り付け」ではなく「値の貼り付け」を行ないたいなのか。
→特に貼り付けでいけないわけではないですが、値の貼り付けで行いたいです
・単純に[集計テーブル]の全てのレコードを Excel ブックとして出力するだけなら、
 例えばマクロならば[ワークシートのインポート/エクスポート]アクション、
 VBA ならば DoCmd オブジェクトの TransferSpreadsheet メソッドを
 呼び出すようにすればよいが、それでは実現出来ない理由があるのか。[/quote]
→下記に今回作成指定いるモジュールを置きます。
 このままでもCSVではインポートできているんですが、CSVで出力したexcelで開くところと、excelを閉じるところができておりません。
colseを使いましたが画面上は閉じるのですが、タスクマネージャー上では消えてませんでした。
  
 
Option Compare Database
Function CSVエクスポート()
 
'Kill "D:\Desktop\sa_.csv"
 
DoCmd.TransferText _
 TransferType:=acExportDelim, _
  TableName:="テーブル1", _
    FileName:="D:\Desktop\sa_.csv"
     
     
 'DoCmd.TransferSpreadsheet acImport, 3, _
' "Employees", "D:\Desktop\sa_.xlsx", True, "A1:G12"
      
End Function
 Function test2()
 
 
 Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言
 Dim AppObj2 As Object
    Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言
    Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言
    Dim FilePath As String
    Dim FilePath2 As String
    Dim FileName As String
     
    
     
     
     
    FilePath = Application.CurrentProject.Path & "\sa_.csv" 'Excelファイルのパスを指定
     
    Set AppObj = CreateObject("Excel.Application") '実行時バインディング
    AppObj.Visible = False
    Set WBObj = AppObj.Workbooks.Open(FilePath) 'ワークブックを開く
    AppObj.Visible = True
      
     AppObj.Sheets("sa_").Select
     Range("A1:E12").Copy
      
     FilePath2 = Application.CurrentProject.Path & "\a.xlsx"
    '※ Excelファイルが使用するAccessファイルと同じフォルダにある場合の表記
     Set AppObj2 = CreateObject("Excel.Application") '実行時バインディング
    AppObj2.Visible = True
    Set WBObj = AppObj2.Workbooks.Open(FilePath2) 'ワークブックを開く
     AppObj2.Visible = True
    
    AppObj2.Worksheets("@貼り付け").Range("A1").PasteSpecial _
        xlPasteValuesAndNumberFormats
     
     
 End Function

回答
投稿日時: 19/02/13 19:35:15
投稿者: sk

引用:
・ここでの「指定エクセル」とは、いずれかのフォルダに存在する
 作成済みの Excel ブックのことか。
→デスクトップにあるexcelブックになります。
  
・「指定シート」がそのブックに存在するワークシートの 1 つだとして、
 何故「貼り付け」ではなく「値の貼り付け」を行ないたいなのか。
特に貼り付けでいけないわけではないですが、値の貼り付けで行いたいです

それでは理由と目的が分かりません。
 
例えば、
 
・デスクトップに 1 つの Excel ブックが保存されている。
 
・そのブックの中の 1 つのワークシートには、あらかじめ
 何らかの書式(表示形式や罫線等)が設定されたセル範囲が
 存在する。
 
・そのセル範囲に対して、Access データベース内の
 テーブル[テーブル1]の全てのレコードの全てのフィールド
 (の値だけ)を出力しようとしている。
 
といったことを目的とされているのであれば、
一応は話の筋が通るのですが。
(この場合の Excel ブックは「帳票テンプレート」に相当する)
 
特に Excel ブック側において書式等の設定を行なう必要がなく、
1 個のテーブル/クエリを 1 個の(書式なしの)ワークシートとして
出力したいだけなのであれば、ただそのテーブル/クエリを
TransferSpreadsheet メソッドによってエクスポートすれば
それで済む問題でしょう。
 
引用:
このままでもCSVではインポートできているんですが、

引用:
DoCmd.TransferText _
 TransferType:=acExportDelim, _
  TableName:="テーブル1", _
    FileName:="D:\Desktop\sa_.csv"

「インポート」ではなく「エクスポート」ですよね。
 
引用:
CSVで出力したexcelで開くところ

また、「 Access のテーブルを CSV ファイル(=テキストファイル)として
エクスポート(出力)する」のと、「 Access のテーブルを
Excel ワークシート( xls または xlsx 形式)としてエクスポートする」
のは、また別の話でしょう。

回答
投稿日時: 19/03/06 22:16:52
投稿者: WinArrow
投稿者のウェブサイトに移動

VBAを使わなくても
簡単な操作で、AccessのテーブルをExcelシートに複写(取り込み)できます。
  
Excelブックを開いて
「データ」「Access」データベースを選択→テーブルを選択→取り込みたいシートとセルを指定→「OK]
 
※質問タイトルは、
 質問したいことを簡潔に記述するところです。
 自己紹介するところではありません。
 
  

トピックに返信