Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72

Как задать диапазон Shapes. Range(Array("Text box 1", "Text box 2", "Text box 3", "Text box 4"."Text box 10").Select

01.03.2020, 18:36. Показов 5110. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, все. Подскажите, пожалуйста, возможно ли в макросе VBA MS Word заменить область перечисляющихся значений в области Shapes. Range(Array("Text box 1", "Text box 2", "Text box 3", "итд) ) , если заранее известно, что они точно идут все,и по порядку от 1 до n не перечисляя все их, а указав только от первого до последнего "text box". Заранее благодарю
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2020, 18:36
Ответы с готовыми решениями:

Text box
Добрый вечер. Мне нужно в текстбоксе изменить цвет текста, как сделать? Заранее спасибо.

Как повернуть text box на определённый угол?
Как повернуть text box на определённый угол Как уменьшить мерцание Frame когда она увеличивает высоту в цикле

Как в Text Box писать разными цветами?
Кто знает как в Text Box в одной строчке написать разные слова разным цветом (как это делает редактор ВБ отделяя ключевые слова от всего...

17
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72
01.03.2020, 18:44  [ТС]
Здравствуйте, все. Подскажите, пожалуйста, возможно ли в макросе VBA MS Word заменить область перечисляющихся значений в области Shapes. Range(Array("Text box 1", "Text box 2", "Text box 3", "итд) ) , если заранее известно, что они точно идут все,и по порядку от 1 до n не перечисляя все их, а указав только от первого до последнего "text box".

Или если это невозможно, то подскажите, пожалуйста, как в цикле for реализовать автоматическое формирование такой длинной записи по порядку скажем от "Text box 1" до "Text box 4" в кавычках и через запятую, чтобы после уже последнего "Text box 4" перед закрывающейся скобкой не вылазила запятая) и потом уже это сформированное значение Подставлять в Shapes. Range(Array( ss) ) и работало, как нужно все)

Заранее благодарю)
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
01.03.2020, 19:07
Inna1998, а вот интересно вам действительно удалось имена текстбоксов сделать с пробелами или это просто ваши фантазии?

Добавлено через 12 минут
а зачем вам задавать первые - последние? Ведь можно формировать, нужные вам, адреса, например, Set Cons = UserForm1.Controls("TextBox" & I) I-номер вашего текстбокса. Или воспользоваться Class Module и создать массив этого класса. А все эти рассуждения от того, что вы придумали непонятную структуру и спрашиваете а есть такая или нет. Может начать с начала и сообщить изначально надо то что сделать.
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
01.03.2020, 19:48
Burk, Вы тоже можете создать текстовые поля, с пробелами в именах но они не имеют никакого отношения к контролам.

Visual Basic
1
2
3
Dim txt As Shape
Set txt = ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, 100, 50, 1, 1)
MsgBox txt.Name
Inna1998, Откройте тайну, что именно Вы хотите сделать с этими текстовыми полями ?
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
01.03.2020, 19:58
pashulka, я почему-то решил, что речь идет об UserForm.
0
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72
01.03.2020, 20:32  [ТС]
Так записал обработчик в word при записи макроса, с пробелами как раз при выделении "Text box #")

Добавлено через 13 минут
Мне нужно после того как я их все выделю, надеюсь все же не перечисляя их все вручную В
shapes.range(array("Text box 1", "Text box 2" ... До "Text box 100" )) а задав как то с диапозоном чтоб просто с по 100 и все.

Ну или на крайней случай, чтобы длинная запись такая, содержащая все 100 текст боксов была сформированна автоматически в цикле напримен for ,именно в таком формате(стиле)
"Text box 1", "Text box 2", ... , "Text box 100"������ Я не могу это сделать Буду ручками писать на еще крайнейший случай ,если и тут не помогут с этим мне������������������
Заранее спасибо всем тем, кто сможет поделится сокровенным и тем самым сможет ответить на один из моих двух вопросов поставленных тут перед вами уважаемые господа. Буду искренне и безмерно рад за ответ на хотябы один каждому ответевшему мне������!!

Добавлено через 10 минут
И.. затем ко всем им применить одно свойство для всех сразу. Хоть цвет изменить рамки, хоть шрифт
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
01.03.2020, 21:12
Можно просто перебрать все фигуры и изменять нужные параметры только у текстовых полей. Разумеется, если других фигур нет, то и проверка не имеет особого смысла.

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Test()
    Dim sh As Word.Shape
    For Each sh In ActiveDocument.Shapes
        If sh.Type = msoTextBox Then
           sh.Line.ForeColor.RGB = vbRed
           sh.TextFrame.TextRange.Font.Name = "Arial"
        End If
    Next
End Sub
1
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72
01.03.2020, 22:41  [ТС]
Спасибо огромное. Наверное буду делать так. У меня действительно только эти объекты есть поэтому можно заменить во всех, как сделал ваш код уже у меня на компьютере, действительно он работает! Однако, еще обнаружил, то что вот скажем номера этих Text Box очень непостоянная вещь в MS Word, что в принципе и логично)) просто я не знал это и тут вот сейчас обнаружил, что скажем когда я днем создавал эти "Text Box" удалял снова создавал экспериментировал)) - и были одни номера у них, например "Text box 3988" и тд, то теперь они у меня после повторного вкл компьютера вечером - "Text box 4034" например. И если мне бы нужно было скажем отделить одни Text box от других по номерам, как я это и хотел, пока сейчас не обнаружил что они каждый раз могут изменится..

Это была бы очень непростая задачка предполагаю для многих даже тут или не совсем как считаете?Например, определить последние 10 созданных Text Box в ActiveDocument , и уже в них, определив номера конкретные ,изменить то или иное форматирование под определенными десятью последними "Text Box ????" номерами...
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
01.03.2020, 22:59
Не надо людей брать на слабо.

Visual Basic
1
2
3
4
5
Dim s As Word.Shapes, i&
Set s = ActiveDocument.Shapes
For i = s.Count To IIf(s.Count < 11, 1, s.Count - 10) Step -1
    MsgBox s(i).Name
Next
1
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72
01.03.2020, 23:58  [ТС]
Спасибо снова большое вам) Вы просто Бог в програмировании этом. Но последний код считает еще и рисунки обычные(( Попробовала добавить к
Set s -
Shapes.AddTextbox
Но стало выдавать ошибку Compile error: Argument not optional,
хотя AddTextbox программа сама подставляет после нажатия точки и выбора соответствующего значения из списка аргументов. Не подскажите как изменить на определенный Shapes в частности Text box, других мне не нужно, но полагаю на будущне, что научившись с Text_box ,другие будут также находится, хотя конечно пока трудно представить себе такую задачу, где может пригодится выделить и изменить несколько последних, скажем, линий или овалов.. Но только пока не столкнешься напрямую с тем в реальности)
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
02.03.2020, 08:52
Вы говорили, что окромя текстовых полей (они же надписи), ничего нет. Если же появились ещё и рисунки, то можно попробовать что-то вроде :

Visual Basic
1
2
3
4
5
6
7
8
9
Dim s As Word.Shapes, i&, c&
Set s = ActiveDocument.Shapes
 
For i = s.Count To 1 Step -1
    If s(i).Type = msoTextBox Then
       MsgBox s(i).Name
       c = c + 1: If c = 10 Then Exit For
    End If
Next
1
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72
02.03.2020, 13:10  [ТС]
Последний код работает абсолютно супер и полно, как и предыдущие два конечно в меру своей требуемой на каждом этапе полноты:-)



Добавлено через 10 минут

Благодарю за столь быстрое и качествено оказанную помощь в програмировании без корыстно) это Просто огонь для снова веры в чистое и светлое будущее для меня и других людей)!!!
0
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72
02.03.2020, 20:23  [ТС]
pashulka, Добрый вечер, Павел. Извините, пожалуйста, а вы не могли бы еще подсказать то как возможно выделить и затем сгруппировать объекты типа "Text box" и затем выделить и сгруппировать объекты например типа "Line", после чего обнаружить и выделив две эти последние созданные группы и объеденить их в одну макрогруппу?

Наверно, для простоты условимся что выдялем и группируем ВСЕ объекты находящиеся на странице, а не последние 10.

С последними, как я поняла, не знаю справедливо ли, возможно только перебрать каждый отдельно один за другим меняя поочередно свойство каждого, на единое при этом для всех 10. Что ,если это действительно так, то не может быть подходящим для группировки, когда обязательным условием должно быть выделение сразу всех или той части объектов shapes, которую группируем в один момент времени сразу все. А это подошло бы или может даже ускорило выполнение предыдущих кода по изменению сразу во всех последних 10" text box".., шрифта и цвета рамки, а не перебором по одному..если было бы это возможно.
Заранее спасибо, за любой возможный ответ , по данному ньюансу VBA в word :-)

Добавлено через 10 минут
(Все в пределах каждого типа Shapes!имела ввиду "Text box", "Line", ...)
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
02.03.2020, 20:26
Пробуйте упрощённый вариант. Но имейте ввиду, что линий много разных, надо смотреть их типы

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim a(), i&
Dim s As Word.Shapes, sh As Word.Shape
Set s = ActiveDocument.Shapes: ReDim a(1 To s.Count)
 
For Each sh In s
    Debug.Print sh.AutoShapeType, sh.Name 'CTRL+G
    Select Case sh.AutoShapeType
        Case 1, -2: i = i + 1: a(i) = sh.Name
    End Select
Next
 
If i Then
   ReDim Preserve a(1 To i)
   Set sh = s.Range(a).Group 'Можно просто s.Range(a).Group
End If
1
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72
02.03.2020, 23:26  [ТС]
pashulka,
В этой строчке почему то пишет ошибку
Visual Basic
1
Set sh = s.Range(a).Group 'Можно просто s.Range(a).Group
- " Microsoft Visual Basic
Run-time error '-2147024809 (80070057)':
Компонент с указанным именем не найден."

А подскажите в каком месте мы задаем тип линии, или объекта shapes?) Раньше мы задавали словом "msoTextbox" в явном виде и было сразу понятно, что именно ищем и выделяем, а тут что это номера после Case 1, -2 номера фигур или нет? ((
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
02.03.2020, 23:48
я не поленился, проверил, у меня фигуры стали сгруппированы. 1 и -2 это значения констант. смотрите свойство AutoShapeType

Подобную ошибку можно получить - если попытаться сгруппировать фигуры, которые уже являются частью группы.

И ещё Word не даёт группировать фигуры, находящиеся на разных страницах.

P.S. А так, лучше говорить предметно, пока никакого документа с фигурами, нет.
0
2 / 2 / 1
Регистрация: 01.03.2020
Сообщений: 72
02.03.2020, 23:51  [ТС]
Пришлю файл сейчас еще вордовский сам с фигурами этими и надписями, сейчас вот в записи макроса примерно сформировала, что я хочу макросом сделать, но чтобы естественно эти номера были любые последние, возможно так будет чуточку яснее)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
 '(1)  Grouping  Text  Box 
ActiveDocument.Shapes.Range(Array("Text  Box  5426",  "Text  Box  5428",  _ "Text  Box  5433")).Select
 Selection.ShapeRange.Group.Select
 '  (2)  Grouping  Line 
ActiveDocument.Shapes.Range(Array("Line  5230",  "Line  5229",  "Line  5228")). _ Select
 Selection.ShapeRange.Group.Select
 '  (3)  Grouping  Oval 
ActiveDocument.Shapes.Range(Array("Oval 5395",  "Oval  5393",  "Oval  5408")).  _ Select
 Selection.ShapeRange.Group.Select 
'Grouping  Group 
ActiveDocument.Shapes.Range(Array("Group  5868", "Group  5869",  "Group  5870"  _ )).Select
 Selection.ShapeRange.Group.Select
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
02.03.2020, 23:54
Вариант группировки постранично. для первой страницы.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim a(), i&, page&: page = 1
Dim s As Word.Shapes, sh As Word.Shape
Set s = ActiveDocument.Shapes: ReDim a(1 To s.Count)
 
For Each sh In s
    Select Case sh.AutoShapeType
        Case 1, -2
        If sh.Anchor.Information(3) = page Then
           i = i + 1: a(i) = sh.Name
        End If
    End Select
Next
 
If i Then
   ReDim Preserve a(1 To i)
   Set sh = s.Range(a).Group 'Можно просто s.Range(a).Group
End If
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2020, 23:54
Помогаю со студенческими работами здесь

Text Box, редактирование шрифта
РЕБЯТ ПРИВЕТ, ПОМОГИТЕ С КОДОМ ПРОГИ? 1.Отобразить в текстовом поле (Text Box) текст с различными видами шрифтов. Ввод текста...

Вставка в RICH TEXT BOX
Как програмно вставить из буфера в RICH TEXT BOX объект в зависимости от содержания буфера, т.е. если в буфере рисунок то вставить рисунок,...

Как обратиться к константе, если её имя в Text Box'e
Как обратиться к константе, если её имя в Text Box'e Имя константы лежит в TEXT BOX'E как приравнять переменную этой константе

Какой размер у объекта Text Box ?
Заполняю объект Text1.Text циклом через какое-то время... цикл продолжается а объект перестает заполняться данными... Заполняю...

Двумерный массив - вывод в текстовый файл и Text.Box
Добрый день. Пишу программу для расчета гидравлического удара. Опыта программирования нет. Все расчеты должны быть в табличном виде. Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru