New user
Beiträge: 3
| Servus Peter,
hier der Code ohne Deklarations und Fehlerbehandlungsteil:
...
' Testen ob Connection aktiv und wenn nicht Global Connection initialisieren
If Not OpenConnection Then Exit Sub
strSPName = "mediserv.spExcelMsdveExportBulk"
' Set rst = fnCMDExecuteSP_RS(strSPName, vbNullString, vbNullString)
'Command Object instanziieren
strSPName = "mediserv.spExcelMsdveExportBulk"
Set cmdADO = New ADODB.Command
cmdADO.CommandText = strSPName
cmdADO.CommandType = adCmdStoredProc
cmdADO.ActiveConnection = gcnn
cmdADO.Parameters.Refresh
'Recordset Instanzieeren (cmdAdo liefert Container von SQL Server ... blitzschnell)
Set rst = New ADODB.Recordset
With rst
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open cmdADO
End With
iRows = rst.RecordCount
On Error Resume Next
Set xlAPP = GetObject("Excel.application")
If Err.Number <> 0 Then
Set xlAPP = CreateObject("Excel.application")
End If
Err.Clear
On Error GoTo Handle_Err
Set xlWB = xlAPP.Workbooks.Add
Set xlWS = xlWB.Worksheets(1)
xlAPP.visible = False
xlAPP.EnableEvents = False
xlAPP.ScreenUpdating = False
'Application.Echo
' xlWS.Cells.Delete, nur in Verbindung mit vorhandenem xlWS
' Variante 1 - seeeehr Langsam
i = 1
Do While rst.EOF = False
For lngColumn = 0 To rst.Fields.Count - 1
xlWS.Cells(i, lngColumn + 1).Value = rst.Fields(lngColumn).Value
Next lngColumn
rst.MoveNext
i = i + 1
Debug.Print i
Loop
' Variante 2 noch langsamer
' i = 1
' For i = 1 To iRows
' xlWS.Cells(i, "A").CopyFromRecordset rst
' Debug.Print i
' Next
xlAPP.visible = True
xlAPP.EnableEvents = True
xlAPP.ScreenUpdating = True
.....
Variante 2 flitzt z.B. nur so dahin wenn sie in Excel ausgeführt wird :-()
Viele Grüße
Emil
|