【问题标题】:VBA - weird problem with control font on UserFormVBA - 用户窗体上控制字体的奇怪问题
【发布时间】:2009-12-11 14:33:50
【问题描述】:

我有一个 VBA UserForm(在 Word 文档中),它在 Frame 控件内有一些 CheckBox 控件。

我的所有 CheckBox 控件都设置为使用 Tahoma 字体(控件的默认字体),但其中一个显示为 Verdana。也就是说,它在属性对话框中显示 Tahoma,但实际用于显示文本的字体是 Verdana(在设计时和运行时)。

[现在,我应该提一下,我确实把字体弄乱了一段时间,而 Verdana 是我曾经使用过的字体之一,但现在我已经将所有东西都设置回了 Tahoma。]

您可能在想 - 只需删除并重新创建 CheckBox。试过了。我还尝试复制正确显示的复选框之一。不开心。

这是真正疯狂的事情:CheckBox(或我创建的任何其他 CheckBox)仅在表单上的特定位置显示为 Verdana。如果我将它向上或向下移动几个槽口,那很好。 任何 CheckBox 我移动到这个特定位置时会神奇地显示为 Verdana,直到我将它移动到其他位置。不幸的是,我需要它处于那个位置(而不是 Verdana)!

我已经为此奋斗了几个小时,并尝试导出和重新导入代码,保存为 Word 2007 文档(我最初使用的是 2003),除了从头开始重新创建表单之外,我能想到的一切(我不想这样做,因为它很大)。

我认为表单存在某种损坏,但保存的 .frx 文件是二进制格式,因此我无法检查(或编辑)它。

有人见过这个问题吗?有什么解决办法吗?

编辑:我在上面说过问题 CheckBox 显示为 Verdana。这是不正确的。我通过反复试验确定它实际上是 Tahoma - 但在 9pt 而不是 8pt。上面的所有其他内容仍然有效,但问题在于文本的大小,而不是字体。

【问题讨论】:

  • 给新的复选框起一个不同的名字(除了旧的名字)看看是否有帮助。
  • @shahkalpesh:这不是名字,因为正如我所提到的,我可以复制现有的复选框,或者创建一个新的复选框,这些问题也会出现(如果我将它们移动到'百慕大三角形')。
  • 用户表单本身的字体大小是多少?也许那里有一个角度。
  • @mikemay:实际上,有一大堆“父”对象,因为有问题的 CheckBox 位于 Multipage 的 Page 中,它位于 Frame 中。你可能是对的,它继承了某些东西,我确实尝试过使用其他控件(并从头开始重新创建东西等),但这是我给出的这样一个奇怪的错误试图找到它的任何实际逻辑。我想,再花时间在这上面是徒劳的,我会结束这个问题并尽量不让它打扰我——尽管每次我看那个对话框时它都会引起我的注意!不过,谢谢。

标签: vba ms-word


【解决方案1】:

我的一位同事遇到了同样的问题,并发现如果您更改受影响表单域的大小(使其稍微高一点),问题就会消失。 (为什么???!)

【讨论】:

    【解决方案2】:

    在框架内有复选框时,我也遇到了同样的情况。一些复选框变得很小,但不是全部,框架上半部分的复选框保持不变。

    通过将框架的字体大小属性更改为更大的字体大小,这个问题神奇地从复选框中消失了。

    【讨论】:

      【解决方案3】:

      文本显示不正确的问题来自“网格”。仅当控件的顶部位置与 6 的倍数对齐时,文本才会正确显示。我确实使用以下方法来避免此类问题:

      Public Function AdjustedToVerticalGrid(ByVal atvg_si As Single, _
                                Optional ByVal atvg_threshold As Single = 1.5, _
                                Optional ByVal atvg_grid As Single = 6) As Single
      ' -------------------------------------------------------------------------------
      ' Returns an integer which is a multiple of the grid value (stvg_grid)
      ' considering a certain threshold (atvg_threshold) which defaults to 1.5. The
      ' result vertically aligns a control in a userform to a grid value which ensures
      ' that a text within the control is correctly displayed in accordance with its
      ' font size. A threshold (atvg_threshold) of 1.5 - the default - with a grid
      ' value (atvg_grid) of 6 - the default - means:
      '  7.5 < si >= 0   results to 6
      ' 13.5 < si >= 7.5 results in 12
      ' -------------------------------------------------------------------------------
          AdjustedToVerticalGrid = (Int((atvg_si - atvg_threshold) / atvg_grid) * atvg_grid) + atvg_grid
      End Function
      

      【讨论】:

        猜你喜欢
        • 2022-11-19
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        相关资源
        最近更新 更多