Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Word VBA

Автор: Lovec
Дата сообщения: 28.10.2013 08:57
Панель добавил. На ней выбираю элемент управления "Рисунок". Добавляю на страницу. Кнопочка "Свойства" становится активной. Но щелкая по ней получаем:
Название
Тег
и пару галок блокировки

Все. Ни разу о назначении макроса...
Автор: vikkiv
Дата сообщения: 28.10.2013 14:43
Lovec Попробуй добавь как ActiveX объект а не первые попавшиеся опции с панели инструментов.
Автор: Lovec
Дата сообщения: 29.10.2013 18:04
vikkiv
А можно "на пальцах" что за ActiveX объект?.. Куда нажать, чего вставить?...

Конкретно интересует вопрос - можно ли в Word вставить небольшую картинку при клике на которую открывалась бы большая ее копия? (типа на форме выводилась как в Excel или еще как...)
Автор: oshizelly
Дата сообщения: 29.10.2013 19:57
В последних версиях MS Word их гении умудрились изуродовать функцию сравнению документов, которая в 2003-м ворде была более или менее удобной. А мне по работе приходится сравнивать по много разных документов в час, поэтому лишние движения ну очень сильно утомляют

Нельзя ли как-нибудь решить проблему при помощи VBA? В идеале хотелось бы слепить макрос, который сравнивал бы документ, открытый в текущем окне, с документом, имя и путь которого находятся в буфере обмена. Ну или пусть хотя бы выдаёт запрос на ввод имени, а нажать Ctrl+V можно и ручками.

Заранее спасибо!
Автор: AndVGri
Дата сообщения: 30.10.2013 03:56
Lovec
Может проще без кода? Вставить уменьшенный эскиз картинки, ему назначить гиперссылку на полное изображение?
Автор: Lovec
Дата сообщения: 30.10.2013 08:03
AndVGri
Я не упомянул, но мне надо чтобы все было внутри одного файла Word и большие картинки тоже.
При этом они должны храниться где то не в тексте документа, чтоб не мешать чтению.
Так что можно бы и гиперссылкой, только вот куда ее послать...
Автор: AndVGri
Дата сообщения: 30.10.2013 08:54
Lovec
Предполагаю, что такое (в одном файле и эскизы и сами изображения) можно сделать только макросами, учитывая, что вы хотите, чтобы они, изображения, хранились не в тексте документа. Судя по вопросу

Цитата:
А можно "на пальцах" что за ActiveX объект?.. Куда нажать, чего вставить?...

вряд ли это для вас доступно.
Автор: Lovec
Дата сообщения: 30.10.2013 09:38
AndVGri
Понимаете, на Excel я это делал уже и написать более-менее сложный макрос для меня не проблема.
Меня смутила фраза "добавь как ActiveX объект". Вот как это сделать в ворде я не понимаю...
Автор: AndVGri
Дата сообщения: 30.10.2013 10:23
Добро.
1. Для 2003, панель Visual Basic, кнопка элементы управления, а в ней кнопка рисунок.
2. В него через свойства Picture грузим эскиз и прописываем в свойства Tag некоторый уникальный ключ для этого эскиза. И так "вручную" для всех эскизов (можно и программно, но тогда храниться в файле не будет, увы).
3. В редакторе VBA создаём форму добавляем ImageList (возможно потребуется сходить во вспомогательное меню Toolbox и добавить через Additional control) и через свойства Custom в диалоге добавляем уже изображения и прописываем для них соответствующий ключ Key для эскиза, тоже только вручную, так как программно сохранить изображения в файле не возможно (по крайней мере не нашёл как).
4. Добавляем на форму объект Image и прописываем код, который по ключу получает от ImageList изображение и устанавливает это изображение для Image и затем показывает форму (нужно будет прописать изменение размеров формы и Image под размер рисунка)
5. по 2. документ содержит объекты ActiveX. Нужно будет либо в модуле документа для каждого прописать обработчик события щелчка, либо связать есть варианты по проще через коллекцию объектов класса-обработчика, которая заполняется, например, при открытии документа.

Для 2010 1 и 2 можно реализовать так
Вкладка "Разработчик" (если не видна, то включить в настройках ленты), группа элементы управления, включаем режим конструктора и по раскрывающейся кнопке инструменты из предыдущих версий вставляем ActiveX изображение. Далее всё тоже.

Можно как вариант поэкспериментировать с Элементом управления содержимым "Рисунок" (ContentControl) там же на вкладке разработчика, но, правда, не нашёл как прописать Tag к нему, программно, как мы помним, не сохраняется (хотя может и да, не экспериментировал). В модуле документа есть обработчик события Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl)
в котором нужно получить Tag и запустить метод отображения формы с выбором по Tag требуемого изображения.
Пробуйте, успехов.
Автор: Lovec
Дата сообщения: 30.10.2013 11:59
Спасибо за подробное пояснение.
В принципе моя трудность заключалась в том, что я не заметил в 2010 ворде кнопки "Инструменты из предыдущих версий" на панели "Элементы управления" в меню "Разработчик"
Щелкнув по ней я увидел знакомые элементы с возможностью привязать макрос. Дальше уже все знакомо.

Написал простейший код под свою задачу. Может кому пригодиться:
1) В документ Word вставляем элемент ActiveX "Изображение", настраиваем:
- размер растягиваем до нужного небольшого
- через свойство "Picture" этого изображения задаем БОЛЬШОЙ рисунок
- свойство "PictureSizeMod" выставляем в значение 3, чтобы рисунок вписался в указанные рамки
2) В редакторе скриптов добавляем UserForm1, на ней размещаем элемент Image1
3) Щелкаем 2 раза по картинке в ворде, попадаем в обработчик ее события Image1_Click(), там пишем код:

Код:
Private Sub Image1_Click()
UserForm1.Image1.Picture = Image1.Picture
UserForm1.Height = UserForm1.Image1.Height
UserForm1.Width = UserForm1.Image1.Width
UserForm1.Show
End Sub
Автор: Pr0g
Дата сообщения: 28.11.2013 10:37
Добрый день.
Word 2010. Есть документ, в нем есть таблица 3х11. Нужно при печати документа проверить содержимое последнего столбца, и при наличии незаполненных ячеек предупредить и запретить печать. Сохранять документ можно.

upd: Почти все реализовал, остался вопрос с печатью -- можно ли ее вообще запретить из данного документа через стандартные меню Печать и Ctrl+P?
Автор: AndVGri
Дата сообщения: 29.11.2013 00:41
Можно. Правда, не понятно почему Microsoft не сделал событие для печати документа, так что через костыль. В модуль документа

Код:
Private WithEvents myApp As Word.Application

Private Sub Document_Open()
Set myApp = Application
End Sub

Private Sub myApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
If Me.Name = Doc.Name Then
'проверяем таблицу на заполнение последнего столбца.
'если не заполнено всё, то Cancel = True и выход
End If
End Sub
Автор: Marina66
Дата сообщения: 04.12.2013 23:04
1.    Напишите программу, запрашивающую у пользователя три разных положительных числа и находящую квадрат минимального.
2.    Дана последовательность символов латинского алфавита, заканчивающаяся точкой. Известно, что среди этих символов есть хотя бы одна запятая. Указать номер запятой, за которой следует буква «а».
помогите пожалуйста,задали,а я не понимаю как делать.читала пыталась и все равно не понимаю(
Автор: ilarvandar
Дата сообщения: 22.12.2013 22:18
подскажите как будет выглядеть макрос для MS Word. Есть столбец в таблице с набором слов в каждой ячейке. Нужно выбрать первое слово в каждой ячейке и перенести его в в новую ячейку (соседнюю).

Было

Иван иванов
Автор: Alexey87
Дата сообщения: 08.01.2014 21:00
Подскажите, пожалуйста, как скрывать определенные столбцы таблицы
Автор: ALeXkRU
Дата сообщения: 08.01.2014 22:02
Alexey87
макрос так записывает:

Цитата:
Sub HideColumn()
'
' HideColumn макрос
'
Columns("H:H").Select
Selection.EntireColumn.Hidden = True
End Sub

(скрытие столбца Н)
Автор: Alexey87
Дата сообщения: 09.01.2014 08:19
ALeXkRU

Код: Compile error:
Sub or Function not defined
Автор: ALeXkRU
Дата сообщения: 09.01.2014 09:13
Alexey87
эээ.. а какая подпрограмма то отсутствует? где её текст?
Если создаёшь в чистом виде по примеру (Создать макрос с именем HideColumn; в тело подпрограммы - между Sub и End Sub - скопировать/вставить две строки из примера (которые про выделить столбец H:Н; скрыть выделенное).. Запустить), то там ошибаться нечему
Разве что, обозначение столбцов иное..
Если вставляешь эти пару строк в другую программу, так где исх.текст?

ЗЫ: создать ещё проще можно: включить запись макроса; выделить столбец; правый клик/скрыть; остановить макрос и смотреть, что получилось..
Автор: Alexey87
Дата сообщения: 09.01.2014 10:17
ALeXkRU

Цитата:
правый клик/скрыть

не могу выполнить данное действие, не нахожу функцию "скрыть"

word 2013
Автор: ALeXkRU
Дата сообщения: 09.01.2014 12:06
Alexey87

хмм.. в ворде..
А зачем в ворде вообще скрывать столбцы таблиц? и что под этим понимается?
Тогда такой макрос конечно не поможет..

Варианты:
- скрыть текст (выделить текст, формат шрифта/скрытый) + убрать (не показывать) боковые границы ячеек + уменьшить ширину столбца;
-

Добавлено

пример, реализующий этот вариант (описание см. в макросе)
Автор: Gena1971
Дата сообщения: 09.01.2014 16:17
Alexey87
Так может об excel речь? Это там скрывается вроде строки/столбцы и плюсиком раскрывается.
А в ворде никогда не видел функции скрытия ячеек.

ALeXkRU

Цитата:
ЗЫ: создать ещё проще можно: включить запись макроса; выделить столбец; правый клик/скрыть; остановить макрос и смотреть, что получилось..

При записи макроса контекстное меню мыша в ворде не работает. Надо искать всё в меню и кнопками.
Автор: ALeXkRU
Дата сообщения: 09.01.2014 16:52
Alexey87
добавил пример макроса, реализующего предложенный выше вариант для ворда

ЗЫ: всё равно не понимаю, зачем это может понадобиться в вордовском документе
Автор: Alexey87
Дата сообщения: 10.01.2014 15:02
ALeXkRU, благодарю за пример
Автор: msmih
Дата сообщения: 28.01.2014 19:53
нужен совет. есть vbs скрипт выводящий отчет в word. Отрабатывает на ура если в word нет надстроек. На компе, где word стоит с надстройкой (орфо), начинаются грабли: выскакивает при автоматическом закрытии word сообщение о том что шаблон normal.dotm занят другим приложением нужна нажать ОК и еще отказаться от сохранение шаблона normal.dotx. Как на vbs обойти сею проблему?
Автор: Gena1971
Дата сообщения: 28.01.2014 21:42
msmih
Да какой нибудь конфликт переменных, подпрограмм или ещё чего. Стоит для начала просто пошагово пройти по программе - выяснить на каком месте сбоит и откорректировать скрипт.
Автор: msmih
Дата сообщения: 29.01.2014 17:46
Gena1971
прошел. скрипт простейший. Видимо, неправильно поставил диагноз. Проблема в следующем - появляется вышеописанная ошибка если открыт еще один документ. То есть как скриптом правильно сохранить все открытые документы и выйти из word? или как закрыть только активный (сформированный скриптом) документ?
Автор: Gena1971
Дата сообщения: 29.01.2014 19:50
msmih
Ну так в скрипте и изменить команду закрытия ворда на команду закрытия окна. Я в этих командах сильно не разбираюсь. Небыло нужды открывать/закрывать из vba файлы. Но в ветке по ворду я недавно модифицировал чужой скрипт. Там можно достать нужные команды.

Добавлено:
Стоп, я чего то тоже недочитал. VBS - это же не VBA. Т.е. у тебя скрипт внешний открывает ворд и закрывает его? Тогда это немного не то. VBS я не знаю как с вордом взаимодействует.
Автор: msmih
Дата сообщения: 29.01.2014 20:25
Gena1971
буду дальше думать. хотя можно передать управление на внутренний макрос. Как временная заглушка. на этом остановился пока.
to all
есть макрос, который приведен ниже. Ищет текст между тире, выделяет, подсвечивает красным. Работает отлично.
Как сделать чтобы вместо подсвечивания изменял формат найденного текста на курсив. Упарился вдрызг. пробовал разные варианты, ничего толком не получается. буду признателен за совет.

Код:
Sub format()
Dim r
Set r = ActiveDocument.Range
Selection.HomeKey wdStory
With r.Find
' .ClearFormatting
.Text = "- * - "
.Forward = True
.Wrap = wdFindContinue
.format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
If .Execute Then
ActiveDocument.Range(r.Start + 1, r.End - 1).Select
.HitHighlight .Text, HighlightColor:=wdColorRed

End If

End With
Selection.HomeKey wdStory
End Sub
Автор: Alex_Piggy
Дата сообщения: 29.01.2014 20:42
Доброе время, msmih
Активный документ в VBS сохраняется так же, как и в VB. Можно через ActiveDocument.Save, можно через объект, соответствующий конкретному документу (присваивается при открытии/создании). Пример Задачи на bat-файлах 11.
Сам скрипт можно?
Попробуйте (сейчас проверить не могу)

Код:
If .Execute Then
Set Selection = ActiveDocument.Range(r.Start + 1, r.End - 1).Select
Selection.Font.Italic = True
Selection.Font.Color = wdColorRed
End If
Автор: Gena1971
Дата сообщения: 29.01.2014 22:42

Цитата:
Можно через ActiveDocument.Save, можно через объект, соответствующий конкретному документу (присваивается при открытии/создании).

Если так, возможно и ActiveWindow.Close сработает закрыв только текущее окно, но не весь ворд. Это я к этому
Цитата:
или как закрыть только активный (сформированный скриптом) документ?


Страницы: 1234567891011121314151617181920212223242526

Предыдущая тема: Кластеризация изображений


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.