Best Practices > Diskussionen zu Best Practices

COM-Schnittstelle MS Excel

<< < (4/8) > >>

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