1

我有一个使用大量 VBA 的工作簿和一个自定义加载项来为客户创建报告。工作簿的前面板上有一系列按钮,用于控制报表“app”的操作:

点击前的按钮

这主要部署在 Surface Pro 3s 和 4s 上。一位用户报告说,任何时候他们点击一个按钮,它都会变得像素化(如下图所示)并且无法再读取。我没有在其他设备上看到过这种情况,并且可能与此用户有一个外部显示器有关,该显示器复制了他的 Surface 屏幕上的内容。效果发生在两个屏幕上:

像素化按钮

办公版是 Excel 2016 MSO 32 位。

有没有人看到这个,有没有人知道为什么会这样?

4

1 回答 1

0

我最终通过用矩形形状替换所有按钮解决了这个问题。这些仍然可以分配宏,甚至当用户将鼠标悬停在它们上时将光标变成一只手。

我认为像素化问题是工作表上嵌入的 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
于 2017-10-12T12:08:06.290 回答