... 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
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