【问题标题】:Excel VBA Textbox font sizeExcel VBA 文本框字体大小
【发布时间】:2013-11-10 18:16:23
【问题描述】:

我有一个用户表单来显示直接从单元格中获取的条款和条件。激活后,我调用TandC.Text = Worksheets("Master").Range("L41"),当我直接运行表单时效果很好——正确的字体大小、多行、自动换行等。但是,当我从另一个用户表单运行表单时,文本框文本突然显示文本一个很小的不可读的字体。即使我在表单上放置了一个测试按钮以将字体大小设置为 28,当表单从另一个表单启动时它也不起作用;但是,当它自己运行时,它确实会改变它。

Multiline 打开时似乎是一个问题,我将其关闭并且字体大小正确,但文本向右跨越数英里。我重新打开它,我的字体又小又不可读。

这让我发疯了,任何人都可以提供任何建议吗?

请看下面我的代码,从原始表单启动表单只是一个简单的UF.Show

我的真的很相似,然后在我的初始化中,如果你有多个监视器,我有一些代码可以将表单集中在屏幕上。

Private Sub CommandButton2_Click()
TandC.WordWrap = True
TandC.Font.Size = 8
TandC.MultiLine = True

End Sub

Private Sub UserForm_Initialize()

Dim TopOffset As Integer
Dim LeftOffset As Integer
TopOffset = (Application.UsableHeight / 2) - (Me.Height / 2)
LeftOffset = (Application.UsableWidth / 2) - (Me.Width / 2)
Me.Top = Application.Top + TopOffset
Me.Left = Application.Left + LeftOffset

TandC.Text = Worksheets("MasterData").Range("L21")
TandC.WordWrap = True
TandC.MultiLine = True
TandC.Font.Size = 8

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    尝试为您的文本框启用autosize。看起来多行正在尝试通过调整字体大小而不是调整框大小来将所有文本放入您的文本框中。您也可以尝试设置框高。

    TextBox1.AutoSize = True
    

    你也可以试试这个(来自MSDN):

    textBox1.Height = textBox1.PreferredHeight
    

    我试图通过从另一个表单调用一个表单来复制您的问题,甚至使用一个按钮来动态更新文本大小。我没能观察到你的问题。这是我的测试代码:

    userform1 后面

    Private Sub CommandButton1_Click()
        TextBox1.Font.Size = 11
    End Sub
    
    Private Sub UserForm_Initialize()
        TextBox1.Text = Range("A1")
        TextBox1.WordWrap = True
        TextBox1.MultiLine = True
        TextBox1.Font.Size = 28
    End Sub
    

    userform2 后面

    Private Sub CommandButton1_Click()
      UserForm1.Show
    End Sub
    

    编辑

    我发现这个post 谈到了其他人在 Excel 2013 中遇到相同问题。有人写道,在 getfocus 事件中来回切换自动换行可以解决问题。我没有 2013,所以很遗憾我无法测试它。

    您可以在初始化事件中尝试它或尝试像这样的激活事件:

    Private Sub UserForm_Activate()
        TandC.WordWrap = False
        TandC.WordWrap = True
    End Sub
    

    【讨论】:

    • 您好,我试过了,但它的行为仍然相同,它会将框自动调整为正确的长度,但它仍然显示文本很小。
    • Ian,我添加了我的测试代码。您能否发布您的代码以便我们查看差异?请注意,我先调用 form2,然后 form2 上的按钮调用 form1
    • 好吧,只是为了混淆问题......它在 excel 2007 上完美运行,但在 2013 年它仍然显示不正确。
    • 尝试切换自动换行。查看我的编辑以及我找到的另一篇文章的链接。
    【解决方案2】:

    我的程序使用 Excel 中的 Visual Basic 计算数据,然后将其显示在文本框中。它在 Excel 2010 中完美运行,但在 Excel 2013 中仅显示不可读的像素高输出,无论文本框属性部分中的文本大小如何设置。

    使用上述 cmets,我发现在显示数据之前立即关闭和打开多行属性可以解决这个令人恼火的问题。

    我的数据被收集在一个名为“answer”的字符串变量中,因此我的程序的最后几行如下所示:

    TextBox3.Multiline = False
    TextBos3.Multiline = True
    TextBox3.Value = answer
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      遇到了同样的问题,这解决了它。

      Private Sub TextBox1_Change()
          Me.txt_Body.WordWrap = False
          Me.txt_Body.WordWrap = True
      End Sub
      

      【讨论】:

        【解决方案4】:

        自从我今年早些时候升级到 2013 年以来,这一直困扰着我。经过多次尝试并利用这条线索中的内容以及其他调查,我找到了一个可行的解决方案。问题是还需要设置“焦点”。所以对我有用的最终编码是

        TandC.TextBox1.SetFocus
        TandC.TextBox1.MultiLine = False
        TandC.TextBox1.MultiLine = True
        TandC.TextBox1.WordWrap = False
        TandC.TextBox1.WordWrap = True
        

        谢谢大家。 :)

        【讨论】:

          【解决方案5】:

          过去几个小时我一直在努力解决这个问题,但最终找到了解决方案。但首先,我发现在文本框内单击是触发字体大小放大的原因。为了测试它,我反复单击文本框,然后单击另一个单元格;我这样做了 4 到 5 次,很快意识到这是罪魁祸首。字体大小以标准 MS Office 增量(8、9、10、11、12、14 等)增加。

          我还发现,将字体大小重置为应有的大小的唯一方法是调整文本框本身的大小。出于某种原因,这会强制它重新加载在属性菜单中设置的字体大小,而不管 VBA 代码中的内容是什么。一旦我弄清楚了,我所要做的就是编写一些简单的代码,将文本框的高度更改一两个像素,然后下一行代码将高度更改回其原始值。这是我的代码:

          Private Sub Textbox1_Change()
          Textbox1.Font.Size = 10
          Textbox1.Height = 20
          Textbox1.Height = 18
          End Sub
          

          巴姆。问题解决了。每次文本框的链接单元格中的值更改时,都应该运行此代码。希望这对其他人有帮助!

          【讨论】:

            【解决方案6】:

            我用不同的方式解决了这个问题:

            我创建了两个文本框并用相同的内容填充它们。在运行代码时,我观察到两个文本框中的哪一个显示了不可读的字体。在运行时,我将该文本框的可见性设置为 False。

            这可能需要一些试验和错误,因为用户窗体上文本框的位置似乎很重要。

            另一种选择是创建第二个(相同的)文本框并将字体大小错误的文本框放置在用户窗体之外。

            确保在两个文本框中放置相同的内容,并使所有属性相同:enterkeybehavior、multiline、wordwrap

            【讨论】:

              【解决方案7】:

              只是针对面临同样问题的 Word 用户在此处所说的内容的附录。

              我遇到了同样的问题,似乎属性TextBox.WordWrap 是问题所在。

              以下是为 Word 用户解决此问题的方法:

              1. 关闭图形界面文本框的WordWrap属性/
              2. 添加如下内容:

                Private Sub TextBox9_Change()
                    TextBox9.WordWrap = True
                End Sub
                

              这是一种变通方法,但不一定能解决问题。

              【讨论】:

                【解决方案8】:

                我遇到了同样的问题。就我而言,上述解决方案均无效。但是,当我更改文本框的顶部位置(例如,前 42 位而不是前 45 位)时,字体正确显示。

                【讨论】:

                  【解决方案9】:

                  对于从 Google 提出这个问题并想知道如何更改文本框或标签控件的字体大小的任何人,因为似乎只有字体系列是可配置的

                  在字体系列名称的右侧有一个带有... 的小按钮 - 单击它。

                  否则,您始终可以使用代码:

                  TextBox1.Font.Size = 18
                  Label1.Font.Size = 32
                  

                  【讨论】:

                    猜你喜欢
                    • 2019-05-09
                    • 2021-07-18
                    • 2020-08-27
                    • 2011-12-08
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-09-13
                    • 1970-01-01
                    • 2014-02-12
                    相关资源
                    最近更新 更多