1
Oracleデータベースの表に異なる列名があり、VBマクロを使用してExcelデータベースからデータをフェッチして別のデータをソートしています。列名を別のシートに変更Oracleデータベースの異なるシートに出力するためのループを作成する
現在、私は各シートごとに別々のコードを書いていますが、コードを簡単に作成できるようにループしたいのですが、60個のcollabnamesがあり、それぞれ異なる名前であり、 Iループそれは私が60回
CURRENT同じコードを書く必要はありませんので、場合
CODE:cn.Open (_
"User ID=USERID" & _
";Password=PASSWORD" & _
";Data Source=xx.xx.xx.xxx:xxxx/xxxx" & _
";Provider=OraOLEDB.Oracle")
rs.Open "select COLLABNAME,DATETIME,TOTALFLOWS from TABLE_NAME AND COLLABNAME like 'COLLAB_NAME1' ORDER BY DATETIME ASC", cn
With Sheet1
col = 0
'First Row: names of columns
Do While col < rs.Fields.Count
.Cells(1, col + 1) = rs.Fields(col).Name
col = col + 1
Loop
mtxData = Application.Transpose(rs.GetRows)
.Range("A2").Resize(UBound(mtxData, 1) - LBound(mtxData, 1) + 1, UBound(mtxData, 2) - LBound(mtxData, 2) + 1) = mtxData
End With
rs.Close
rs.Open "select COLLABNAME,DATETIME,TOTALFLOWS from TABLE_NAME AND COLLABNAME like 'COLLAB_NAME_2' ORDER BY DATETIME ASC", cn
With Sheet2
col = 0
'First Row: names of columns
Do While col < rs.Fields.Count
.Cells(1, col + 1) = rs.Fields(col).Name
col = col + 1
Loop
mtxData = Application.Transpose(rs.GetRows)
.Range("A2").Resize(UBound(mtxData, 1) - LBound(mtxData, 1) + 1, UBound(mtxData, 2) - LBound(mtxData, 2) + 1) = mtxData
End With
rs.Close
rs.Open "select COLLABNAME,DATETIME,TOTALFLOWS from TABLE_NAME AND COLLABNAME like 'COLLAB_NAME1_NAME2_3' ORDER BY DATETIME ASC", cn
With Sheet3
col = 0
'First Row: names of columns
Do While col < rs.Fields.Count
.Cells(1, col + 1) = rs.Fields(col).Name
col = col + 1
Loop
mtxData = Application.Transpose(rs.GetRows)
.Range("A2").Resize(UBound(mtxData, 1) - LBound(mtxData, 1) + 1, UBound(mtxData, 2) - LBound(mtxData, 2) + 1) = mtxData
End With
rs.Close
End Sub
NEW CODE:
Sub Load_data()
Sheets("Sheet1").Select
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim col As Integer
Dim row As Integer
Dim Query As String
Dim mtxData As Variant
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open (_
"User ID=USERID" & _
";Password=PASSWORD" & _
";Data Source=xx.xx.xx.xxx:xxxx/xxxxxx" & _
";Provider=OraOLEDB.Oracle")
'Creates an Array with all the Collabnames.
Dim arrayCOLLABNAME(59) As String
Dim idx As Integer
idx = 0
Sheets("COLLABNAME").Select
Range("A1").Select
Do While Not ActiveCell.Offset((idx), 0) = ""
arrayCOLLABNAME(idx) = ActiveCell.Offset(idx, 0).Value
idx = idx + 1
Loop
'The name of the First Sheet
Sheets("Sheet1").Select
'Loop for 60 Sheets
For i = 0 To 60
'adds the new Sheet
Sheets.Add
rs.Open "select COLLABNAME,DATETIME,TOTALFLOWS from TABLE_NAME AND COLLABNAME like '" & arrayCOLLABNAME(idx) & "' ORDER BY DATETIME ASC", cn
'use the new Sheet for inserting the Data
With ActiveSheet
col = 0
'First Row: names of columns
Do While col < rs.Fields.Count
.Cells(1, col + 1) = rs.Fields(col).Name
col = col + 1
Loop
mtxData = Application.Transpose(rs.GetRows)
.Range("A2").Resize(UBound(mtxData, 1) - LBound(mtxData, 1) + 1, UBound(mtxData, 2) - LBound(mtxData, 2) + 1) = mtxData
End With
rs.Close
Next i
End Sub
、TOTALFLOWSは、TABLE_NAMEとCOLLABNAMEからLIKE ' COLLAB_NAME「&i + 1&」「ORDER BY DATETIME ASC」、cn すべての60のコラボレーション名が異なり、名前にパターンがありません – user1292831
ああOK。あなたはCollabnamesのすべての名前があるリストまたは何かを持っていますか?または論理か何か? – Moosli
私はすべてのcollabnamesのリストを持っている、そのうちのいくつかは以下のとおりです。 CBAdjustmentSync_SAP_to_HHT、 CBAstroBatchMasterSync_SAP_ASTRO、 CBAstroConfirm_Astro_to_SAP、 CBAstroMaterialMasterSync_SAP_To_Astro_01、 CBAstroMaterialMasterSync_SAP_To_Astro_02、 CBAstroMaterialMasterSync_SAP_To_Astro_03、 CBAstroMaterialMasterSync_SAP_To_Astro_04、 CBAstroOrderStatusSync_Astro_01_To_SAP、 CBAstroOrderStatusSync_Astro_02_To_SAP、 CBAstroOrderStatusSync_Astro_03_To_SAP、 CBAstroProductionExecutionSync_SAP_To_Astro_01 。 。 。 – user1292831