我有一个工作簿,可以使用大量 VBA 和一个自定义插件来为客户创建报告。工作簿的正面有一系列按钮,它们控制报告“应用程序”的操作:
这主要部署在 Surface Pro 3s 和 4s 上。一位用户报告说,每当他们单击按钮时,该按钮就会变得像素化(如下图所示)并且无法再阅读。我还没有在其他设备上看到过这种情况,这可能与该用户有一个外部显示器有关,该显示器复制了他的 Surface 屏幕上的内容。效果发生在两个屏幕上:
Office版本是Excel 2016 MSO 32位。
有人见过这个吗?有人知道为什么会发生吗?
我最终通过用矩形替换所有按钮解决了这个问题。这些仍然可以分配宏,甚至当用户将鼠标悬停在它们上方时将光标变成手形。
我认为像素化问题是工作表上嵌入的 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
虽然我很欣赏这种解决方法,但必须实现这个问题的“答案”是完全荒谬的。 Excel 应该对此有更好的解决方案。