Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1863 / 2272 ツリー ←次へ | 前へ→

【4924】エクスポート時にシート名をコントロールするには にしもり 05/4/19(火) 10:08 質問[未読]
【4928】Re:エクスポート時にシート名をコントロー... 小僧 05/4/20(水) 10:36 発言[未読]
【4929】Re:エクスポート時にシート名をコントロー... にしもり 05/4/20(水) 11:06 お礼[未読]
【4930】Re:エクスポート時にシート名をコントロー... 小僧 05/4/20(水) 11:56 発言[未読]

【4924】エクスポート時にシート名をコントロール...
質問  にしもり  - 05/4/19(火) 10:08 -

引用なし
パスワード
   こんにちは。
下記の記述では「回数_当月」というシートが回数_埼玉.xlsに出来ます。

 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "回数_当月", "C:\回数_埼玉.xls"

エクスポートする際に「回数_当月」を「回数_4月」「回数_5月」・・・というシート名にしたいのですが、
モジュール内でコントロールを行なうにはどうすればよいでしょうか?

【4928】Re:エクスポート時にシート名をコントロー...
発言  小僧  - 05/4/20(水) 10:36 -

引用なし
パスワード
   ▼にしもり さん:
おはようございます。
 
【4842】既存のExcelファイルにエクスポートするには
【4871】2行目からインポートしたい

などを拝見させて頂いておりますが、
今回も新たなブックにエクスポートでなく
存在するファイルに対しての追加処理なのでしょうか?

単純な新規のエクスポート、インポートの処理以外を行うには
TransferSpreadsheet メソッドを使うのは適していないように思われます。

Excelのシートを操作するにはAccessにはそのような機能はないので、
Excel側の命令を使うことが必要になってきます。

TransferSpreadsheet メソッドでなくオートメーションを利用して
Excelを操作する事を検討されてみてはいかがでしょうか?

【4929】Re:エクスポート時にシート名をコントロー...
お礼  にしもり  - 05/4/20(水) 11:06 -

引用なし
パスワード
   ▼小僧 さん:
>Excel側の命令を使うことが必要になってきます。

わかりました。
もうすこし自分の力で研究してみたいと思います。
ありがとうございました。

【4930】Re:エクスポート時にシート名をコントロー...
発言  小僧  - 05/4/20(水) 11:56 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは。

>もうすこし自分の力で研究してみたいと思います。

【4919】Re:既存のExcelファイルにエクスポートするには
のコードを少し改変してあります。
少しでも研究のお力になれれば幸いです。

Sub xlsOut2()
Dim FSO As Object
Dim RS As DAO.Recordset
Dim xlsApp As New Excel.Application
Dim xlsWkb As New Excel.Workbook
Dim xlsSht As New Excel.Worksheet
Dim MyTBL As String
Dim MyFile As Variant
Dim ShtName As String
Dim MySheet As Variant
Dim Cnt As Long
Dim FLG As Boolean

'出力するテーブル、出力先ファイルの指定
  MyFile = "C:\回数_埼玉.xls"
  MyTBL = "回数_当月"
  ShtName = "回数_4月"
 
'MyFileの存在チェック
  Set FSO = CreateObject("Scripting.FileSystemObject")
    If Not (FSO.FileExists(MyFile)) Then
    
'MyFileがなかった時はそのままエクスポート
      DoCmd.TransferSpreadsheet acExport, _
      acSpreadsheetTypeExcel9, MyTBL, MyFile, True
 
'シートの名前を変更
      Set xlsWkb = xlsApp.Workbooks.Open(MyFile)
      xlsWkb.Sheets(MyTBL).Name = ShtName
      xlsWkb.Save
      xlsWkb.Close: Set xlsWkb = Nothing
      xlsApp.Quit: Set xlsApp = Nothing
    Else
    
'MyFileがあった時はレコードセットにMyTBLの値を代入
      Set RS = CurrentDb.OpenRecordset(MyTBL, dbOpenDynaset)
      Set xlsWkb = xlsApp.Workbooks.Open(MyFile)

'同名のシートの検索
      FLG = False
      For Each MySheet In xlsWkb.Sheets
        If MySheet.Name = ShtName Then
          FLG = True
          Exit For
        End If
      Next

'同名のシートがあった場合は全クリア、
'無かった場合はブックの最後にシートを追加
      If FLG Then
        xlsWkb.Sheets(ShtName).Cells.ClearContents
      Else
        Cnt = xlsWkb.Sheets.Count
        xlsWkb.Sheets.Add after:=xlsApp.Worksheets(Cnt)
        xlsWkb.ActiveSheet.Name = ShtName
      End If
      
'シートを開く
      Set xlsSht = xlsWkb.Sheets(ShtName)
      
'シートの1行目はフィールドの名前を書き込む
      For Cnt = 1 To RS.Fields.Count
        xlsSht.Cells(1, Cnt).Value = RS.Fields(Cnt - 1).Name
      Next

'シートの2行目以降はレコードセットに代入された値をコピー
      xlsSht.Range("A2").CopyFromRecordset RS
      
'シートの保存、オブジェクトの開放
      xlsWkb.Save
      xlsWkb.Close: Set xlsSht = Nothing: Set xlsWkb = Nothing
      xlsApp.Quit: Set xlsApp = Nothing
      RS.Close
      Set RS = Nothing
    End If
End Sub

1863 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078241
(SS)C-BOARD v3.8 is Free