VBSでExcelにデータ貼り付け
備忘録として、、、
おそらく定番の処理だが、初めての記述だったので。
以下は、AccessVBAでADOを使ってDBからデータを取り出して、Excelに
エクスポートしている。
Set cn = CurrentProject.Connection
Set rs = cn.Execute(SQL)
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set bk = xl.WorkBooks.Add
Set sh = bk.WorkSheets(1)
With sh
j = 1
Do Until rs.EOF
If j = 1 Then
For i = 0 To rs.Fields.Count - 1
.Cells(j, i + 1) = rs.Fields(i).Name
Next
j = j + 1
End If
For i = 0 To rs.Fields.Count - 1
.Cells(j, i + 1) = rs.Fields(i).Value
Next
j = j + 1
rs.MoveNext
Loop
End With
rs.Close
Set rs = Nothing
利点
開発の中心がたとえばAccessなら、コードの記述がAccessだけで済む。
ExcelVBAを書いたりいろいろ不要。
欠点
ExcelVBAで直接書くより遅い。
勉強不足
DoCmd.TransferSpreadSheetでもできるはずだが、試してない。
shell関数で、Excelを立ち上げて同じことできないか??。知識なし。
おそらく定番の処理だが、初めての記述だったので。
以下は、AccessVBAでADOを使ってDBからデータを取り出して、Excelに
エクスポートしている。
Set cn = CurrentProject.Connection
Set rs = cn.Execute(SQL)
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set bk = xl.WorkBooks.Add
Set sh = bk.WorkSheets(1)
With sh
j = 1
Do Until rs.EOF
If j = 1 Then
For i = 0 To rs.Fields.Count - 1
.Cells(j, i + 1) = rs.Fields(i).Name
Next
j = j + 1
End If
For i = 0 To rs.Fields.Count - 1
.Cells(j, i + 1) = rs.Fields(i).Value
Next
j = j + 1
rs.MoveNext
Loop
End With
rs.Close
Set rs = Nothing
利点
開発の中心がたとえばAccessなら、コードの記述がAccessだけで済む。
ExcelVBAを書いたりいろいろ不要。
欠点
ExcelVBAで直接書くより遅い。
勉強不足
DoCmd.TransferSpreadSheetでもできるはずだが、試してない。
shell関数で、Excelを立ち上げて同じことできないか??。知識なし。