【问题标题】:Edit Form Control Label Caption on VBA在 VBA 上编辑表单控件标签标题
【发布时间】:2018-08-06 17:48:04
【问题描述】:

尝试编辑名为 lblsearchreminder 的表单控件标签的文本,并确保字体为 Arial 且大小为 20。我正在从 ActiveX 文本框1 中提取已编辑的文本并尝试将其作为标签的标题。如果有人有任何见解,我将不胜感激。

Sub btnAltCustomSearch_Click()

    Dim strTextBox As String

    If Worksheets("User Interface").OLEObjects("TextBox1").Object.Value = "" Then
        ErrorX.Show
    Else
        strTextBox = Worksheets("User Interface").OLEObjects("TextBox1").Object.Value
        Worksheets("Muscle Wasting Database").Shapes("lblsearchreminder") = vbCrLf & "Disease: All" & vbCrLf & vbCrLf & "Keyword: " & strTextBox
        lblsearchreminder.Object.Characters.Text = "Arial"
        lblsearchreminder.Object.Font.Size = 20

    End If

End Sub

【问题讨论】:

  • 我想问题是lblsearchreminder 的字体没有设置为Arial 并且字体大小没有设置为20 点?您是否有任何机会出错? #438 在.Object.Characters.Text 上找不到成员?或者是其他东西?此外,ErrorVBA.Conversion 模块中的一个函数,您正在使用该 Error 控件进行隐藏 - 可能需要重命名它。
  • .ListObject 还是Label
  • TextBox1 似乎不是 Form 控件的合理默认名称,因为 TextBox(文本字段)早已被弃用。您正在运行哪个 Excel 版本,或者您能否确认您使用的是 ActiveX TextBox 控件?
  • 是的,textbox1 是一个 ActiveX 文本框控件,但我最好使用表单控件标签。所以我试图从 ActiveX 文本框中提取输入并在表单控件标签中使用它
  • 发布了答案。您可能需要刷新页面...

标签: vba excel


【解决方案1】:

是的,textbox1 是一个 ActiveX 文本框控件,但我最好使用表单控件标签。所以我试图从 ActiveX 文本框中提取输入并在 Form Control 标签中使用它 – Thor Nagel 3 小时前

很遗憾,您无法操作表单控件标签的字体大小/名称、颜色或样式。如果您注意到 Excel 功能区上的字体组中的格式项目已“变灰”。

设置文本很容易

Dim lblsearchreminder As Shape
Set lblsearchreminder = Sheet1.Shapes("Label 1")
lblsearchreminder.TextFrame.Characters.Text = "Hello"

但你不能这样做(即使 Intellisense 允许

lblsearchreminder.TextFrame.Characters.Font.Name = "Arial"

lblsearchreminder.TextFrame2.TextRange.Characters.Font.Name = "Arial"

我建议改用TextBox 形状或ActiveX Label

同样,您不能使用

更改字体
lblsearchreminder.TextFrame.Characters.Font.Size= 20

【讨论】:

    【解决方案2】:

    我认为您没有使用 表单控件TextBox1 将是 ActiveX 控件的默认名称,这与使用 .OLEObject.Object 检索它是一致的。

    为其声明一个MSForms.TextBox 变量。

    Dim box As MSForms.TextBox
    

    现在将其分配给.OLEObject.Object

    Set box =  Worksheets("User Interface").OLEObjects("TextBox1").Object
    

    如果在编译时ThisWorkbook 中存在工作表“用户界面”,请给它一个代号(F4;将(Name) 属性设置为例如UserInterfaceSheet) - 然后你可以直接使用该标识符,而无需从 Worksheets 集合中提取工作表:

    Set box = UserInterfaceSheet.OLEObjects("TextBox1").Object
    

    现在您可以使用早期绑定的对象引用,您将有 IntelliSense 来指导您。 MSForms.TextBox 没有 .Characters 属性。 确实有一个 .Font 属性,所以你可以开始探索:

    所以Font 属性是NewFont 类型的对象;使用对象浏览器 (F2),您可以浏览其成员:

    因此:

    box.Font.Name = "Arial"
    box.Font.Size = 20
    

    应该这样做。


    注意误导性名称和前缀:lblsearchreminder 读起来就像您在查看 MSForms.Label 控件,而不是 TextBoxtxtSearchReminder 会更合适,或者如果您更喜欢与控件无关的名称,SearchReminderBox 也可以。

    另外ErrorVBA.Conversion 模块中的一个函数,你在这里是shadowing

    【讨论】:

    • 嘿,mathieu 非常感谢您的帮助——我想我可能会因为缺乏理解而说错话,因为我一直在自学 VBA。我正在尝试将输入到 ActiveX 文本框中的字符串放入具有 Arial 字体和大小为 20 文本的表单控件标签中。我试图解释您的答案并将其应用于此问题,但我不确定是否可能。
    • 这不是你的代码试图做的,也不是你的问题(仍然需要用澄清进行编辑)所问的,假设它在问什么 - 我发布了这个答案希望它会很有用,但是您的问题目前无法回答,并且您的代码非常非常非常令人困惑-lblsearchreminder似乎是ListObject,即表格 i>,它没有 Caption 属性。使用工作表的 Shapes 集合查找您的标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多