Excel VBA文本框字体大小

时间:2013-10-30 22:04:29

标签: excel vba

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

启用Multiline时似乎是一个问题,我将其关闭,字体大小正确,但文字跨越了数英里的右侧。我把它重新打开,我又有一个难以理解的字体。

这让我疯了,任何人都可以就此提出任何建议吗?

请参阅下面的代码,从原始表单中删除表单只是一个简单的UF.Show

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

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

9 个答案:

答案 0 :(得分:5)

尝试启用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事件中来回切换wordwrap可以解决问题。我没有2013年,所以我不能测试它。

你可以在initialize事件中尝试它或尝试像这样的激活事件:

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

答案 1 :(得分:2)

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

使用上述评论我发现在显示数据之前立即关闭和打开多线属性可以解决这个令人愤怒的问题。

我的数据是在一个名为'answer'的字符串变量中收集的,所以我程序的最后几行如下:

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

End Sub

答案 2 :(得分:1)

有同样的问题,这就解决了。

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

答案 3 :(得分:1)

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

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

谢谢大家。 :)

答案 4 :(得分:0)

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

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

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

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

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

答案 5 :(得分:0)

这是对于面临同样问题的Word用户所说的内容的附录。

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

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

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

    Private Sub TextBox9_Change()
        TextBox9.WordWrap = True
    End Sub
    
  4. 这是一种解决方法,但不一定能解决问题。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我在过去的几个小时里一直在努力,但终于找到了解决方案。但首先,我发现在文本框内单击是触发字体大小扩大的原因。为了测试它,我反复点击文本框,然后点击另一个单元格;我这样做了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

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

答案 8 :(得分:0)

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

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

Screengrab of Font property for a label control

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

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