Best Practices > Diskussionen zu Best Practices
COM-Schnittstelle MS Excel
ata:
Eine Excel-Anwendung verbergen oder anzeigen
... nach einem Export anzeigen
Call xlShow( xl , True )
... eine geöffnete Excel-Anwendung unsichtbar schalten, zum Beispiel um über LotusScript einen Eingabedialog sichtbar zu machen...
Call xlShow( False )
--- Code: ---Sub xlShow( xl As Variant , bVisible As Variant )
' # Excel sichtbar oder unsichtbar machen.
' # xl => Variant => Excel-Anwendung
' # bVisible => Variant => True für Anzeigen, false für Verbergen
'
xl.Visible = bVisible
'
End Sub
--- Ende Code ---
ata:
... mehrere Zellen eines Arbeitsblatts miteinander verbinden...
Ein Aufruf kann wie folgt aussehen:
Call xlMergeCells( xlSheet , "A3:D5" ) ' # verbindet im Sheet die Zellen des Bereiches zu einer Zelle
--- Code: ---Function xlMergeCells( xlSheet As Variant , sRange As String ) As Variant
' # Excel-Zellen eines Bereiches miteinander verbinden.
' # xlSheet => Variant => Excel-Arbeitsblatt
' # sRange => String => z.B. "A3:D5"
'
xlSheet.Range( sRange ).Merge
'
End Function
--- Ende Code ---
ata:
... Spalten in der Breite formatieren
z.B. Die ersten drei Spalten und die 5. Spalte...
Call SetExcelColumnWidth( xlSheet , "A:C" , 24.05 )
Call SetExcelColumnWidth( xlSheet , 5 , 24.05 )
--- Code: ---Function SetExcelColumnWidth( xlSheet As Variant , vRange As Variant , vColWidth As Variant )
' # Excel-Spalten auf eine bestimmte Breite formatieren.
' # xlSheet => Variant => das Excel-Arbeitsblatt
' # vRange => Variant => z.B. "A:C" für die ersten 3 Spalten und die 5.
' # vColWidth => Variant => gewünschte Breite der Spalte => z.B. 5.05
'
xlSheet.Columns( vRange ).ColumnWidth = vColWidth
'
End Function
--- Ende Code ---
ata:
... Excel-Zellen farbig hervorheben...
Es gibt in Excel die Zahlen 0 - 56 für Farbwerte
0 = keine Farbe
1 = schwarz
2 = weiß
3 = rot
...
Ich habe mir eine Hilfstabelle gebaut, in der alle Farben aufgeführt sind...
z.B.
Call SetExcelCellColor( xlSheet , "A1:D5" , 3 , 2 ) ' # Hintergrund rot, Schriftfabe weiß
--- Code: ---Function SetExcelCellColor( xlSheet As Variant , sRange As String , iColBG As Integer , iColText As Integer ) As Variant
' # Die Text- und Hintergrundfarbe eines Bereichs in Excel bestimmen
' # xlSheet => Variant => das Excel-Arbeitsblatt
' # sRange => String => z.B. "A1:E5" für die ersten 5 Zeilen der Spalten A bis E
' # iColBG As Integer
' # iColText As Integer
'
xlSheet.Range( sRange ).Interior.ColorIndex = iColBG
xlSheet.Range( sRange ).Font.ColorIndex = iColText
'
End Function
--- Ende Code ---
ata:
... aus den bisherigen Funktionen habe ich eine dynamische Funktion zur Höhe und Breite von Spalten / Reihen gebastelt...
Ein Aufruf kann wie folgt aussehen:
Call xlFitRange( xl , xlSheet , "" , "" ) ' # Autofit des gesammten Arbeitsblattes => geht über Select des Arbeitsblattes
Call xlFitRange( xl , xlSheet , "B1:E4" , "" ) ' # Autofit Spalten "B" bis "E" und angepasste Höhe bei Zeilen "1" bis "4"
Call xlFitRange( xl , xlSheet , "B1:E1" , "50 x 40" ) ' # Spalten "B" bis "E" mit Breite "50" und nur Zeile 1 mit einer Höhe von "40"
Hinweis:
Maßangaben können unterschiedliche Auswirkungen haben, je nach Ländereinstellungen, daher sollten nur Ganzzahlen verwendet werden.
Die verschiedenen Excel-Versionen kennen unterschiedlich viele Spalten und Zeilen. Die Begrenzung auf 256 Spalten "IV" und 65536 Zeilen pro Arbeitsblatt muß je nach Excel-Version extra validiert werden.
--- Code: ---Function xlFitRange( xl As Variant , xlSheet As Variant , vRange As Variant , vParam As Variant )
' # Bestimmte Excel-Bereiche auf Breite und Höhe formatieren.
' # xlSheet => Variant => das Excel-Arbeitsblatt
' # vRange => Variant => z.B. "A:E" für die ersten 5 Spalten
' # vParam => Variant => gewünschte Formatierung des Bereiches "Breite x Höhe" => z.B. "50,05x20,5" ( 0 = Spalte verbergen, bei Leerstring Autofit )
'
On Error GoTo GeneralError
'
Dim vWidth As Variant
Dim vHeight As Variant
Dim vRangeColumn As Variant
Dim vRangeRow As Variant
Dim vValue As Variant
Dim i As Integer
Dim sValue As String
Dim sMsg As String
'
' # Parsen der Parameter
' # ... Breite und Höhe
If Instr( Cstr( vParam ) , "x" ) > 0 Then
vValue = Split( Trim(Cstr(vParam)) , "x" )
vWidth = Trim(Cstr(vValue(0)))
vHeight = Trim(Cstr(vValue(1)))
Else
vWidth = Cstr( vParam )
vHeight = Cstr( vParam )
End If
' # ... Bereich
If Instr( Trim(Cstr(vRange)) , ":" ) Then
vValue = Split( Trim(Cstr( vRange )) , ":" )
' # Spalte von Reihe trennen
For i = 1 to len( vValue( 0 ) )
sValue = Mid$( vValue( 0 ) , i , 1 )
If IsNumeric( sValue ) Then
vRangeRow = vRangeRow + sValue
Else
vRangeColumn = vRangeColumn + sValue
End If
Next
'
If vRangeColumn <> "" Then vRangeColumn = vRangeColumn & ":"
If vRangeRow <> "" Then vRangeRow = vRangeRow & ":"
'
For i = 1 to len( vValue( 1 ) )
sValue = Mid$( vValue( 1 ) , i , 1 )
If IsNumeric( sValue ) Then
vRangeRow = vRangeRow + sValue
Else
vRangeColumn = vRangeColumn + sValue
End If
Next
'
Else
For i = 1 to len( vRange )
sValue = Mid$( vRange , i , 1 )
If IsNumeric( sValue ) Then
vRangeRow = vRangeRow + sValue
Else
vRangeColumn = vRangeColumn + sValue
End If
Next
If vRangeColumn <> "" Then vRangeColumn = vRangeColumn & ":" & vRangeColumn
If vRangeRow <> "" Then vRangeRow = vRangeRow & ":" & vRangeRow
End If
'
' # Formatieren des Bereiches nach Breite und Höhe
If Trim(Cstr( vRange )) = "" Then
xlSheet.Cells.Select
xl.Selection.Columns.AutoFit
xl.Selection.Rows.AutoFit
xlSheet.Range( "A1" ).Select
Else
If Lcase(Cstr( vParam )) = "" Then
If vRangeColumn <> "" Then xlSheet.Columns( vRangeColumn ).AutoFit
If vRangeRow <> "" Then xlSheet.Rows( vRangeRow ).AutoFit
Else
If vRangeColumn <> "" Then xlSheet.Columns( vRangeColumn ).ColumnWidth = Cdbl( vWidth )
If vRangeRow <> "" Then xlSheet.Rows( vRangeRow ).RowHeight = Cdbl( vHeight )
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 & "Bereich = " & Cstr( vRange ) & Chr(10)
sMsg = sMsg & "Maßangaben = " & Cstr( vParam ) & Chr(10)
sMsg = sMsg & "Spaltenbreite = " & Cstr( vWidth ) & Chr(10)
sMsg = sMsg & "Reihenhöhe = " & Cstr( vHeight ) & Chr(10)
sMsg = sMsg & "Bereich Spalten = " & Cstr( vRangeColumn ) & Chr(10)
sMsg = sMsg & "Bereich Reihen = " & Cstr( vRangeRow ) & 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, Zeilen- und Reihenangaben müssen plausibel sein." & Chr(10)
sMsg = sMsg & ""
Elseif err = 213 And ( Instr( Error , "ColumnWidth" ) > 0 Or Instr( Error , "RowHeight" ) > 0 ) Then
sMsg = sMsg & Chr(10) & Chr(10)
sMsg = sMsg & "Hinweis: " & Chr(10) & "Die Maßangaben müssen dem lokalen Zahlenformat entsprechen." & Chr(10)
sMsg = sMsg & "Das Zahlenformat für Breite oder Höhe kann vermutlich nicht interprteiert werden."
End If
MsgBox sMsg , 16 , "Fehler in Funktion xlFitRange()"
xl.Visible = True
Resume Next
End Function
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln