Изменить размер шрифта всех форм VBA Excel - PullRequest
1 голос
/ 11 марта 2020

Я не могу заставить этот код работать - у кого-нибудь есть предложения? Кажется, просто, но я не знаю, что я делаю неправильно ... заранее спасибо.

Редактировать: у меня есть несколько диаграмм с текстовым полем. Я пытаюсь изменить размер шрифта в этом текстовом поле для всех графиков. Это изображение того, что я имею в виду

Sub shapeFont()
Dim shp As Shape

For Each shp In ActiveSheet.Shapes
    With shp.ShapeRange.TextFrame2.TextRange.Font
    .Size = 30
    End With
    Next shp

End Sub

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Эти текстовые поля, кажется, встроены в ChartObjects. Так что вместо этого вы должны l oop ваш ChartObjects. Затем l oop поверх его коллекции Shapes, и только когда вы встретите правильный TextBox, вы должны изменить его шрифт. Встроенные текстовые поля можно вставить в диаграмму, выбрав диаграмму и вставив фигуру. С тех пор эти фигуры перемещаются вместе с диаграммой.

Например:

Sub FindTextBoxes1()

    Dim c As ChartObject
    Dim s As Shape

    For Each c In ActiveSheet.ChartObjects
        For Each s In c.Chart.Shapes
            If s.Type = msoTextBox Then
                s.TextFrame2.TextRange.Font.Size = 30
            End If
        Next s
    Next c

End Sub

Укажите переменные Workbook и Worksheet для более точного определения места, где вы хотите, чтобы этот макрос работал (вместо этого уродливого ActiveSheet)

Вдохновение от здесь


В то время как встроенные текстовые поля отлично различают guish формирует вас делает хотите изменить те, которые вы не хотите изменить, вам также не нужно сначала выбирать текстовые поля, чтобы иметь возможность изменить Font.Size в случае, если вы хотите выполнить итерацию над всеми не встроенными текстовыми полями. Просто обратитесь к Characters внутри TextRange. Например:

Sub FindTextBoxes2()

    Dim s As Shape

    For Each s In ActiveSheet.Shapes
        If s.Type = msoTextBox Then
             s.TextFrame2.TextRange.Characters.Font.Size = 30
        End If
    Next

End Sub
2 голосов
/ 11 марта 2020

VBA - странный язык, если вы на самом деле выбираете его, он может это сделать ..

Sub shapeFont()
Dim shp As Shape

For Each shp In ActiveSheet.Shapes
    shp.Select
    With Selection.ShapeRange.TextFrame2.TextRange.Font
    .Size = 30
    End With
Next shp

End Sub

Если объект диаграммы присутствует, и у вас есть отдельные текстовые поля, это работает :

Sub shapeFont()
Dim shp As Shape

For Each shp In ActiveSheet.Shapes
    shp.Select
    Debug.Print (shp.Type)
    If shp.Type = msoTextBox Then
        With Selection.ShapeRange.TextFrame2.TextRange.Font
       .Size = 50
    End With
   End If
Next shp
End Sub

Если вы хотите обновить поля на графике, код, предоставленный { ссылка }, будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...