Best Practices > Diskussionen zu Best Practices
COM-Schnittstelle MS Excel
ata:
... eine Funktion zur Schrift-Formattierung eines Bereiches
Ein Aufruf kann wie folgt aussehen:
Call xlFormatFont( xl , xlSheet , "" , "Arial" ) ' # das gesamte Tabellenblatt in Arial
Call xlFormatFont( xl , xlSheet , "" , "Arial => 10" ) ' # das gesamte Tabellenblatt in Arial Größe 10 - verwendet Select
Call xlFormatFont( xl , xlSheet , "" , "Arial => 10 => 3" ) ' # das gesamte Tabellenblatt in Arial Größe 10 in roter Schriftfarbe
Call xlFormatFont( xl , xlSheet , "A1:E1" , "Arial => 14 => 3 => Bold => Italic" ) '# der ausgewiesene Bereich in fetter roter Kursiv-Schrift "Arial in Größe 14
Call xlFormatFont( xl , xlSheet , "A1:E1" , "Arial => 14 => 5 => => Italic" ) '# der ausgewiesene Bereich in blauer Kursiv-Schrift "Arial in Größe 14
Hinweis:
Die Parameter für die Schriftformatierung müssen in dieser Reihenfolge verwendet werden.
Es kann kein Parameter übersprungen werden, er muß zumindest als Leer übergeben werden (s. letztes Beispiel für "Bold"-Bereich des Strings).
Leere Parameter werden nicht beachtet.
--- Code: ---Function xlFormatFont( xl As Variant , xlSheet As Variant , vRange As Variant , vParam As Variant ) As Variant
' # Formatiert einen Bereich für Schrift, Größe, Farbe
' # xlSheet => Variant => das Excel-Arbeitsblatt
' # vRange => Variant => z.B. "A:E" für die ersten 5 Spalten - bei Leersting das gesamte Arbeitsblatt
' # vParam => Variant => gewünschte Formatierung des Bereiches "Schrift => Größe => Farbnummer => Gewicht => Kursiv"
' # ... => z.B. "Arial => 10 => 3 => Bold => kursiv " für Arial in Größe 10 in fetter roter Kursiv-Schrift
' # ... => z.B. "Arial => 10 => 3 => Normal => kursiv " für Arial in Größe 10 in roter Kursiv-Schrift
'
On Error GoTo GeneralError
'
Dim sFont As String
Dim sSize As String
Dim sColor As String
Dim sWeight As String
Dim sItalic As String
'
Dim Range As Variant
Dim vValue As Variant
Dim i As Integer
Dim sValue As String
Dim sMsg As String
'
' # Parsen der Übergabeparameter
' # ... Fontangaben
If Instr( Cstr( vParam ) , "=>" ) > 0 Then
vValue = Split( Trim(Cstr(vParam)) , "=>" )
sFont = Trim(Cstr(vValue(0)))
sSize = Trim(Cstr(vValue(1)))
If Ubound( vValue ) > 1 Then sColor = Trim(Cstr(vValue(2)))
If Ubound( vValue ) > 2 Then sWeight = LCase( Trim(Cstr(vValue(3))))
If Ubound( vValue ) > 3 Then sItalic = LCase( Trim(Cstr(vValue(4))))
Else
sFont = Cstr( vParam )
End If
'
' # Formatieren des Bereiches
If Trim(Cstr( vRange )) = "" Then
xlSheet.Cells.Select
Set Range = xl.Selection
Else
Set Range = xlSheet.Range( vRange )
End If
If sFont <> "" Then Range.Font.Name = sFont
If sSize <> "" Then Range.Font.Size = Cdbl( sSize )
If sColor <> "" Then Range.Font.ColorIndex = Cdbl( sColor )
If sWeight <> "" Then
If sWeight = "bold" Or sWeight = "fett" Then Range.Font.Bold = True
If sWeight = "normal" Then Range.Font.Bold = False
End If
If sItalic <> "" Then
If sItalic = "italic" Or sItalic = "kursiv" Then Range.Font.Italic = True
If sItalic = "normal" Then Range.Font.Italic = False
End If
'
If Trim( Cstr( vRange ) ) = "" Then xlSheet.Range( "A1" ).Select
'
WayOut:
Exit Function
GeneralError:
xl.Visible = False
sMsg = "Fehler (Nr. " & err & ") in Zeile " & Erl & ": " & Error
sMsg = sMsg & Chr(10) & Chr(10)
sMsg = sMsg & "Parameter: " & Chr(10)
sMsg = sMsg & "Bereich = " & Cstr( vRange ) & Chr(10)
sMsg = sMsg & "Angaben = " & Cstr( vParam ) & Chr(10)
sMsg = sMsg & "Schriftart = " & Cstr( sFont ) & Chr(10)
sMsg = sMsg & "Schriftgröße = " & Cstr( sSize ) & Chr(10)
sMsg = sMsg & "Schriftfarbe = " & Cstr( sColor ) & Chr(10)
If Err = 213 And Error = "OLE: Automation object error" Then
sMsg = sMsg & Chr(10) & Chr(10)
sMsg = sMsg & "Hinweis: " & Chr(10) & "MS Excel meldet einen generellen Fehler." & Chr(10)
sMsg = sMsg & "Überprüfen sie die Angaben des Bereiches. Sie dürfen nur maximal einen Doppelpunkt enthalten, "
sMsg = sMsg & "Zeilen- und Reihenangaben müssen plausibel sein." & Chr(10)
sMsg = sMsg & ""
End If
MsgBox sMsg , 16 , "Fehler in Funktion xlFormatFont()"
xl.Visible = True
Resume Next
End Function
--- Ende Code ---
ata:
... dynamische Funktion zum Beschreiben von Excel-Zellen.
Ein Aufruf kann wie folgt aussehen:
' # Zeile 2, Spalte 1, Erstellungsdatum des Dokumentes im Format "dd.mm.yyyy hh:nn"
Call xlSetCell( xl , xlSheet , 2 , 1 , doc.Created , "TT.MM.JJJJ hh:mm" )
' # Zeile 2, Spalte 2, angenommene Postleitzahl als Text in die Zelle schreiben - um führende Nullen nicht zu verlieren
Call xlSetCell( xl , xlSheet , 2 , 2 , doc.PLZ(0) , "@" )
' # Zeile 2, Spalte 3 , Formel für den Inhalt => A2 + ", " + B2
row = 2
Call xlSetCell( xl , xlSheet , row , 3 , {=VERKETTEN(A} & row & {;", ";B} & row &{)} , "" ) ' # Formelsprache beachten...
Hinweis:
Es gibt für Excel auch einen Parameter, mit dem man die Formelsprache für englische Formelsprache erzwingen kann - dann dürfen aber nur noch solche verwendet werden. Notwendig wird dies, wenn unterschiedliche Excel-Versionen und Ländereinstellungen vorliegen.
Der Parameter wird später nachgereicht - bin noch am suchen :P
--- Zitat ---Function xlSetCell( xl As Variant , xlSheet As Variant , row As Long , column As Variant , vValues As Variant , sDataFormat As String ) As Variant
' # Einen Wert oder eine Formel in eine Zelle schreiben unter Berücksichtigung eines speziellen Formates.
' # xl => Variant => die Excel-Anwendung
' # xlSheet => Variant => das Excel-Arbeitsblatt
' # row => Zahl => die Zeilennummer
' # column => Zahl => die Spaltennummer
' # vValue => Text-Array oder TextString => die eigentlichen Werte. Bei einem Array werden alle Elemente mit einem LineFeed (Chr(10)) als Textstring verkettet.
' # ... beginnt der Textstring mit einem Gleichheitszeichen, dann wird der String als Formel in die Zelle geschrieben.
' # ... bei Formeln muß beachtet werden, daß es bei unterschiedlichen Excel-Versionen zu Abweichungen in der Syntax kommen kann.
' # ... die engliche Formlsprache ist vorzuziehen
' # sDataFormat => Text-String => das zu verwendende Zell-Format. Bei Leerstring findet keine Formatierung statt.
' # ... ACHTUNG: Hier gibt es je nach Länder- und Excel-Version unterschiedliche Formtierungsparameter - gilt für vor allem für Zahlen und Datums-/Zeitformatierungen
' # ... "@" => Zelle wird explicit als Text formatiert
' # ... "#.##0,00" => Zelle wird als Zahl mit 2 Nachkomma-Stellen und möglichem Tausender-Trennzeichen "." formatiert
' # ... "TT.MM.JJJJ hh:mm:ss" => Zelle wird als Datums-/Zeit-Wert formatiert, hier z.B. "31.01.2008 13:54:00" => deutsche Excel-Version 2003
'
Dim i As Integer
Dim sValue As String
Dim sMsg As String
'
On Error GoTo GeneralError
'
If IsArray( vValues ) Then
For i = LBound( vValues ) To Ubound( vValues )
sValue = sValue + vValues( i ) + Chr(10)
Next
sValue = Left( sValue , Len( sValue ) - 1 ) ' # letzten LF bereinigen
xlSheet.Cells( row , column ).Value = sValue
Else
If Left( Cstr( vValues ) , 1 ) = "=" Then
sValue = Cstr( vValues )
xlSheet.Cells( row , column ).FormulaLocal = sValue
Else
If sDataFormat <> "" Then xlSheet.Cells( row , column ).NumberFormat = sDataFormat
sValue = Cstr( vValues )
xlSheet.Cells( row , column ).Value = vValues
End If
End If
'
WayOut:
Exit Function
GeneralError:
xl.Visible = False
sMsg = "Fehler (Nr. " & err & ") in Zeile " & Erl & ": " & Error
sMsg = sMsg & Chr(10) & Chr(10)
sMsg = sMsg & "Parameter: " & Chr(10)
sMsg = sMsg & "Zeile = " & Cstr( row ) & Chr(10)
sMsg = sMsg & "Spalte = " & Cstr( column ) & Chr(10)
sMsg = sMsg & "Werte = " & Cstr( sValue ) & Chr(10)
sMsg = sMsg & "Format = " & Cstr( sDataFormat ) & Chr(10)
If Error = "OLE: Automation object error" Then
sMsg = sMsg & Chr(10) & Chr(10)
sMsg = sMsg & "Hinweis: " & Chr(10) & "MS Excel meldet einen generellen Fehler." & Chr(10)
sMsg = sMsg & "Überprüfen sie die oben angegebenen Parameter auf ihre Plausibilität." & Chr(10)
sMsg = sMsg & ""
End If
MsgBox sMsg , 16 , "Fehler in Funktion xlSetCell()"
xl.Visible = True
Resume Next
End Function
--- Ende Zitat ---
ata:
... aktivieren des Autofilters in einer bestimmten Zeile.
Ein Aufruf kann wie folgt aussehen:
' # 5. Zeile für den Autofilter aktivieren
Call xlAutoFilter( xlSheet , 5 )
--- Code: ---Function xlAutoFilter( xlSheet As Variant , row As Long ) As Variant
' # Setzt in der angegebenen Zeile den Autofilter
' # xlSheet => Variant => das Excel-Arbeitsblatt
' # row => Zahl => die Zeilennummer
'
xlSheet.Rows( row ).Select
xl.Selection.AutoFilter
'
End Function
--- Ende Code ---
jBubbleBoy:
... meine Funktion zum hochzählen der Spalten, die habe ich in deiner Liste noch nicht gesehen oder machst du das anders ;)
--- Code: ---Function getNextColumn( column As String ) as string
Dim fi$, la$
If Len(column)>1 Then
fi=Left(column,1)
la = Right(column, 1)
Else
la = column
end if
If Asc( la ) = 90 Then
If fi<>"" Then
getNextColumn = Chr( Asc( fi ) +1 ) + "A"
Else
getNextColumn = "AA"
End If
Else
getNextColumn = fi & Chr( Asc( la ) +1 )
End If
End Function
--- Ende Code ---
ata:
... es gibt ja bekanntlich immer viele Wege nach Rom - ich mach es über Evaluate, Permutation und ein Array - kommt noch im Laufe des Tages...
Toni
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln