2012-04-16 4 views
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 

答えて

2

私はそれがあなたのために働くことができると思い。しかし、私はそれをテストする時間がありませんでした。それは---rs.Open「COLLABNAME、DATETIMEを選択したSQL文が正しく行で終了していないと言う

* *新しいコード

'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("Tabelle1").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 
+0

、TOTALFLOWSは、TABLE_NAMEとCOLLABNAMEからLIKE ' COLLAB_NAME「&i + 1&」「ORDER BY DATETIME ASC」、cn すべての60のコラボレーション名が異なり、名前にパターンがありません – user1292831

+0

ああOK。あなたはCollabnamesのすべての名前があるリストまたは何かを持っていますか?または論理か何か? – Moosli

+0

私はすべての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

関連する問題