I eventually solved this problem by replacing all of the buttons with Rectangle Shapes. These can still have macros assigned and even turn the cursor to a hand when the user hovers over them.
I think that the pixellation problem is peculiar to embedded ActiveX controls on worksheets, and it can be avoided by using other tools when possible. I don't think there's any other way!
To reimplement buttons as shapes, I wrote a ShapeButtons module (in VBA side) with some helpful functions for showing/hiding buttons and getting/setting text. All of the buttons in our worksheet are on a page called ControlSheet
. Please excuse my highly defensive error handling:
Public Sub SetShapeBtnText(name As String, newText As String)
On Error GoTo errorHandler
Dim btn As Shape
Set btn = GetShapeBtn(name)
btn.TextFrame2.TextRange.text = newText
Exit Sub
errorHandler:
WriteDebugError ("SetShapeBtnText Exception for " & name & " with " & newText)
End Sub
Public Sub ShowShapeBtn(name As String)
On Error GoTo errorHandler
ControlSheet.Shapes(name).Visible = True
Exit Sub
errorHandler:
WriteDebugError ("ShowShapeBtn Exception for " & name)
End Sub
Public Sub HideShapeBtn(name As String)
On Error GoTo errorHandler
ControlSheet.Shapes(name).Visible = False
Exit Sub
errorHandler:
WriteDebugError ("HideShapeBtn Exception for " & name)
End Sub
Public Function ShapeBtnIsVisible(name As String) As Boolean
On Error GoTo errorHandler
ShapeBtnIsVisible = ControlSheet.Shapes(name).Visible
Exit Function
errorHandler:
WriteDebugError ("ShapeBtnIsVisible Exception for " & name)
End Function