VBA文本框字体颜色

3

我正在帮助我的工作更新Excel模板,需要一些帮助。 我想将文本框中的文本格式设置为红色并删除边框。 我不知道如何将该属性添加到我的代码中。 我不太擅长编程。 我能够通过分解我找到的其他代码来组合出以下代码。

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 2525, 1800, 103, 24).TextFrame.Characters.Text = Format(Cells(9, 2), "mmmm d, yyyy")

我最终会替换文本框代码中的绝对位置值,但在开始进行效率调整之前,我希望它能够正常工作。感谢您的帮助!

编辑1:如果我使用第1行和第2行或第1行和第3行,下面的代码将起作用。我不确定为什么不能同时使用两者。

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 2525, 1800, 103, 24) _
.TextFrame.Characters.Font.Color = vbRed _
.TextFrame.Characters.Text = Format(Cells(9, 2), "mmmm d, yyyy")

我找到了几个解决方案...请看一下https://dev59.com/lYjca4cB1Zd3GeqPy5ib和https://www.computing.net/answers/office/vba-textbox-font-color/10760.html。 - Zac
以下是文本框的属性和方法:https://msdn.microsoft.com/zh-cn/library/microsoft.office.tools.excel.controls.textbox.aspx 你是想更改一些字符还是所有字符? - Wookies-Will-Code
欢迎来到 Stack Overflow!请务必查看 [tour],以及 [ask] 和 [mcve]。 - ashleedawg
回答你关于图片的问题,它也是一行代码。在VBA中使用下划线字符可以让你在下一行继续输入,但编译器会将其链接为一行代码。因此,尽管这两个语句不是出于同样的原因而编写的,但它们都是一行代码,许多人发现这种方式更容易阅读,并且稍后可以重构(编辑)代码。 - Wookies-Will-Code
谢谢@Wookies-Will-Code,我已经成功将文本变成红色了,但我无法使用单元格引用来填充文本框并将其颜色变为红色。回答你的问题,我希望盒子中的所有文本都是红色的。 - L L
好的,下面是一篇长而表达充分的回答。请记住,将文本框插入工作表的方式和添加ActiveX文本框的方式是不同的,它们似乎确实表现不同。我似乎无法让.characters方法在ActiveX上工作,因为它似乎没有文本框,但用这种方式(单一颜色)着色文本框的文本非常容易。 - Wookies-Will-Code
1个回答

3

您现在使用的是shapes.addtextbox方法,可以按照以下方式进行操作:

With ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 146#, 68#, _
        301#, 181#).TextFrame
        .Characters.Font.Color = RGB(255, 0, 0)
        .Characters.Text = "Whatever your string is"
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
 End With

enter image description here

如果我在文本框中继续输入,那么剩下的内容以及与第一个赋值一起存在的任何内容都会被包含在红色中,屏幕截图中的命令按钮执行上面的代码只是为了玩耍。

如果您要使用代码不断添加和删除文本框中的文本,最好将其命名。然后,您可以抓取其中的字符串并添加到其中。以下代码显示了如何使用VBA命名并操作文本框,添加文本等等。您现在还可以更改文本框内某些文本的颜色,这很酷,但另一个话题?

Option Explicit

Private Sub CommandButton1_Click()

Dim tbShape As Shape
Dim WKS As Worksheet
Dim newText As String
Dim previousText As String
Dim textRange As Range

Set WKS = ThisWorkbook.ActiveSheet
Set textRange = WKS.Range("C1") 'define where to grab the new text
newText = CStr(textRange) 'convert what is in the cell to string

With ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 146#, 68#, _
            301#, 181#)
            .Name = "myTextBox"
End With

Set tbShape = ActiveSheet.Shapes("myTextBox")

With tbShape.TextFrame
    .Characters.Font.Color = RGB(255, 0, 0)
    .Characters.Text = "This is the intial text of the textbox 11111111 222222 "
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
End With

'grab the previous textbox string
previousText = tbShape.TextFrame.Characters.Text
'add your new text to what was there before
tbShape.TextFrame.Characters.Text = previousText & newText

End Sub

希望这能帮到你。如果你有开发者选项卡,最简单的方法是添加一个ActiveX文本框(我想你将无法使用.characters),但你可以在属性选项卡或VBA中分配文本框名称和许多属性:文本字体、大小、颜色(.forecolor),以及更容易地给整个文本框设置颜色,但用这种方式改变文本框中所选文本的颜色比较困难,在VBA中需要做更多的工作。

如果你使用这种方法并且想在VBA中获取文本框的内容,假设你在代码中声明了一个字符串变量作为注释,并且你将你的ActiveX文本框命名为TextBox1:

'get comments
comments = msrSheet.OLEObjects("TextBox1").Object.Text

enter image description here

目前我所发现的唯一使用文本框更改选定文本颜色的方法是使用你正在使用的第一种方法(答案中的第一种方法)。 想看到它的实际效果吗? 在上面的代码后面添加以下代码,但在End Sub之前,现在以前的内容是红色的,如果找到代码块中定义的字符串,则将其分配为newText并变为蓝色。

'grab the previous textbox string
previousText = tbShape.TextFrame.Characters.Text
'Change the color of the new string in the textbox to blue
Dim blueText As String
blueText = newText
With tbShape.TextFrame
    .Characters(InStr(previousText, blueText), Len(blueText)).Font.Color = RGB(0, 0, 255)
End With

输入图片说明

我真诚地希望这可以帮助您成为一名文本框 Jedi!祝好 - WWC


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接