excel 我如何正确地更改自定义文本框(形状)内的文本?

a0x5cqrl  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(142)

我有一个宏,它可以自动将文本框形状插入到图表中,并为该文本框提供正确的文本和字体。虽然它目前可以正常工作,但我希望更好地了解如何在不使用的情况下执行此操作。在文本框形状上选择。.Select方法允许我包含.ColorIndex.Strikethrough.Superscript、但是我被迫把.Textframe2.TextRange.Font.Fill.Forecolor.RGB放在With Selection块之外来改变颜色。(我当前“更新”文本框的方法删除了图表中所有现有的文本框,并添加了一个新的文本框)。
我试过去掉.Select,使用“With txt1.Character(Start:=1,Length:=216).Font”,并将所有的意外情况都放在这个With块中,但是某些行出现了错误(我读到过避免使用.Select references是一个好习惯)。
真的只是想更好地理解如何正确有效地使用宏来更新图表中的文本框。

Sub UpdateChart()
Dim chrtobj As ChartObject
Dim txt1 As Shape
Dim cht1 As Chart
Dim wkbk As Workbook

Set wkbk = ActiveWorkbook
Set cht1 = Sheets("Profit & Loss").ChartObjects(1).Chart

On Error Resume Next
For Each chrtobj In Sheets("Profit & Loss").ChartObjects
    chrtobj.Chart.TextBoxes.Delete
Next chrtobj
On Error GoTo 0

Set txt1 = cht1.Shapes.AddTextbox(msoTextOrientationHorizontal, 790, 30, 190, 30)
txt1.Line.Visible = msoFalse
txt1.TextFrame.Characters.Text = "Total Rev: $" & Format(Cells(n, "B").Value, "#,###")
txt1.Select
With Selection.Characters(Start:=1, Length:=216).Font
    .Size = 18
    .ColorIndex = xlAutomatic
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Bold = True
    .Italic = True
End With
txt1.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(84, 130, 53)
End Sub
kgsdhlau

kgsdhlau1#

这个管用。
我已经从代码中删除了FalsexlAutomatic值,因为它们是默认值-不需要专门设置它们。此外,当您使用更改ForeColor-
还将n替换为7,因为n未在Format(Cells(n, "B").Value中定义

Sub UpdateChart()
    Dim chrtobj As ChartObject
    Dim txt1 As Shape
    Dim cht1 As Chart
    Dim wkbk As Workbook
    
    Set wkbk = ActiveWorkbook
    Set cht1 = Sheets("Profit & Loss").ChartObjects(1).Chart
    
    On Error Resume Next
    For Each chrtobj In Sheets("Profit & Loss").ChartObjects
        chrtobj.Chart.TextBoxes.Delete
    Next chrtobj
    On Error GoTo 0
    
    Set txt1 = cht1.Shapes.AddTextbox(msoTextOrientationHorizontal, 790, 30, 190, 30)
    txt1.Line.Visible = msoFalse
    txt1.TextFrame.Characters.Text = "Total Rev: $" & Format(Cells(7, "B").Value, "#,###")
    'txt1.Select
        With txt1.TextFrame2.TextRange.Characters.Font
            .Size = 18
            .Bold = True
            .Italic = True
            .Fill.ForeColor.RGB = RGB(84, 130, 53)
        End With
    'txt1.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(84, 130, 53)
End Sub

相关问题