VBA Excel – Das Bild eine CommandButtons ändern

CommandButton Bild ändern

Ich habe eine Weile im Netz gesucht, bis ich auf einen hilfreichen Artikel gestoßen bin:

https://docs.microsoft.com/de-de/office/vba/api/office.commandbarbutton.picture

Hier ist der kopierte Codeschnipsel, wie ich das Bild eines CommandButtons zur Laufzeit in VBA (Excel) ändern kann:

Sub ChangeButtonImage() 
    Dim picPicture As IPictureDisp 
    Dim picMask As IPictureDisp 
 
    Set picPicture = stdole.StdFunctions.LoadPicture( _ 
        "c:\images\picture.bmp") 
    Set picMask = stdole.StdFunctions.LoadPicture( _ 
        "c:\images\mask.bmp") 
 
    'Reference the first button on the first command bar 
    'using a With...End With block. 
    With Application.CommandBars.FindControl(msoControlButton) 
        'Change the button image. 
        .Picture = picPicture 
 
        'Use the second image to define the area of the 
        'button that should be transparent. 
        .Mask = picMask 
    End With 
End Sub

JAVA Eclipse Access restriction: The constructor […] is not API (restriction on required library ‚C:\Program Files\Java\jre1.8.0_181\lib\ext\jfxrt.jar‘)

Völlig ohne Vorwarnung haben meine ganzen Java-Projekte diese Fehlermeldung erhalten:

Access restriction: The constructor  is not API (restriction on required library 'C:\Program Files\Java\jre1.8.0_181\lib\ext\jfxrt.jar')

Lösen ließ sich das ganz einfach. Das Projekt hatte sich als Java-Grundlage eine Runtime (JRE) und kein Development Kit (JDK) gewählt –> Das muss einfach wieder umsgestellt werden auf JDK.

Alternativ kann man die Berechtigung auch für das betroffene Projekt vergeben:

In ein Properties des Projekts

  • Java Build Path –> Libraries
  • Acess Rules –> Edit und Add
  • Als Wert „javafx/**“ (in meinem Fall) hinzufügen.

Anschließend Apply und Rebuild –> Problem gelöst 🙂

VBA – Nur Teilbereiche einer Zelle formatieren

In der Excel-Programmierung hatte ich mal wieder neue Anforderungen:

Einen Teilbereich einer Excelzelle formatieren. Das geht ganz einfach Mittels „Characters“. Im Nachfolgenden werden die ersten sieben Zeichen der Zelle unterstrichen:

dim myRange as Range
set myRange  = Range(Cells(3, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False))
myRange.Characters(0, 7).Font.Underline = True

Damit sind die Grenzen der Formatierung einer Zelle mal wieder gut nach „hinten“ geschoben worden. Anbei ein Bild des formatieren Wortes einer verbundenen Zelle:

VBA Werte in Zellen formatieren

Ein benutzerdefiniertes Zellenformat lässt sich mittels VBA einfach einrichten:

dim zahl as double
zahl = 4,356

' Darstellung z.B. als Gewicht in Tonnen
cells(1,1) = Format(zahl, "0.0 t")

Wenn gezielt Zahlen formatiert werden sollen, verwende ich NumberFormat:

    With Range(Cells(3, lkw.GW_SOLL_SPALTE), Cells(x, lkw.GW_IST_SPALTE))
        .Font.Size = 10
        .Font.Bold = True
        .HorizontalAlignment = xlRight
        .NumberFormat = "0.00 ""t"""
    End With

VBA – Objekte in Funktion zurückgeben

Funktionen geben in VBA immer einen Wert zurück. Soll dieser Wert ein Objekt sein, so muss man wissen, wie man ein Objekt in einer Funktion zurückgibt.

Die Vorgehensweise ist identisch mit der Zuweisung einer Objekt-Variable. Zum Vergleich zuerst das Vorgehen bei normalen Datentypen:

Function addiere(a as Integer, b as Integer) as Integer
     addiere = a + b
End Function

Bei Objekten muss vor der Angabe des Funktionsname einfach ein „SET“ gesetzt werden:

Function getAuto() as Object
      dim myAuto as Auto
      set myAuto = new Auto
      myAuto.farbe = "blau"
      myAuto.kennzeichen = "L-RB 2245"
' Zurückgeben des Wertes
      SET getAuto = myAuti
End Function

Andernfalls bringt er die nachfolgende Fehlermeldung:

Fehler: Objektvariable oder With-Blockvariable nicht festgelegt
Fehler: Objektvariable oder With-Blockvariable nicht festgelegt