1

Тема: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

Есть шахматный шрифт "Chess Merida". Там есть символы рамки вокруг доски. Тут речь о нижней и левой рамках. Рамки могут быть с подписями и без. "Подписи" -- т.е. когда внизу под доской по горизонтали идут буквы, обозначающие вертикали (A,B,…,H), а слева от доски -- идут цифры, обозначающие горизонтали (1,2,…,8).

Коды символов (если посмотреть в Insert > Symbol)

нижняя рамка без подписи : 40
левая рамка без подписи : 36

нижняя рамка (т.е. с буквами) A-H : 232-239
левая рамка (т.е. с цифрами) 1-8 : 224-231

Теперь, собственно, непонятки. Допустим, я хочу через VBA вставить символ с неким кодом:

нижняя рамка с буквой A:
    Selection.InsertSymbol _
      Font:="Chess Merida", _
      CharacterNumber:=232, _
      Unicode:=False

левая рамка с цифрой 1 (единица):
    Selection.InsertSymbol _
      Font:="Chess Merida", _
      CharacterNumber:=224, _
      Unicode:=False

Тут всё работает нормально. Аналогично будет и для остальных рамок с буквами/цифрами, только, соответственно, надо использовать их коды.

А вот если я пытаюсь через VBA узнать код сивола такой буквенно-цифровой рамки (т.е. символы с кодами 224-231 и 232-239), то получается облом:

Выделим символ и выполним в окне Immediate:
?AscB(Selection.Characters(1))
для всех этих символов будет почему-то выдано 40
AscW (если использовать его вместо AscB) тоже выдает 40

При этом для остальных символов -- например, белая пешка на чёрной клетке (80), черный король на черной клетке (76), в том числе и упомянутые выше рамки без подписи (40, 36) -- AscB выдаёт правильные коды. В чём тут дело? Как мне в VBA узнать коды для символов 224-231 и 232-239?

2 (изменено: Rumata, 2025-12-01 22:09:21)

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

Вы же сами упомянули функцию

AscW

. Она как раз для юникода предназначена.

Посмотрел коды шрифт и не нашел там таких символов. Проверьте по первоисточнику: https://www.google.com/search?q=Chess+Merida+коды.

( 2 * b ) || ! ( 2 * b )

3

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

Что значит "не нашел"? А вы сам шрифт-то ставили? Шрифт Merida можно взять тут (zip-архив).

Вот о каких символах я говорю (господи, сколько гемора, чтобы объяснить простые вещи, мудохаться с картинками еще надо).

https://i126.fastpic.org/big/2025/1201/39/45bb12733f53a84f6f5b707f4d1b7439.png

https://i126.fastpic.org/big/2025/1201/cb/9b7ed693e3863dcd8855b7d334e622cb.png

Скриншоты из Word 2010. Символы обвёл РОЗОВОЙ РАМКОЙ для непонятливых.

И еще раз. Теперь пытаюсь объяснить текстом. На скриншоте окна вставки выделен символ вертикальной рамки с единицей. Его код 224 (соответственно коды остальных символов в розовой рамке, если идти далее слева направо: 225-239). Если в VBA выполнить:

    Selection.InsertSymbol _
      Font:="Chess Merida", _
      CharacterNumber:=224, _
      Unicode:=False

То он вставляется. Это нормально и понятно, так мне и надо. Если теперь выделить этот символ (т.е. в Worde, а не в окне вставки) и в окне Immediate выполнить (т.е. по сути произвести _обратную_ операцию -- получить по выделенному символу его код):

?AscB(Selection.Characters(1))
?AscW(Selection.Characters(1))

То будет выдано 40, а не 224 (40 выдают и AscB и AscW). Как мне через VBA узнать этот код 224?

4 (изменено: 3wedsmncjklvjvd73734, 2025-12-02 02:04:40)

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

EgorS
Не трать время на поиск лучшего кода.
Хочешь что бы заработало? Возьми массив . Их там всего - то 64 штуки.
Потом когда нибудь когда всё станет скучным с "этой игрой", То будешь "улучшаться в домике" (есть такая стратегия в нардах), т.е. делать рацухи в коде.
Сделай решение задачи в лоб. А потом  улучшай код.
ремарка.
вдогонку. Как я знаю , но в ворде есть ещё копировать/вставить "стиль/формат" помимо данных.

5 (изменено: Rumata, 2025-12-02 11:25:37)

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

Что значит "не нашел"? А вы сам шрифт-то ставили?

Это вам надо! Мне-то зачем шрифт ставить?
Мне стало интересно, я погуглил, нашел страничку с описанием этого шрифта. Там была таблица с символами и их кодами.
Вот товарищ в предыдущем комменте дал совет.

И вообще, не надо грубить и отвечать высокомерно. За помощью вы пришли. Да и если к вам придуть, быть высокомерным быть не стоит.

( 2 * b ) || ! ( 2 * b )

6

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

3wedsmncjklvjvd73734 пишет:

Хочешь что бы заработало? Возьми массив. Их там всего - то 64 штуки.

Какой массив? Не понимаю, что вы имеете в виду… Мне нужно (с простым вопросом по кругу ходим, ну да ладно), имея выделенный в данный момент в Word символ (т.е. символ под курсором) с помощью VBA узнать его код. Для, например, чёрного короля на чёрной клетке — код 76 — это работает:

Вставляем этого короля:

    Selection.InsertSymbol _
      Font:="Chess Merida", _
      CharacterNumber:=76, _
      Unicode:=False

Вставилось, теперь обратная задача: узнаём код по выделенному "королю":
?AscB(Selection.Characters(1))  --  выдает 76

С королём всё нормально (и с остальными фигурами, не буду тут много писать, ясно, о чём речь).

А вот с этими "рамками" (224-229) (см. скриншот выше) НЕ нормально: они вставляются как надо, но обратная операция для них не работает (например, для символа [1||]:

?AscB(Selection.Characters(1))  --  выдает 40 (а не 224, как по идее должно быть)
?AscW(Selection.Characters(1))  --  тоже выдает 40

7

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

MS Word: Getting the actual ASCII code of an inserted symbol
Не оно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: 3wedsmncjklvjvd73734, 2025-12-02 21:48:39)

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

EgorS
Я предлагаю не тратить время, а сразу начать пользоваться кодом.
Потому что потратив время в результате получим ответ ".... Т.к. МСВорд имеет встроенную версию х32, то коды символов (которые не принадлежат корпорации Микрософт) тоже ограничены до номеров 220, кроме символов МС Arial..... по применению встроенной функции в VBA AscB и AscW". Ну или типа того... Там может быть разные засады. ОС х64, WinWord x32 (VBA x32), или  ОС х32, WinWord x64 (VBA x32)...

Вам ЭТО надо? "Вам ехать или шашечки?"..
....
Возьмите и создайте свою кодировку через массив.

Dim Code_(15,2) As String
' создаёт массив Code_ типа String с 16 элементами (индексы от 0 до 15), всего 16 элементов.

Массив будет иметь вид.


Code_(0,0)="Белая пешка"  '- которая имеет паспорт 0.0   
Code_(1,0)="Белая пешка" '- которая имеет паспорт 1.0
....
Code_(15,0)="Белая ладья" '- которая имеет паспорт 15.0

... И все что имеет в своём коде ",0" Все БЕЛЫЕ ФИГУРЫ.
А коды у которых на конце будет ",1" Все ЧЁРНЫЕ ФИГУРЫ.

Code_(0,1)="Чёрная пешка"  '- которая имеет паспорт 0.1   
Code_(1,1)="Черная пешка" '- которая имеет паспорт 1.1
....
Code_(15,1)="Черная ладья" '- которая имеет паспорт 15.1

Сами данные которые будут в эти массивы записываться, это будет код шахматной доски
например.

Code_(10,0)="А5" ' Ну или как вам будет угодно, код номера таблицы или ещё любая "вещь" 
....
Code_(3,1)= ="F4" ' Ну или как вам будет угодно, код номера таблицы или ещё любая "вещь" 

...
Ведь ВАМ всё равно надо будет где либо городить "драйвер", перерасчёта шрифта, в символы или коды ячеек в код на таблице...
То и тут ВАМ тоже так же ЭТО надо будет прописывать в "базе" , где будет хранится данные для перерасчёта.
Всё просто до "нельзя КАК".
Дарю.
вдогонку
не хочется драйвера городить? Можно сразу.

Dim Code_(15,2,4) As String
' создаёт массив Code_ типа String с 16 элементами (индексы от 0 до 15), всего 16 элементов.
И с 2-мя разными индексами

Будет так.


Code_(0,0,1)="Белая пешка"  '- которая имеет паспорт 0.0   
Code_(1,0,1)="Белая пешка" '- которая имеет паспорт 1.0
....
Code_(15,0,1)="Белая ладья" '- которая имеет паспорт 15.0

Все N,0,B - Это все белые.. Второй индекс =0 это все белые.
Все N,1,B - Это все Чёрные.. Второй индекс =1 это все черные.
N- Это конкретный номер (паспорт) фигуры.
B- Это конкретный статус фигуры.
Например
В=0 это все пешки.
В=1 это все солдаты.
...
В=4 это все ферзи.
Каждый конкретный массив будет получать код на "доске".
типа
Code_(3,0,0)= "F4"
Читается так.
Конкретная пешка (N,S,0)=0 это пешки
N=3 , это конкретная пешка которая стояла "там то и там то"
S=0  , это именно белая пешка

Короче, с массивами можно загородить что угодно.
А если применить ListBox , то можно и поиск сразу организовать с сортировкой (съеденные фигуры). По типу в VBS, Dictionary объект

9 (изменено: 3wedsmncjklvjvd73734, 2025-12-03 16:14:09)

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

EgorS
Да можно ТУПО В ЛОБ, обозначить 16 белых и 16 черных фигур, а не заморачиваться массивами и ими перерасчётами.


Dim P00 as string ' белая пешка
Dim P01 as string ' белая пешка
'...
Dim S00 as string ' белый слон
Dim F00 as string ' белая ферзя
Dim K00 as string ' белый король
'...
Dim P10 as string ' чёрная пешка
Dim P11 as string ' чёрная пешка
'...
Dim S10 as string ' чёрный слон
Dim F10 as string ' чёрная ферзя
Dim K10 as string ' чёрный король
'...
'1-P00="E2-E4" ' белая пешка пошла
'2-P10="E7-E5" ' черная пешка пошла
'...


10

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

Да, оно самое, благодарю за ссылку. В общем, вкратце оттуда (если кому пригодится эта тема), чтобы было перед глазами:

there is no simple way to get the character's code point or font name directly using any of the properties of the Selection or Range. In this situation, Word always uses the code point 40, and internally, it does store the name of the font you specified and a Unicode codepoint. Two things you can do. If the character is not 40, assume it already has the correct codepoint (although I am not certain about that). But if not:

• retrieve the .XML or .WordOpenXML of the Selection or Range and look for the relevant element
• or, if you only need the codepoint, copy the character and use paste special to paste it using the Unformatted Unicode Text format

Первый способ с  Selection.XML (см. там sub getCharFontAndCodepoint) у меня работает, да, им, действительно оказалось можно различать "неразличимые" через AscB/W нужные мне символы, но к сожалению работает он только, начиная с Word 2003, а в Word 2000 — нет, так как там у Selection нет св-ва XML (в Word 2002/XP не проверял, но думаю, что и там не работает). А я в основном предпочитаю именно Word 2000, так как Office 2000 мне нравится больше всех, он самый удобный и визуально приятный.

А второй способ с копированием, вставкой как Unicode и удалением мне не нравится, так как при нём возникает мельтешение на экране, которое раздражает.

В общем, наверное, придётся забить на эту идею…

P.S. to 3wedsmncjklvjvd73734

Видимо, я должен вас поблагодарить за предложенные идеи с массивами. Всё-таки вы старались помочь, писали, но я хоть убей так и не понял, как это поможет мне узнать, что в данный момент курсор стоит на символе, например, "||1" (код 224) или "||2" (код 225) итд. Не на пешке, не на ферзе, не куда что ходило и кого съели, а просто узнать что это символ такой-то.

11 (изменено: 3wedsmncjklvjvd73734, Вчера 02:20:25)

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

EgorS пишет:

Видимо, я должен вас поблагодарить за предложенные идеи с массивами. Всё-таки вы старались помочь, писали, но я хоть убей так и не понял, как это поможет мне узнать, что в данный момент курсор стоит на символе, например, "||1" (код 224) или "||2" (код 225) итд. Не на пешке, не на ферзе, не куда что ходило и кого съели, а просто узнать что это символ такой-то.

Если проблема заключается в том что бы узнать, на каком коде (символе, координате и т.д )  стоит в данный момент курсор, то это место определяется в VBA функцией селекции (выделения). Ну вы и сами знаете.
Если у вас ваше ПОЛЕ имеет координаты, то по ним можно узнать где стоит курсор (игры "морской бой", "шахматы"). А если там для визуализации, в то место установлен (программно), символ, или картинка, то по коду самой картинки или по коду символа, вы легко, определяетесь. Ваш затык заключается сейчас в том, что ВЫ уперлись в распознавание символа. Применив не стандартный шрифт в ворде. Поэтому вам стоит применить другой метод.
Этих методов, "миллиард, сикссилион до неба!". Хоть таблицу своих символов.
Создайте в VBA свою функцию, которая сама перекодирует ваш личный символ в ваш код и возвращает вам, так же как встроенная функция в ворде.
Но как я понял, для ВАС это будет сложнее сложного. Как я понял, вы не шибко в программирование сечёте.
Но с другой стороны вы можете обойтись и стандартным шрифтами. Например у вас будет "драйвер" для перекодирования кода в символ фигуры. Т.е. до кода 16-ти (все символы) будут белые. А после 16-ти до 32 будут коды символов чёрных. И есть где то там в вашем коде "драйвер" , функция  перевода этих кодов с конкретной фигурой.
Где то в коде будет ваша таблица кодов и фигур. И функция написанная вами будет постоянно туда лезть и перекодировать код символа в фигуру. Вот и всё.
пример такой табдицы


'Const P00 As integer = 1 '- пешка белая
'Const P01 As integer = 2 '- пешка белая
'....
'Const S01 As integer = 14 '- слон белый
'Const F00 As integer = 15 '- ферзь белый
'Const K00 As integer = 16 '- король белый
' И далее всё тоже самое но только с индексом 1 , например P10 - это чёрная пешка но у неё 
' код символа будет уже 17.

Эта и есть ваша личная таблица перекодирования.
... Как ЭТО пашет?
Курсор встал на клетку, у которой в настоящее время прописал (вы программно туда вписали), символ стандартного шрифта винворда. который вы с помощью функции узнали код его. Например 14.
Другая написанная вам функция перебирает все "константы", которые есть у вас в таблице. И если находит совпадение, то определяет этот код как название вашей фигуры. Вот и всё.
Функция поиска из таблице, простая.
И причём даже не надо для неё использовать константы (см выше код пример). Она сразу будет вам возвращать по коду символа название фигуры которая будет соответствовать коду символа.

Function find_(Kode as integer) as string
select case Kode
case 1
find_="пешка белая 1"
case 2
find_="пешка белая 2"
'....
case 31
find_="чёрный ферзь"
case 32
find_="чёрный король"
end select

end function
 

Практически ,эта функция "find_()" и есть ваш "драйвер" перекодирования из кода символа в название шахматной фигуры.
... Как ЭТО пашет?
Встал курсор на какое то место. Определил что там за символ. Другая функция определила какой это код этого символа. И там же в коде вы посылаете через "драйвер" поиск из вашей таблицы "имя шахматной фигуры".


msgbox find_(kode)

вы в функцию find_() посылаете код символа. Она вам возвращает имя шахматной фигуры.
...
ремарка.
Намудрили вы чего то с этим не стандартным шрифтом. Наверняка не знали альтернативные пути кодирования/декодирования кодов на человеческий язык. Решили спец символами закодировать.

12

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

3wedsmncjklvjvd73734 пишет:

Как я понял, вы не шибко в программирование сечёте.

Это верно, потому что я не программист и вообще с компуктерами профессионально никак не связан. Так что мне простительно. Поэтому и шныряю по форумам за ценными советами.

3wedsmncjklvjvd73734 пишет:

Если у вас ваше ПОЛЕ имеет координаты, то по ним можно узнать где стоит курсор. А если там для визуализации, в то место установлен (программно), символ, или картинка, то по коду самой картинки или по коду символа, вы легко, определяетесь. Ваш затык заключается сейчас в том, что ВЫ уперлись в распознавание символа. Применив не стандартный шрифт в ворде. <…> Курсор встал на клетку, у которой в настоящее время прописан (вы программно туда вписали), символ стандартного шрифта винворда. который вы с помощью функции узнали код его. Например 14.
Другая написанная вам функция перебирает все "константы", которые есть у вас в таблице. И если находит совпадение, то определяет этот код как название вашей фигуры. Вот и всё.

Вот тут я (видимо, из-за проницательно подмеченной вами моей тупости в области программирования) уже впал в полный ступор… А как мне без специальных шахматных шрифтов отобразить в Word шахматную доску??? Такие шрифты для этого и предназначены. Вообще, их существует довольно много, но мне внешне больше всего нравится Merida, поэтому я пользуюсь им. Тут у клеток на доске нет никаких (как вы пишете) "координат": клетки, фигуры, рамки доски — это просто ряд символов "abc итд", которые выглядят как белые/чёрные поля (если без фигур), поля с некими фигурами на них (белая пешка на чёрном поле итп), рамки вокруг доски итд.

Или вы умеете отображать доску стандартными шрифтами (Arial, Verdana итп)? Ну т.е. чтобы она выглядела именно как доска, а не набор закорючек. Мистика какая-то… Хотя, возможно, я, действительно, не понимаю каких-то элементарных для программеров вещей, но тут уж, извиняйте, люди добрые — делаю как могу…

13 (изменено: 3wedsmncjklvjvd73734, Вчера 21:06:26)

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

EgorS
Мда...
Короче. У меня стоит офис 360
И ворд может записывать доки в формате 97-2003. Т.е. ваша версия дока будет вам доступна.
Я сделал эту вашу версию дока и включил там "магнитофончик", и записал изготовление таблице.
Но сразу скажу своё мнение.
В Экселе ЭТО (игра в шахматы), проще делать из-за того что ворд ходит по клеткам в макросах только относительно стоящего в настоящее время курсора. Т.е. что бы переместить вам курсор из одного угла таблицы, в другой угол, вам нужно в цикле прогнать несколько раз  команду "MoveRight, MoveUp, MoveLeft ... и т.д.". А в Экселе проще простого. потому что у него есть координаты каждой клетки в этой таблице - как в шахматах. В экселе тоже самое делается так же как и в шахматах - поставь курсор в клетку А1:А1
  Ну если ВАМ хочется возиться с ЭТИМ, то вот вам код записанный в магнитофоне ворда.
Запустите этот код в режиме "отладка", и вы будите по строчно видеть что ОН будет делать, и таким образом понимать что ОН делает.


Sub Макрос1()
Attribute Макрос1.VB_ProcData.VB_Invoke_Func = "Normal.NewMacros.Макрос1"
'
' Макрос1 Макрос
'
'
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=8, NumColumns:= _
        8, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
    With Selection.Tables(1)
        If .Style <> "Сетка таблицы" Then
            .Style = "Сетка таблицы"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
    End With
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=55.05, RulerStyle:= _
        wdAdjustNone
        Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=47.95, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=40.85, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=33.75, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=26.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=19.6, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=26.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=26.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=56.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=49.6, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=42.5, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=35.4, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=21.25, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(3).SetWidth ColumnWidth:=56.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(3).SetWidth ColumnWidth:=49.6, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(3).SetWidth ColumnWidth:=42.5, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(3).SetWidth ColumnWidth:=35.4, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(3).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(3).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(4).SetWidth ColumnWidth:=56.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(4).SetWidth ColumnWidth:=49.6, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(4).SetWidth ColumnWidth:=42.5, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(4).SetWidth ColumnWidth:=35.4, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(4).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(4).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(5).SetWidth ColumnWidth:=63.75, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(5).SetWidth ColumnWidth:=56.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(5).SetWidth ColumnWidth:=49.6, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(5).SetWidth ColumnWidth:=42.5, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(5).SetWidth ColumnWidth:=35.4, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(5).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(5).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(6).SetWidth ColumnWidth:=56.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(6).SetWidth ColumnWidth:=49.6, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(6).SetWidth ColumnWidth:=42.5, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(6).SetWidth ColumnWidth:=35.4, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(6).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(6).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(7).SetWidth ColumnWidth:=56.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(7).SetWidth ColumnWidth:=49.6, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(7).SetWidth ColumnWidth:=42.5, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(7).SetWidth ColumnWidth:=35.4, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(7).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(7).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(8).SetWidth ColumnWidth:=56.7, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(8).SetWidth ColumnWidth:=49.6, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(8).SetWidth ColumnWidth:=42.5, RulerStyle:= _
        wdAdjustNone
    
    Selection.Tables(1).Columns(8).SetWidth ColumnWidth:=35.4, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(8).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(8).SetWidth ColumnWidth:=21.25, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(8).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.Tables(1).Columns(8).SetWidth ColumnWidth:=28.35, RulerStyle:= _
        wdAdjustNone
    Selection.MoveDown Unit:=wdLine, Count:=4
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746
    Selection.MoveLeft Unit:=wdCharacter, Count:=8
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.Shading.Texture = wdTextureNone
    Selection.Shading.ForegroundPatternColor = wdColorAutomatic
    Selection.Shading.BackgroundPatternColor = -553582746


End Sub


EgorS пишет:

Или вы умеете отображать доску стандартными шрифтами (Arial, Verdana итп)? Ну т.е. чтобы она выглядела именно как доска, а не набор закорючек. Мистика какая-то…

И в догонку . ASCI есть коды похожие на рамки таблицы. правда внутрь этой клетки будет проблема что либо написать.
|_| верхняя полоса этой клетки "рисуется", верхней клеткой, у которой есть как и в этой клетке нижняя полоса
|_|
|_|
и т.д.
|_|_|_|
|_|_|_|
|_|_|_|
|_|
Но если только вместо "_" (нижнего флеша), применить букву с подчёркиванием то пройдёт и писанина в эти клетки.
|_|_|_|
|_|А|_|
|_|Ф|_|
|_|
код 95 и 124
https://studfile.net/html/2706/198/html_AJ5ar1ngvh.igyk/img-Fc7rid.png

Только опять же ВЫ продумали КАК по этой доске ваш курсор будет шастать?

Post's attachments

NewMacros.bas 8.48 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

14 (изменено: 3wedsmncjklvjvd73734, Вчера 22:56:49)

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

EgorS
Пример.
https://rutube.ru/video/11b8dabe9cffb05 … 7ed21059/

ЭТО оттуда-->
https://excel.hpage.com/excel.html
и ещё.
https://www.cyberforum.ru/beta-testing/ … 05314.html

Excel VBA Chess v1.01 13Feb2017.xlsm скачал от сюда-->
https://www.access-programmers.co.uk/fo … el.189245/

Post's attachments

Excel VBA Chess v1.01 13Feb2017.xlsm 296.77 kb, 1 downloads since 2025-12-04 

You don't have the permssions to download the attachments of this post.

15

Re: VBA: как в Word в VBA узнать коды символов 224-231 и 232-239

Спасибо за предпринятые усилия, запустил ваш "Макрос1" в Word 2010 — облом, вылетела мессага: «Run-time error "5992": Отсутствует доступ к отдельным столбцам, поскольку ячейки таблицы имеют разную ширину.» Кстати, строку «Attribute Макрос1.VB_ProcData.VB_Invoke_Func = "Normal.NewMacros.Макрос1"» Word 2010 тоже не понимает, видимо, в вашем Офисе 360 что-то новое наворотили. Ну да ладно, это строку я закомментировал (отключил). В общем общий смысл ясен: макрос создает таблицу, но шахматных фигур я там не увидел (в коде макроса я их тоже не вижу).

Ваша идея, как я понимаю, в том, чтобы сделать таблицу и уже в неё запихивать символы. Таблица будет как бы "координатной сеткой" для полей? Нет, это не то. Мне не нужна таблица. Дело в том, что есть специальные проги для переноса шахматных позиций в форматированный текст (в частности, в Word). Таких прог несколько, я привык к DiagTransfer. Расставляешь на её доске нужную позицию, копируешь, потом вставляешь в Word. Просто и быстро. Но символы вставляются без всяких таблиц.

В Excel, согласен, много проще, но мне нужен именно Word. Потому что у меня есть несколько книжек по шахматам в формате Word вот именно с такими позициями со шрифтом Merida и я хочу (давно была идея, да лень возиться было, тем более мне оно не особо и надо, так просто блажь в голову пришла) через VBA добавить возможность двигать фигуры, а потом одним нажатием кнопки возвращать в исходное положение (ну потому что в книгах часто приводят разные варианты из одной позиции). Можно, конечно это на реальной доске разыгрывать или переносить в какие-то шахматные проги и там фигурки двигать, но это муторно и лениво, мне захотелось делать это прямо в тексте, "не отходя от кассы", так сказать.