我最终通过用矩形形状替换所有按钮解决了这个问题。这些仍然可以分配宏,甚至当用户将鼠标悬停在它们上时将光标变成一只手。
我认为像素化问题是工作表上嵌入的 ActiveX 控件所特有的,如果可能的话,可以通过使用其他工具来避免它。我觉得没有别的办法了!
为了将按钮重新实现为形状,我编写了一个 ShapeButtons 模块(在 VBA 端),其中包含一些有用的功能,用于显示/隐藏按钮和获取/设置文本。我们工作表中的所有按钮都位于名为ControlSheet
. 请原谅我高度防御性的错误处理:
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