Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Firetol от 07 июня 2018, 11:27

Название: VBA: Получить список шрифтов программы Excel с помощью макроса
Отправлено: Firetol от 07 июня 2018, 11:27
Как получить список шрифтов Excel в массив?
Список шрифтов в экселе находится здесь: вкладка Главная - группа Шрифт - список со шрифтами.
Название: Re: VBA: Получить список шрифтов программы Excel с помощью макроса
Отправлено: Администратор от 07 июня 2018, 11:50
Макрос
Sub Макрос()

    Dim FontsComboBox As CommandBarComboBox, fonts()
    Dim i As Long
   
    '1. Создание ссылки на элемент, который находился на панели инструментов "Форматирование".
        ' Эта панель была в Excel 2003. Сейчас её не видно, но она существует.
    Set FontsComboBox = Application.CommandBars("Formatting").FindControl(ID:=1728)
   
    '2. Создание ячеек в массиве "fonts".
    ReDim fonts(1 To FontsComboBox.ListCount)
   
    '3. Запись шрифтов в массив "fonts".
    For i = 1 To FontsComboBox.ListCount
        fonts(i) = FontsComboBox.List(i)
    Next
   
End Sub
[свернуть]
Название: Re: VBA: Получить список шрифтов программы Excel с помощью макроса
Отправлено: Firetol от 07 июня 2018, 12:07
Происходит ошибка в этой строке:
ReDim fonts(1 To FontsComboBox.ListCount)

[вложение удалено администратором]
Название: Re: VBA: Получить список шрифтов программы Excel с помощью макроса
Отправлено: Администратор от 07 июня 2018, 12:16
У меня работает. Не знаю, почему у вас не работает.
Название: Re: VBA: Получить список шрифтов программы Excel с помощью макроса
Отправлено: Firetol от 07 июня 2018, 15:02
Перезагрузил компьютер и ошибка перестала появляться. Даже не знаю, что думать.
А так все работает, большое спасибо!
Название: Re: VBA: Получить список шрифтов программы Excel с помощью макроса
Отправлено: Администратор от 07 июня 2018, 15:15
Я не знаю причины, почему была ошибка.
Название: Re: VBA: Получить список шрифтов программы Excel с помощью макроса
Отправлено: Администратор от 07 июня 2018, 15:56
Есть ещё такой вариант. Использование программы "Word". Можно подключиться к ворду из экселя и воспользоваться функционалом ворда.
Полученные шрифты не отсортированы по алфавиту, поэтому потребуется сортировка.

Макрос
Sub Макрос2()

    Dim WordApp As Object, font As String, i As Long
   
   
    '1. Запускаем программу "Word" и присваиваем ей имя "WordApp".
        ' Далее в коде будем работать с вордом, используя имя "WordApp".
    Set WordApp = CreateObject(Class:="Word.Application")
   
    '2. Цикл по шрифтам. Не знаю, где эти шрифты находятся в ворде.
    For i = 1 To WordApp.FontNames.Count
   
        '1) Запись шрифта в переменную, чтобы два раза не обращаться к объекту.
            ' Так удобнее, на первый взгляд.
        font = WordApp.FontNames(i)
       
        '2) Есть шрифты, у которых спереди символ "@". Не знаю, что это означает.
            ' Такие шрифты не будем получать.
        If Left(font, 1) <> "@" Then
            ' Запись шрифта в View - Immediate Window.
            Debug.Print font
        End If
       
    Next i
   
    '3. Закрытие программы "Word".
    ' SaveChanges:=False - делается на всякий случай.
        ' Мы не делали изменений, но вдруг какие-то изменения всё-таки произошли; чтобы не было сообщения,
        ' предлагающего сохранить изменения.
    WordApp.Quit SaveChanges:=False
   
End Sub
[свернуть]
Название: Re: VBA: Получить список шрифтов программы Excel с помощью макроса
Отправлено: Администратор от 07 июня 2018, 21:16
я изменил ответ 6 - адаптировал макрос к экселю - можете запускать макрос из экселя