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

» Word VBA

Автор: Sleepwalker
Дата сообщения: 24.11.2005 10:02
Что-то я в растерянности. Может кто подскажет решение?
Задача: создать на листе компонент типа label. Создается таким вот кодом:
s = Selection.Text
Dim lb1 As InlineShape
Set lb1 = ActiveDocument.InlineShapes.AddOLEControl(ClassType:="Forms.Label.1")
lb1.OLEFormat.Object.Caption = s

допустим, сохраняем начальную точку:
sp = Selection.Start

Как переместить Лэйбл в позицию sp?
Суть в чем: мне нужно выделенный кусок текста заменить лэйблом.
----

вопрос решен. извините
достаточно было вместо ActiveDocument использовать Selection
Автор: Inochkin
Дата сообщения: 24.11.2005 10:12
DroN_S
Alt+F11
Автор: DroN_S
Дата сообщения: 24.11.2005 11:19
Inochkin

Цитата:
Alt+F11

нет, не его вызов, а сами файлы
Автор: Prisoner of Ice
Дата сообщения: 24.11.2005 15:08
1.Подскажите как написанные для VBA макросы перегнать в VB, т.е. создать отдельное от оффиса приложение, но чтобы оно работало с листами Excel как если бы это был макрос.
2.Как сделать работу макроса "неявной", т.е. чтобы при сравнении строк, он не показывал как он по ним пробегает, а работал с инфой в памяти. Обязательно ли для этого закачивать ее(информацию) вручную в массив? Я не очень хорошо знаю БД, буду очень благодарен за помощь.
Автор: phpcoder
Дата сообщения: 25.11.2005 08:52
Подскажите, пожалуйста. Такой вопрос.
Макросом из Access необходимо открыть документ word и сделать слияние в новый документ.
Пробовал так:

Цитата:


Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.Documents.Open ("D:\doc1.dot")

With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
ActiveWindow.ActivePane.VerticalPercentScrolled = 0

objWord.ActiveDocument.Close
objWord.Quit
Set objWord = Nothing

Ругается на ActiveDocument.MailMerge - объект не поддерживает св-во или метод.
Что неверно?

Добавлено:
Вопрос снят, разобрался.

Цитата:


Dim WordApp As Word.Application
Dim DocWord As Word.Document

Set WordApp = New Word.Application
WordApp.Visible = True
Set DocWord = WordApp.Documents.Open("c:\doc1.doc")
DocWord.Activate

With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
ActiveWindow.ActivePane.VerticalPercentScrolled = 0
Автор: Anatolij2005
Дата сообщения: 21.02.2006 12:20
Дайте пожалуйста ссылку в инете на хорошую книгу по Word VBA(для бесплатной закачки).
Заранее благодарен

Добавлено:
Помогите решить следующую проблему:
Есть большой документ со вставленными текстовыми полями формы(около 700 полей).
Есть также таблица в которой в одном столбце значения текста по умолчанию для полей
(старое значение) и в другом значения новые. Нужно написать макрос в VBA чтобы в документе заменить все старие значения на новые.
Заранее благодарен
Автор: Troitsky
Дата сообщения: 21.02.2006 21:34
Anatolij2005
Книги по ВБА тут. Там правда по Excel больше, но все же...

В целом можешь тут поискать.


Цитата:
Помогите решить следующую проблему

Выложил бы примеры файлов (кратко).
Кстати, не проще было на стадии создания полей и текст заменять?

Да, вот еще, в итоге нужно получить тот же текст по умолчению (только новый) для каждого поля?
Автор: Anatolij2005
Дата сообщения: 22.02.2006 10:03
За ссылки спасибо правда они работают не все и по Word VBA почти ничего не нашел.Вот
кусок текста с полями

1.1. Natrii chloridi    
Натрия хлорид , раствор 0,95% для инфузий по 200 мл и 400 мл в бутылках стеклянных для крови, трансфузионных и инфузионных препаратов.
    1.2.Натрия хлорид, раствор 0,95% для инфузий, препарат производства ООО «Юни-ко», является лекарственным средством и соответствует требованиям АНД кР.С.№ П.05.03/456987 ,приказ МОЗ № 2356 от 29.05.05

    1.3. Регистрационное удостоверение Р.С.№ П.05.03/456987
полями являются
Natrii chloridi
Натрия хлорид , раствор 0,95% для инфузий по 200 мл и 400 мл
Натрия хлорид, раствор 0,95% для инфузий
кР.С.№ П.05.03/456987
№ 2356 от 29.05.05

старое и новое значения находятся в обычной таблице в одном столбце старое значение в другом новое
Дело в том что текст который нужно заменить необходимо менять не однократно и он не всегда известен, абсолютно верно:
в итоге нужно получить тот же текст по умолчению (только новый) для каждого поля.
Автор: Troitsky
Дата сообщения: 22.02.2006 13:53
Anatolij2005

Цитата:
Вот кусок текста с полями

Я же тебя другое просил
Цитата:
Выложил бы примеры файлов

Ну ладно
Имеется документ, в текст которого вставлно некоторое количество текстовых полей. Значение свойства текст по умолчанию каждого поля уникально? Т.е. нет двух таких полей, текст по умолчанию которых одинаков? Таблица со старыми и новыми занчениями сделана в Excel или набрана непосредственно в Word? Попадаются ли среди старых и новых значений одинаковые? Поля в документе следуют в том же порядке, что и строки таблицы со значениями их текста по умолчанию?

Вопросов много и если случай не частный, то с реализацией могут возникнуть трудности, и, в таком случае, если требуемые действия нужно произвести всего один раз, возможно, проще будет даже вручную все сделать.
Автор: Anatolij2005
Дата сообщения: 22.02.2006 16:21
Я бы с радостью выложил все файлы но подписивался за конфедициальность информации так что извини.Значение свойства текст по умолчанию каждого поля не уникально(есть одинаковые). Но каждое поле как ты понял закладка Текстовое Поле1 Текстовое Поле2 и т.п.Одинаковых закладок нет.Таблица со старыми и новыми значениями сделана в Word.
Среди старых и новых значений одинаковые попадаются.Поля в документе следуют в том же порядке, что и строки таблицы со значениями их текста по умолчанию(если это будет не так то буду вручную все переделывать).Требуемые действия нужно произвести возможно раз 20-30.Если есть вариант как это реализовать вручную. Напиши возражать не буду.
Заранее благодарен
Автор: Troitsky
Дата сообщения: 22.02.2006 19:44
Anatolij2005
Вот так покатит?
Код: Sub Макрос2()
Dim strNew As String
Dim intCount As Integer
Dim i As Integer

With ActiveDocument.Tables(1) ' .Tables(1)
intCount = .Rows.Count

For i = 1 To intCount
strNew = Mid(.Cell(i, 2).Range.Text, 1, Len(.Cell(i, 2).Range.Text) - 2)
ActiveDocument.FormFields(i).TextInput.EditType Type:=wdRegularText, Default:=strNew, Format:=""
Next i
End With

End Sub
Автор: Anatolij2005
Дата сообщения: 23.02.2006 09:05
С праздником. Пробовал макрос, не работает, на первом месте оказалось пустое текстовое поле. А другие поля остались на месте.Может что делаю не так?Взял кусок текста с полями и таблицу в которую вписал новые и старые значения, запустил макрос.
Автор: Troitsky
Дата сообщения: 23.02.2006 09:46
Anatolij2005
А в документе есть еще таблицы? Были? Таблица о которой идет речь (со значениями) добавлялась первой? В ней есть шапка? Она состоит только из двух столбцов - в первом старые значения, во втором - новые? Порядок добавления полей в документ был тот же, что и порядок следования соответствующих им строк таблицы?

В тестовом документе у меня все работает.
http://rapidshare.de/files/13925005/doc.zip.html
Проверь а у тебя заработает?
Автор: Anatolij2005
Дата сообщения: 23.02.2006 09:55
Как работать с этим сайтом подскажи пожалуйста, а то с английским не очень дружу.
Автор: Troitsky
Дата сообщения: 23.02.2006 10:19
Anatolij2005
Жмешь на открывшейся странице кнопку "Free".
На следующей странице (возможно придется секунд несколько подождать) введешь в текстовое поле буквенно-цифровой код, который на картинке изображен, и нажмешь кнопочку "Download" - пойдет закачка.
Автор: Anatolij2005
Дата сообщения: 23.02.2006 12:33
Спасибо все открылось. У меня стоял флешгет и с него почемуто не закачивалось, а експлорером без проблем.
В твоем файле макрос работает безупречно. Я думаю наверное лучше сделать чтобы таблица с новыми и старими значениями была в отдельном файле.В документе еще есть таблицы. Я могу в таблице обойтись и без шапки. Да она состоит только из двух столбцов - в первом старые значения, во втором - новые.Порядок добавления полей в документ был тот же, что и порядок следования соответствующих им строк таблицы.
Автор: Troitsky
Дата сообщения: 23.02.2006 13:09
Anatolij2005
Тогда созавай новый документ вставляй в него таблицу со значениями и сохраняй.
В документ с полями вставляй макрос
Код: Sub Макрос1()
Dim strNew As String
Dim intCount As Integer
Dim i As Integer

Documents.Open FileName:="D:\Документ с таблицей.doc", ReadOnly:=True, Visible:=False

With Documents("D:\Документ с таблицей.doc").Tables(1)
intCount = .Rows.Count

For i = 1 To intCount
strNew = Mid(.Cell(i, 2).Range.Text, 1, Len(.Cell(i, 2).Range.Text) - 2)
Documents("D:\Документ с полями.doc").FormFields(i).TextInput.EditType Type:=wdRegularText, Default:=strNew, Format:=""
Next i
End With

Documents("D:\Документ с таблицей.doc").Close savechanges:=False

End Sub
Автор: Anatolij2005
Дата сообщения: 28.02.2006 15:09
Огромное спасибо все работает
Автор: Anatolij2005
Дата сообщения: 01.03.2006 14:09
В дополнение к решению прошлой проблемы с полями формы, могу озадичить следующим.Подскажите какой можно написать макрос в VBA Word, что бы при удалении текстовых полей в большом тексте, происходило обновление закладки.Например была номерация Текстовое поле1, Текстовое поле2,Текстовое поле3
а после удаления поля, Текстовое поле1, Текстовое поле3 нужно чтобы было Текстовое поле1, Текстовое поле2 тоесть они должны идти подряд.
Попогите пожалуйста а то у меня пока опыта маловато.

Автор: Mbus
Дата сообщения: 07.04.2006 06:44
У меня достаточно простая задача.
Есть подпись-факсимиле = картинка в формате Png с прозрачным фоном.
Мне нужна кнопка, по нажатию которой вставлялась бы подпись в нужное место. Это все без проблем не сложно, но вот одна фигня вылезла, что мне не нравится.

В документах используются штампы - это по сути таблица со строго заданными размерами. Когда в нее (в ячейку) вставляешь картинку, эта картинка сразу принимает масштаб ячейки, при чем даже если ячейки объеденены, картинка всеравно вставится размером как в одну ячейку.

Подписи бывают разные, у некоторых оч. выперают закорючки. И поэтому подпись, вписанная в ячеку становится оч. мелкой..... хочется правдоподобия.
А к в реальности бывает? подпись может слегка выходить своими закорючками за поля.

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

Добавлено:
Во, сама и сделала..... теперь вставляет со свойством = перед текстом и масштаб в два раза меньше реального


Код:
With ActiveDocument.Shapes.AddPicture(Anchor:=Selection.Range, filename:= _
"D:\g.png", LinkToFile:=False, _
SaveWithDocument:=True)
.Select
End With
Selection.ShapeRange.ScaleWidth 0.5, msoFalse
Selection.ShapeRange.ScaleHeight 0.5, msoFalse
Автор: Archimed
Дата сообщения: 09.04.2006 19:34
Никак не могу решить такую задачу. В UserForms есть 32 Combobox-са (ВВод). Все тексты из них надо переписать в массив М(1 То 32). Сделать это в ЦИКЛЕ по I.
М(1) = Ввод1.Text, М(2) = Ввод2.Text и т.д. У меня проблема с перебором текстовых полей Ввод1-32. Как задать ВводI.Text. Не хочу писать 32 строки вместо 2-3. Тем более еще придется как-то обрабатывать текст, выбрасывать пустышки и т.п.
Автор: Troitsky
Дата сообщения: 09.04.2006 22:20
Archimed
По идее, нужен массив элементов ComboBox, а не 32 отдельных штуки, тогда перебрать можно было бы по индексам. В твоей ситуации можно только попробовать осуществить перебор с помощью инструкции For Each ... Next. Другого выхода не вижу.
Автор: mrdime
Дата сообщения: 11.04.2006 01:20
Господа, возникла такая проблема:
Импортирую (руками) таблицы из IE в Word. Все таблицы имеют обьемные границы, которые в Word-е выглядят просто ужасно. Посему написал небольшой макрос. Который меняет тип и ширину границ.

Цитата:
Sub TableEdit()

For Each aTable In ActiveDocument.Tables
aTable.Borders.OutsideLineStyle = wdLineStyleSingle
aTable.Borders.OutsideLineWidth = wdLineWidth025pt
aTable.Borders.InsideLineStyle = wdLineStyleSingle
aTable.Borders.OutsideLineWidth = wdLineWidth025pt
aTable.Spacing = 0
aTable.AllowPageBreaks = True
aTable.AllowAutoFit = True

Next aTable

End Sub

Но остается параметр Spacing, даже принудительное присваивание ему значения "0" не дает возможности от него полностью избавиться. Между линиями остаются небольшие зазоры. Приходится для каждой таблицы руками в Свойствах таблицы - Таблица - Параметры убирать галку с "Интервалы между ячейками". Подскажите как избавиться от этой гадости, как это сделать на VBA?
Автор: Archimed
Дата сообщения: 11.04.2006 18:36
Troitsky
Массив элементов ComboBox тоже надо как-то заполнить. Попытался для 3-х
Dim M(3) As String
For Each I In M
M(I) = ВводI.Text
Next I
Никак не прокатывает. Неверное свойство или метод. Может кто подскажет другое, или я не так делаю.
Автор: Troitsky
Дата сообщения: 11.04.2006 19:23
Archimed
Осекся я немного. В ВБА некоторые трудности с массивами элементов управления

Можно что-то типа такого попробовать:
Код: Dim MyCombo As ComboBox
Dim M() As String
Dim i As Integer

i = -1

For Each MyCombo In UserForm1.Controls
i = i + 1
ReDim Preserve M(i)
M(i) = MyCombo.Text
Next
Автор: Fr1end
Дата сообщения: 12.04.2006 15:52
Кто подскажет, как макросом создавать формулу в Ворде?
Автор: Mbus
Дата сообщения: 18.04.2006 10:57
ВОПРОС

Вот делаю так
1. пишу макрос
2. вытаскиваю его на панельку

А можно ли как-нить написать макрос так, чтобы он сам формировал панель или меню?



Добавлено:
Вот написала так:


Код:
Sub menu()

Set MainMenu = CommandBars("Menu Bar").Controls.Add (Type:=msoControlPopup, Temporary:=True)
MainMenu.Caption = "MAIN"

Set SubMenu = MainMenu.CommandBar.Controls.Add(Type:=msoControlButton, ID:=1)
With SubMenu
.Caption = "Вставить картинку"
.OnAction = "img"
End With


End Sub

Sub img(fio)

Selection.InlineShapes.AddPicture filename:="D:\img\" + fio + "_g.png", _
LinkToFile:=False, SaveWithDocument:=True

End Sub
Автор: Troitsky
Дата сообщения: 18.04.2006 19:05
Mbus
А как ты себе представляешь работу макроса?
Ну жмешь "ВСТАВИТЬ КАРТИНКУ" и должен выполнится макрос. И что в него передается? Откуда берется параметр fio? Или он с каждым вызовом макроса остается постоянным? Меняется?
Если, допустим, это строковая переменная, которая содержит выделенный текст, не проще ли будет так это в макросе и отразить не изобретая никаких параметров?
Автор: Mbus
Дата сообщения: 19.04.2006 08:12
Troitsky
я конкретный ворос задала как передать параметр, остальное не важно...
вот мне подсказали два способа
один из них так записать .OnAction = "'img ""Фамилия""'"
другой с использованием .Parameter = "Фамилия" и в самой функции img обратиться к нему
Автор: Troitsky
Дата сообщения: 19.04.2006 17:22
Mbus

Цитата:
вот мне подсказали
и работают?

Мне кажется, в лучшем случае получится передать параметр, который нельзя будет изменить, постоянный.
Кстати, не могу найти ни одного аналога среди существующих стандартных объектов CommandBar. М.б. отсюда и недопонимание задачи?

Можно конечно сделать "каскадом":
Код: Sub img()
img2 "Фамилия"
End Sub

Sub img2(fio)
Selection.InlineShapes.AddPicture FileName:="D:\img\" + fio + "_g.png", _
LinkToFile:=False, SaveWithDocument:=True
End Sub

Страницы: 1234567891011121314151617181920212223242526

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


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