Access VBA質問箱 IV

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

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


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

【11978】複数サブフォームのエクスポート てん 11/4/20(水) 18:27 質問[未読]
【11979】Re:複数サブフォームのエクスポート てん 11/4/21(木) 16:07 発言[未読]
【11980】Re:複数サブフォームのエクスポート 小僧 11/4/27(水) 11:11 回答[未読]

【11978】複数サブフォームのエクスポート
質問  てん  - 11/4/20(水) 18:27 -

引用なし
パスワード
   すみません
どなたか、教えてください。

フォームにサブフォームを設置して それをEXCELにエクスポートする
というところまで出来たのですが、
フォームの中に、サブフォームが複数あって、エクスポート先のExcelのシート分けたい場合 どのような記述をすればいいのでしょうか。

一つ設置した場合はこちらで動かしています↓
  Dim xls As Excel.Application
  Dim wkb As Excel.Workbook
  Dim rst As DAO.Recordset
  Dim cnt As Long
  
  Set rst = Me!SubF.Form.RecordsetClone
  Set xls = CreateObject("Excel.Application")
  Set wkb = xls.Workbooks.Open("C:\data\test.xls")
  
  With wkb.Worksheets("Sheet1")
    .Range("A1").CurrentRegion.ClearContents
    For cnt = 1 To rst.Fields.Count
    .Cells(1, cnt).Value = rst.Fields(cnt - 1).Name
    Next
    .Range("A2").CopyFromRecordset Data:=rst
    
  End With

【11979】Re:複数サブフォームのエクスポート
発言  てん  - 11/4/21(木) 16:07 -

引用なし
パスワード
   前進しました。
ただ、フォームにあるボタンで実行すると、1回目はちゃんとデータが貼りついてきますが、
2回目以降は、フィールド名だけで、データを持ってきません。。。
フォームは開いたままの状態です。

なぜでしょうか。
また、記述方法で、改善したほうがいいところなどありましたら、教えてください。
よろしくお願いします。

Dim xls As Excel.Application
Dim wkb As Excel.Workbook
Dim ws As Excel.Worksheet
Dim rst As DAO.Recordset
Dim cnt As Long
Dim i As Integer
  

Set xls = CreateObject("Excel.Application")
Set wkb = xls.Workbooks.Open("C:\data\test.xls")
        
For i = 1 To 2
Set ws = wkb.Worksheets(i)
    
  Select Case ws.Name
  Case "Sheet1"
    Set rst = Me![SubA].Form.RecordsetClone
  Case "Sheet2"
    Set rst = Me![SubB].Form.RecordsetClone
  End Select
  
  With wkb.Worksheets("Sheet" & i)
    '既存データ消去
    .Range("A1").CurrentRegion.ClearContents
    '項目名 & データセット
    For cnt = 1 To rst.Fields.Count
      .Cells(1, cnt).Value = rst.Fields(cnt - 1).Name
    Next
    .Range("A2").CopyFromRecordset Data:=rst
  End With
  
  Next i
  
  'Excel画面を表示
  xls.Visible = True
  '保存
  wkb.Save
  
  Set wkb = Nothing: Set xls = Nothing
  Set rst = Nothing

【11980】Re:複数サブフォームのエクスポート
回答  小僧  - 11/4/27(水) 11:11 -

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

> 2回目以降は、フィールド名だけで、データを持ってきません。。。
> フォームは開いたままの状態です。

こちらでも同じ事象が発生しました。
CopyFromRecordset する前に Recordset を
先頭に持ってくる処理を入れてあげた方が良さそうですね。

rst.MoveFirst
.Range("A2").CopyFromRecordset Data:=rstt


> 記述方法で、改善したほうがいいところなどありましたら

C:\data\test.xls は必ずシートが2枚以上ありますでしょうか。
また、シート名は Sheet1、Sheet2 固定なのでしょうか。

上記の様な箇所がはっきりしないと何とも言えませんが
もうちょっとすっきりしたコードにできるかもしれません。

  For i = 1 To 2
    Select Case i
      Case 1
        Set rst = Me![SubA].Form.RecordsetClone
      Case 2
        Set rst = Me![SubB].Form.RecordsetClone
    End Select
    
    rst.MoveFirst
    With wkb.Worksheets(i)
    '既存データ消去
      .Range("A1").CurrentRegion.ClearContents
    '項目名 & データセット
      For cnt = 1 To rst.Fields.Count
        .Cells(1, cnt).Value = rst.Fields(cnt - 1).Name
      Next
      .Range("A2").CopyFromRecordset Data:=rst
    End With
  Next i

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