postrelll Пользователь Сообщений: 7 |
#1 02.09.2016 12:23:58 Добрый день, столкнулся со следующей проблемой в 2016 офисе. Есть макрос, выполняющий роль заполнялки документов по шаблону. Выполняется макрос из excel файлика, среди шаблонов есть Word документы, соответсвенно приходится в самом макросе оперировать с этими word объектами через Word.Application. Макрос корректно работал на версии офиса 2010 и младше. Сейчас установили 2016 офис и возникла проблема — при выполнении одной из строк кода возникает ошибка
Начальная инициализация
Проблемная функция
Проблемная строка на которой светится ошибка 4605
Буду рад любой помощи |
||||||||
The_Prist Пользователь Сообщений: 14264 Профессиональная разработка приложений для MS Office |
А на этой строке нет ошибки? Как из Excel обратиться к другому приложению проблема в том, что Excel ничего не знает о константах Word-а, в том числе и про эту: wdReplaceAll Изменено: The_Prist — 02.09.2016 12:29:09 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
postrelll Пользователь Сообщений: 7 |
#3 02.09.2016 12:43:05 The_Prist
То макрос выполняется без ошибок. Шаблон с Word документом сохраняется с нужным мне именем. Однако нужных мне замен в этом шаблоне не производится. ПОдключенные библиотеки |
||
Hugo Пользователь Сообщений: 23371 |
#4 02.09.2016 12:48:58 Вместо констант пишите явно значение этих констант.
Изменено: Hugo — 02.09.2016 13:00:20 |
||
postrelll Пользователь Сообщений: 7 |
Проблема решена — поменял формат шаблонов на .docx и переместил их с системного диска в документы пользователя. |
The_Prist Пользователь Сообщений: 14264 Профессиональная разработка приложений для MS Office |
#6 02.09.2016 13:51:39
не хотите Вы прислушиваться и читать…Она обязательно может всплыть в другой раз. Т.к. библиотека Word 16 может не подхватиться на более ранних. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
postrelll Пользователь Сообщений: 7 |
The_Prist Проблема была в «безопасном режиме» шаблона, который открывался. В моем случае макрос открывал шаблон из указанного пути. В шаблоне в цикле делал замены в нужные места документов и затем сохранял шаблон под определенным именем. Ошибка изначально была связана с тем, что при открытии шаблона в безопасном режиме его невозможно редактировать, соответственно и делать замены в нём так же нельзя. А этот безопасный режим появился только в 2016 офисе (возможно и в 2013 он так же есть), поскольку в 2010 все открывалось нормально в обычном режиме. Стоит так же сказать, что шаблоны были в .doc формате для лучшей совместимости с более старыми офисами, поскольку макросом пользуются на самых разных ПК. Из-за этого и выползала ошибка. Плюс я изначально все шаблоны загонял в отдельную папку на диске С. Учитывая, что макрос сейчас запускается из-под WIn 10, проблему так же создавала встроенная защита системы, поскольку она любит подтверждать через UAC все процедуры перезаписи/удаления. Поэтому и перенес папку с шаблонами в документы пользователя. Изменено: postrelll — 02.09.2016 17:05:03 |
Сергей Редькин Пользователь Сообщений: 1 |
#8 19.01.2022 08:58:23 У меня была похожая проблема со вставкой неформатированных значений из ячеек в размеченные закладками места в Word. Ошибки периодически вылазили на этой строке:
Перенос файла шаблона в папку шаблонов по умолчанию не помог. Насколько понимаю проблемы возникают при вызове функций Word из VBA, запущенном в Excel, но до конца в причинах я так и не разобрался. Заменил Copy/Paste на вставку значения текстовой переменной. Самое интересное, что один Selection.Copy / Selection.PasteAndFormat (wdFormatPlainText) в самом конце макроса работает корректно, но как только вставляю в макрос несколько — вылазят ошибки.
Изменено: Сергей Редькин — 19.01.2022 10:39:43 |
||||
- Remove From My Forums
-
Вопрос
-
Здравствуйте!
Подскажите в чем ошибка. пытаюсь сделать в форме кнопку при нажатии которой должен открыться документ в Word.
при нажатии появляется ошибка «Compile error: User defined — type not defined» и выделяется строчка
Code Snippet
Dim app As Word.Application
в другой базе с такой же строчкой все документы открываются. может я не правильно делаю кнопку? как правильно сделать?
Спасибо за помощь, заранее!
Ответы
-
В редакторе VB выберите Tools->References и в открывшемся окне поставьте галку напротив Microsoft Word <версия>
Несмотря на интенсивный поиск в Google, я не могу понять, что в этом не так. Я все еще пропускаю ссылку или что-то в этом роде? Если вы видите, в чем ошибка, я буду вечно благодарен!
Рекомендации:
- Visual Basic для приложений
- Библиотека объектов Microsoft Excel 16.0
- OLE автоматизация
- Библиотека объектов Microsoft Office 16.0
- RefEdit Control
- Библиотека объектов Microsoft Word 16.0
Переменные:
Public appWord As Word.Application
Public sapmWord As Word.Document
Dim asNimi As String 'in this current sub
Код:
On Error Resume Next
Set appWord = GetObject(, "Word.Application")
If Err <> 0 Then
Set appWord = CreateObject("Word.Application")
End If
On Error GoTo 0
appWord.Visible = True
Set sapmWord = appWord.documents.Open("C:ThisIsWorkingandDocOpens.docx")
'sapmWord.Activate 'doesn't make a difference
With sapmWord
Selection.EndKey Unit = wdStory 'this line is first line to give an error. With or without a dot in the beginning of line.
Selection.TypeText Text:=asNimi 'this line too, if previous is commented
'...and so on!
End With
sapmWord.Close savechanges:=True
Set appWord = Nothing
Set sapmWord = Nothing
Ответы
4
Чтобы использовать With, вы должны ссылаться на участников с .:
With sapmWord
.Selection.EndKey Unit = wdStory
.Selection.TypeText Text:=asNimi
End With
SapmWord — это текстовый документ. Текстовый документ не имеет метода selection. Он есть в объекте приложения Word, так что, вероятно, вы имеете в виду (и да, вам нужен ‘.’)
With appWord
.Selection.EndKey Unit:= wdStory
.Selection.TypeText Text:=asNimi
'...and so on!
End With
В конце концов, мне ничего не оставалось, как добавить закладки в документ Word и заполнить их VBA. Я до сих пор не понимаю, почему эти исходные коды не работали в моем коде, хотя они работают для других. Спасибо всем за помощь, может быть, кто-то еще получит здесь ответы.
Вам необходимо изменить sapmWord.Close savechanges: = True для appWord.quit savechanges: = True
Другие вопросы по теме
Option Explicit
Dim appWord As Word.Application
Dim docWord As Word.Document
Dim i As Integer
Private Sub cmdStep1_Click()
If appWord.Documents.Count = 0 Then
Set docWord = appWord.Documents.Add
End If
Call InsertTable
End Sub
Private Sub cmdStep2_Click()
If appWord.Documents.Count = 0 Then
MsgBox «Run step 1, then step2.»
Else
Call InsertTable
End If
End Sub
Private Sub cmdQuit_Click()
Unload Me
End Sub
Private Sub Form_Load()
Set appWord = New Word.Application
appWord.Visible = False
i = 1
End Sub
Sub InsertTable()
Dim rngCurrent As Word.Range
Dim objTable As Word.Table
docWord.PageSetup.LeftMargin = 60
Set rngCurrent = docWord.Range
With rngCurrent
.InsertParagraphAfter
.Collapse Direction:=wdCollapseEnd
.Text = «Table No. » & CStr(i) & «: TableName»
i = i + 1
.Font.Name = «Times New Roman»
.Font.Size = 14
.Font.Italic = True
.ParagraphFormat.Alignment = wdAlignParagraphLeft
End With
Set rngCurrent = docWord.Range
With rngCurrent
.InsertParagraphAfter
.Collapse Direction:=wdCollapseEnd
End With
Set objTable = docWord.Tables.Add(Range:=rngCurrent, NumRows:=4, NumColumns:=15)
With objTable
.Borders.Enable = True
.Rows.Height = 10
.Columns(1).Width = CentimetersToPoints(1.04)
.Columns(2).Width = CentimetersToPoints(2.33)
.Columns(3).Width = CentimetersToPoints(1.06)
.Columns(4).Width = CentimetersToPoints(1.16)
.Columns(5).Width = CentimetersToPoints(1.16)
.Columns(6).Width = CentimetersToPoints(1.06)
.Columns(7).Width = CentimetersToPoints(1.06)
.Columns(8).Width = CentimetersToPoints(1.47)
.Columns(9).Width = CentimetersToPoints(1.69)
.Columns(10).Width = CentimetersToPoints(1.07)
.Columns(11).Width = CentimetersToPoints(1.07)
.Columns(12).Width = CentimetersToPoints(1.07)
.Columns(13).Width = CentimetersToPoints(1.07)
.Columns(14).Width = CentimetersToPoints(1.2)
.Columns(15).Width = CentimetersToPoints(1.2)
End With
appWord.Visible = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
If docWord Is Nothing Then
appWord.Quit wdDoNotSaveChanges
Set appWord = Nothing
Exit Sub
End If
If docWord.Saved Then
docWord.Close wdDoNotSaveChanges
Set docWord = Nothing
appWord.Quit wdDoNotSaveChanges
Set appWord = Nothing
Else
MsgBox «Save changes before quit.»
Cancel = True
End If
End Sub
Здравствуйте, друзья! Столкнулся с такой проблемой — сделал простенькую базу в Access 2007 (mdb) в которой хранится список литературы. В базе форма с парой окон для отображения содержимого записи и кнопка «Вставить» при нажатии которой, название выбранной книги вставляется в открытый (активный) документ Word. Реализовал я сию процедуру таким образом:
Visual Basic | ||
|
Ну соответственно подключил библиотеку Вордовскую.
И все вроде работает, да нет-нет, при попытке экспортировать текст в только что открытый документ выдает такую ошибку:
Run-time error ‘462’
The remote server machine does not exist or unavailable
И исчезает она либо после двух-трех нажатий сама, либо после перезапуска базы данных.
Пробовал без создания объекта Word.Application — та же история. Пробовал создавать объект при помощи CreateObject — пишет человечьм (русским) языком, мол ни один документ не открыт, при этом в действительности открытый документ я лицезрею своими глазами…
Причем, абсолютно та же картина при попытке повторить трюк из Excel.
Как с этим бороться ума не приложу! Может кто подскажет?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
I am trying to do some relatively simple copy and pasting from Excel 2007 into Word 2007. I’ve looked through this site and others, and keep getting hung up on the same thing- the third line n the code below keeps giving me the «User type note defined» error msg. I am really confused since I just lifted this from another solution (and had similar issues with other solutions I tried to lift). Could someone please educate me on what is causing the error, and why?
Sub ControlWord()
' **** The line below gives me the error ****
Dim appWD As Word.Application
' Create a new instance of Word & make it visible
Set appWD = CreateObject("Word.Application.12")
appWD.Visible = True
'Find the last row with data in the spreadsheet
FinalRow = Range("A9999").End(xlUp).Row
For i = 1 To FinalRow
' Copy the current row
Worksheets("Sheet1").Rows(i).Copy
' Tell Word to create a new document
appWD.Documents.Add
' Tell Word to paste the contents of the clipboard into the new document
appWD.Selection.Paste
' Save the new document with a sequential file name
appWD.ActiveDocument.SaveAs Filename:="File" & i
' Close this new word document
appWD.ActiveDocument.Close
Next i
' Close the Word application
appWD.Quit
End Sub
SeanC
15.6k5 gold badges45 silver badges65 bronze badges
asked Jul 30, 2012 at 20:13
3
This answer was mentioned in a comment by Tim Williams.
In order to solve this problem, you have to add the Word object library reference to your project.
Inside the Visual Basic Editor
, select Tools
then References
and scroll down the list until you see Microsoft Word 12.0 Object Library
. Check that box and hit Ok
.
From that moment, you should have the auto complete enabled when you type Word.
to confirm the reference was properly set.
answered Jul 1, 2013 at 19:24
ForceMagicForceMagic
6,19012 gold badges66 silver badges88 bronze badges
2
As per What are the differences between using the New keyword and calling CreateObject in Excel VBA?, either
-
use an untyped variable:
Dim appWD as Object appWD = CreateObject("Word.Application")
or
-
Add a reference to
Microsoft Word <version> Object Library
into the VBA project viaTools->References...
, then create a typed variable and initialize it with the VBANew
operator:Dim appWD as New Word.Application
or
Dim appWD as Word.Application <...> Set appWd = New Word.Application
CreateObject
is equivalent toNew
here, it only introduces code redundancy
A typed variable will give you autocomplete.
answered Sep 1, 2017 at 17:27
ivan_pozdeevivan_pozdeev
33.5k17 gold badges105 silver badges150 bronze badges
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
john.9.williams
-
#1
Hi
I am using this daclaration in a program
«Dim Appword As word.application»
when i run my program i get this error assigned to this
«Compile error userdefined type not defined»
I know i have to do something but not sure what, any help greatly
received
Johny
Advertisements
AA2e72E
-
#2
Use:
Set AppWord=CreateObject(«Word.Application»)
OR:
Add the Word object library reference to your project
Bob Phillips
-
#3
Have you created a reference to the Word type library? Go to
Tools>References, scroll down to Microsoft Word, and check it.
Bob Phillips
-
#4
AA2e72E said:
Use:
Set AppWord=CreateObject(«Word.Application»)
You would also need
Dim AppWord As Object
john.9.williams
-
#5
Where would i use the Set appWord = CreateObject(«Word.Application»)
syntax
Harald Staff
Advertisements
Bob Phillips
-
#7
You would do that instead of
Set AppWord = New Word.Application
but note my other post.
—
HTH
RP
(remove nothere from the email address if mailing direct)
Tom Ogilvy
Advertisements
Chip Pearson
-
#9
You need to set a reference to the Word object library. In VBA,
go to the Tools menu, choose References, and scroll down to
Microsoft Word. Check that box.
—
Cordially,
Chip Pearson
Microsoft MVP — Excel
Pearson Software Consulting, LLC
www.cpearson.com
Want to reply to this thread or ask your own question?
You’ll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.
Ask a Question