Best Practices > Diskussionen zu Best Practices
COM-Schnittstelle MS Excel
ata:
... dynamische Funktion zum zeilenorientierten Auslesen von Excel-Zell-Werten
Es ist zu beachten, daß die Rückgabe "vRes" immer ein String-Array ist und als Variant deklariert werden muß
...
Dim vRes As Variant
vRes = xlGetCellValues( xlSheet, 1 , 10 ) ' # liest die 10. Spalte der 1. Reihe des Tabellenblattes ein
vRes = xlGetCellValues( xlSheet , 1 , 0 ) ' # liest alle 255 Spalten der 1. Reihe des Tabellenblattes ein
vRes = xlGetCellValues( xlSheet , 1 , -10 ) ' # liest die ersten 10 Spalten der 1. Reihe des Tabellenblattes ein
vRes = xlGetCellValues( xlSheet , 1 , 99999 ) ' # liest bis zur ersten leeren Spalte der 1. Reihe des Tabellenblattes ein
--- Code: ---Function xlGetCellValues( xlSheet As Variant , row As Variant , column As Variant ) As Variant
' # Einlesen von Excel-Werten
Dim sDummy( 0 to 0 ) As String
Dim vValue As Variant
Dim i As Integer
'
On Error Goto GeneralError
'
If column > 0 And column <= 255 Then
sDummy( 0 ) = xlSheet.Cells( row , column ).Value
xlGetCellValues = sDummy
Else
vValue = sDummy
If column = 0 Then
column = 254
Elseif column = 99999 Then
i = 1
While Trim( xlSheet.Cells( row , i ).Value ) <> ""
i = i + 1
Wend
column = i
Else
column = ( column * ( -1 ) ) - 1
End If
Redim vValue( 0 to column )
For i = 0 to column
vValue( i ) = Trim( Cstr( xlSheet.Cells( row , i + 1 ).Value ) )
Next
xlGetCellValues = vValue
End If
WayOut:
Exit Function
GeneralError:
xlGetCellValues = sDummy
Resume WayOut
End Function
--- Ende Code ---
ata:
... kann man beim Export gut verwenden, um ein Arbeitsblatt an einer bestimmten Stelle zu fixieren...
--- Code: ---Function xlFreeze( xl As Variant , xlSheet As Variant , row As Long , column As Integer ) As Variant
' # Einfrieren eines Arbeitsblattes für besseres Scrollen.
Call xlSheet.Select
Call xlSheet.Cells( row , column ).Select
xl.ActiveWindow.FreezePanes = True
End Function
--- Ende Code ---
ata:
... sortieren eines Bereiches eines Arbeitsblattes anhand eines Spaltenbereiches...
Ein Aufruf kann wie folgt aussehen:
' # Sortieren der Spalten 1 - 6 von Zeile 2 bis 21 anhand der ersten Spalte "A"
Call xlSort( xlSheet , "A2:F21" , "A2:A21" )
--- Code: ---Function xlSort( xlSheet As Variant , sDataRange As String , sColumnRange As String ) As Variant
' # sDataRange => der gesamte Bereich mit Daten => "A2:F20" bei Kopfzeile, 5 Spalten und 19 Daten-Zeilen
' # sColumnRange => Die Spalte, nach der sortiert werden soll => "A2:A20" bei Kopfzeile und 19 Daten-Zeilen
Call xlSheet.Range( sRange ).Sort( xlSheet.Range( sColumnRange ) , 1 )
End Function
--- Ende Code ---
Axel:
Formatieren von Zellen
--- Code: ---'Konstanten für die vertikale Ausrichtung innerhalb der Zellen
Const xlVAlignTop = -4160
Const xlVAlignBottom = -4107
Const xlVAlignCenter = -4108
'Formatiert ein Arbeitsblatt mit den Attributen vertikale Textausrichtung oben und
'optimale Spaltenbreite
Sub FormatRangeAlignment
objSheet.Cells.Select 'Gesamtes Arbeitsblatt markieren
objExcel.Selection.VerticalAlignment = xlVAlignTop 'Vertikale Ausrichtung nach oben
objExcel.Selection.Columns.AutoFit 'Optimale Spaltenbreite
objExcel.Selection.Rows.AutoFit 'Optimale Zeilenhöhe
objSheet.Range("A1").Select
End Sub
'Formatiert ein Arbeitsblatt mit der entsprechenden Schriftart und -grösse
'Aufruf ...FormatRangeFont("Arial", 10)
Sub FormatRangeFont(strFontName As String, iFontSize As Integer)
objSheet.Cells.Select 'Gesamtes Arbeitsblatt markieren
objExcel.Selection.Font.Name = strFontName 'Schriftart
objExcel.Selection.Font.Size = iFontSize 'Zeichengrösse setzen
objSheet.Range("A1").Select
End Sub
' Formatiert einen Bereich mit entsprechender Breite und Zeilenumbruch
'Aufruf ...FormatRangeWidth("A:A") für Spalte A
Sub FormatRangeWidth(sZiel As Variant)
objSheet.Columns(sZiel).Select
objSheet.Columns(sZiel).ColumnWidth = 28
objExcel.Selection.WrapText = True 'Zeilenumbruch zulassen
objSheet.Range("A1").Select
End Sub
--- Ende Code ---
Axel
ata:
... Es kann manchmal performanter sein, eine Text-Datei nach Excel zu importieren, als mühsam alle Zeilen und Spalten "zu Fuß mit der Hand am Arm" zu befüllen...
' # als Beispiel eine Textdatei mit 6 Spalten
Dim vDataTypes( 0 to 5 ) As Integer
vDataTypes( 0 ) = 1 ' # 1. Spalte automatisch - implizit
vDataTypes( 1 ) = 2 ' # 2. Spalte als Text
vDataTYpes( 2 ) = 4 ' # 3. Spalte als Datum-Zeit-Wert => t.m.j
vDataTypes( 3 ) = 2 ' # 4. Spalte als Text
vDataTypes( 4 ) = 9 ' # 5. Spalte nicht importieren
vDataTypes( 5 ) = 1 ' # 6. Spalte automatisch
Call xlDataImport( xlSheet , "C:\Temp\Test.csv" , ";" , vDataTypes , "A1" )
--- Code: ---Function xlDataImport( xlSheet As Variant , sFilePath As String , sSep As String , vDataTypes As Variant , sStartPos As String) As Variant
' # importieren einer ASCII-Datei nach Excel
' # xlSheet => Variant => Arbeitsblatt als Excel-Objekt
' # sFilePath => String => vollständiger Pfad der zu importierenden Text-Datei
' # sSep => String => Separator, mit dem die Daten voneinander getrennt sind
' # vDataTypes => String-Array => Alias der Datentypen für die importierten Spalten - erster Wert = erste Spalte
' # sStartPos => String => z.B. "A1" für die erste Zelle in der ersten Spalte
'
With xlSheet.QueryTables.Add( "TEXT;" & sFilePath, xlSheet.Range( sStartPos ))
.Name = "Adressen"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = 1 ' xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252 ' # Windows Ansi
.TextFileStartRow = 1
.TextFileParseType = 1 ' xlDelimited
.TextFileTextQualifier = -4142 ' xlTextQualifierNone
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = sSep
.TextFileColumnDataTypes = vDataTypes
.TextFileTrailingMinusNumbers = True
.Refresh False
End With
'
End Function
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln