Вопросы и ответы по VBAVBA: ответы на вопросы* * *За последние пять лет мне пришло немало писем с вопросами о решении проблем, возникающих при написании программ на языке Visual Basic for Applications. Несмотря на то, что большинство из них было посвящено конкретным техническим решениям, возможно, они будут интересны и вам, так как демонстрируют практическое применение VBA- программирования. Все эти вопросы - реальные, то есть были заданы пользователями, исходя из необходимости решения возникающих задач. Могу ли я это сделать? Метод Protect, похоже, этого сделать не дает. Microsoft Word делать это не позволяет. Впрочем, можно пойти на хитрость. Создайте документ Doc. Затем сохраните документ с рисунком, задав ему пароли на открытие и на изменения. Создайте документ Doc. В том месте, где должен быть рисунок, вызовите окно Вставка- Обьект- Создание из файла и укажите в пути файл doc. Введите пароль на открытие - и рисунок в Вашем документе. Сохраните его. Теперь при открытии файла doc. Проблема остается в том, что оба файла - и с рисунком, и с текстом - должны присутствовать, причем в тех местах, где они были изначально. То есть вся эта конструкция труднопереносима. Пример 12px шрифта Europe Normal: кириллица Пример 12px шрифта Europe Normal: латиница Пример 18px шрифта Europe Normal: кириллица. Этот шрифт 'зашит' в глобальный (общий) шаблон Normal.dotm. Откроется одноименное диалоговое окно: На вкладке Изменение выберите стиль Обычный. Уточните необходимый вам формат шрифта (OT, TTF, T1) и платформу (Mac/PC). Помогите, пожалуйста, найти Univers (обычный, не condensed в этот раз). Template = "C:\MSOffice\Шаблоны\ Имя шаблона.dot". Материал из Википедии — свободной энциклопедии. Иконочный шрифт внедряется в шаблон сайта посредством подключения шрифтов, т.е. Набирая эти слова обычным шрифтом, сразу же получают необходимое оформление. Template = "C :\MSOffice\Шаблоны\ Имя шаблона.dot". Шрифты для шаблонов WordPress – как заменить? Использование стандартных шрифтов для шаблонов вполне обычная тенденция.Откройте один из сравниваемых документов, выберите пункт меню . Все разночтения будут выделены, в зависимости от их характера - зачеркиванием, цветом и др. Как это можно сделать - с помощью API? Достаточно стандартных диалоговых окон Word. Их выпадающий список можно получить, набрав в Редакторе VBA фразу . Выбрать файл позволяет, к примеру, окно, вызываемое константой wd. Dialog. File. Open - для его вызова можно использовать такой код: With Dialogs(wd. Dialog. File. Open). Displayvibfail = . File. Name. End With. Команда . Display отображает диалоговое окно, а следующая строчка записывает в переменную имя выбранного файла. При этом открытия выбранного файла не происходит (если надо, чтобы происходило, следует вместо команды . Display использовать команду . Show). Подробнее - смотрите Справку VBA по слову Dialogs и раздел . В результате ее выполнения будет отображено окно открытия файла, а после выбора имя файла поместится в переменную (здесь - . Включил в нее screenshot'ы, на которые наложил автофигуры Word - выноски, стрелки, скобки, надписи и проч., что разъясняло бы назначение частей рисунков. Теперь хочется поставлять документацию в формате HTML, но.. Как цивилизовано выйти из ситуации? Для реализации желаемой Вами задачи выделите все автофигуры рисунка вместе с самим рисунком (инструментом . После этого у Вас в документе появится рисунок с всеми вставленными автофигурами, который, однако, спокойно конвертируется в GIF- формат при конвертации всего документа в HTML. Так следует поступить со всеми рисунками в документе. В Word. 20. 00 и Word. Вторую функцию следует использовать тогда, когда необходимо получить тот номер страницы, который указан на ней непосредственно (т. Описание обеих команд можно получить в Справке VBA по слову Information. При работе подпрограммы поиска каждое вхождение выделяется. Вот, к примеру, фрагмент кода макроса, который отображает в диалоговом окне номера страниц, на которых найден текст . После этого через Clipboard из Excel макрос пересылает в Word- документ заданную прямоугольную область таблицы. Макрос Word обрабатывает эту область и начинает в требуемой последовательности копировать в Word- документ через Clipboard фрагменты Excel- таблицы. По окончании копирования Word закрывает все ненужные макросы, включая макрос Excel. Как все это сделать, чтобы работало? Она основана на имеющейся в Office возможности представлять одну программу в другой как некий обьект, с которым можно работать теми же командами, что используются при непосредственной работе с этой программой. Так, чтобы можно было из Word'ового макроса работать с Excel'ем, следует создать обьект Excel. Sheet (здесь . Так, чтобы открыть файл Excel'а, можно также дать команду es. Application. Workbooks. Open File. Name: =. Закрыть Excel можно командойes. Application. Quit. Set es= Nothing. Если работать с таблицей из Word почему- либо нельзя, и требуется именно вызвать Excel'евский макрос, то для вызова макроса следует использовать командуes. Application. Run . Про работу из Word'а с Excel'ем и т. Но можно поместить текст гиперссылки в элемент формы, который уже связать с макросом, вызывающим диалоговое окно. Для реализации данного способа необходимо вывести на экран панель инструментов . После того, как Вы отключите Режим конструктора, созданная надпись с гиперссылкой будет работать так, как Вы желаете - при нажатии на нее вызовется окно поиска текста. Можно ли сделать так, чтобы вызываемое окно работало точь- в- точь так же, как и обычное? В VBA есть функция Send. Keys, которая передает активному окну нажатия клавиш - как если бы они были нажаты на клавиатуре. Список кодов функциональных клавиш - в Справке. Если Вы используете функцию Send. Keys, то вызванное ею окно будет вести себя абсолютно так же, как при ручном вызове. Однако помните, что если пользователь переопределит заложенную Вами в макрос комбинацию клавиш, то Ваша программа начнет работать некорректно. Чтобы получить номер того листа, на котором находится кнопка, можно использовать команду Active. Sheet. Index, а чтобы номер следующего - соответственно команду Active. Sheet. Index+1, которые следует подставлять в параметр Sheets(): Active. Workbook. Sheets(Active. Sheet. Index+1). Print. Preview. 1. 0. В частности, затронутый Вами вопрос освещен в разделе . Попасть в эти разделы Вы можете с помощью системы поиска Справки VBA. В Word окно открытия файла можно вызвать командой. Dialogs(wd. Dialog. File. Open). Showа окно сохранения - командой. Dialogs(wd. Dialog. File. Save. As). Show. В обоих случаях будут вызваны соответствующие окна и выполнены соответствующие действия - открытие файла, его сохранение. Данные команды возвращают параметры: - 2 - если нажато . Данные команды можно использовать и не только по . Так, если вместо метода Show использовать Display, то окно отображаться будет, а связанное с ним действие не выполнится. Это позволяет использовать такие окна для выбора файлов с целью какого- либо действия над ними. Например, код. With Dialogs(wd. Dialog. File. Open). Displayasdf = . Name. End Withдаст возможность пользователю выбрать файл в окне и запишет его имя в переменную asdf. Для большей информации посмотрите Справку VBA по слову Dialogs и ее раздел, называющийся Displaying built- in Word dialog boxes. Думаю, Вы найдете там немало интересного. В Microsoft Excel тоже есть возможность вызова встроенных окон открытия и сохранения файлов. Так, окно открытия файла вызывается командой. Application. Get. Open. Filenameа окно сохранения - командой. Application. Get. Save. As. Filename. Их точный синтаксис посмотрите в Справке по этим командам. В отличие от Word, в Excel можно задавать также и заголовки окон, и даже надписи на кнопках. Можно лишь получить список имен модулей, в которых код макросов содержится: asd = Normal. Template. VBProject. VBComponents. Count. Re. Dim a(asd) As Stringp = . Тот же список будет помещен в массив а(). В каждом модуле может содержаться как несколько макросов, могущих быть независимо исполненными, так и ни одного. Мне нужно, чтобы при загрузке формы заполнялись ее поля содержимым текстовых рамок (на листе документа). Сначала следует узнать имя той рамки, из которой должен браться текст. Сделать это можно, например, командой Msg. Box Selection. Shape. Range. Name, выделив ее в отдельную процедуру и запустив. Получится нечто вроде . Следует запомнить это имя. Затем в программу, в раздел Sub User. Form. Если она не в колонтитуле, то выглядит как. Text. Box. XX. Text=Active. Document. Shapes(. Соответственно команды с другими номерами Shapes(. Эти части периодически изменяются и надо, чтобы изменение отражалось во всех документах. Можно это сделать в WORD? Если нет, то что посоветуете? Однако конкретная реализация зависит от реальной задачи. Если надо просто собрать документ из других документов так, чтобы при изменении в них он автоматически изменялся, то следует воспользоваться механизмом внедрения документов. Делается это в диалоговом окне . Укажите с помощью кнопки . В результате в Ваш документ будет полностью вставлен указанный файл. Изменять его из содержащего его документа будет нельзя (вернее, можно, но файл просто откроется для редактирования), зато при изменении в исходном файле содержимое результирующего документа автоматически изменится. Иными словами, поместите Ваши . Вы можете свободно менять содержимое . Работа с этим механизмом описана в Справочной системе Word. Смысл слияния - генерация набора однотипных документов с меняющимися вставками, располагающимися в т. Иными словами, на входе пользователь создает шаблон, наполняя его неизменяющимся содержанием и помечая места для вставок меняющихся текстов, прилагает к нему файл со списком меняющихся фрагментов и получает набор документов, содержащий каждый неизменный текст и одну из вставок из списка. Среди параметров этого свойства есть и те, что Вам требуются: Selection. Information(wd. Start. Of. Range. Column. Number) - возвращает номер столбца начала выделения. Selection. Information(wd. Start. Of. Range. Row. Number) - возвращает номер строки начала выделения Selection. Information(wd. End. Of. Range. Column. Number) - возвращает номер столбца конца выделения. Selection. Information(wd. End. Of. Range. Row. Number) - возвращает номер строки начала выделения. Они, естественно, работают лишь в таблице - вне таблицы возвращают . Такую строку можно разобрать командами обработки строки - Mid, Left, Right. Вид этой строчки определяется параметрами свойства Address: так, команда Selection. Address(Row. Absolute: =False, Column. Absolute: =False) выдаст строку . Вышеуказанные параметры также влияют на вид результата: так, команда Active. Cell. Address (Row. Absolute: =False, Column. Absolute: =False) выдаст результат типа . Но здесь хотелось бы знать какие команды было бы полезно использовать. Например, примерно так: Sub belyakov()ct = Documents(1). Paragraphs. Count. For y = 1 To cta = Documents(1). Paragraphs(y). Range. Words. Count. Re.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
December 2016
Categories |