I am trying to save Word docs using Excel VBA, but I get the error
«ActiveX component can’t create object.»
When I debug, the error comes from the line: Set wrdApps = CreateObject("Word.Application").
It was working, then it started giving me this error.
Sub saveDoc()
Dim i As Integer
For i = 1 To 2661:
Dim fname As String
Dim fpath As String
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
End With
fname = ThisWorkbook.Worksheets(3).Range("H" & i).Value
fpath = ThisWorkbook.Worksheets(3).Range("G" & i).Value
Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = CreateObject("Word.Application")
'the next line copies the active document- the ActiveDocument.FullName
' is important otherwise it will just create a blank document
wrdApps.documents.Add wrdDoc.FullName
Set wrdDoc = wrdApps.documents.Open(ThisWorkbook.Worksheets(3).Range("f" & i).Value)
' do not need the Activate, it will be Activate
wrdApps.Visible = False
' the next line saves the copy to your location and name
wrdDoc.SaveAs "I:YunRTEMP DOC & PDF" & fname
'next line closes the copy leaving you with the original document
wrdDoc.Close
On Error GoTo NextSheet:
NextSheet:
Resume NextSheet2
NextSheet2:
Next i
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
asked Jun 26, 2013 at 18:03
3
I had an issue when upgrading from Windows 7 to 10 when bringing my hoard of VBA scripts with me.
Still not sure what the root cause of the error is, but in the mean time this piece of code worked for me.
This is a workaround that limits the need to have Word (or Outlook/Excel) already in open (manually) state, but should allow your script to run if you have your references set.
Just change "CreateObject(" to "GetObject(, ". This will tell the system to use an already open window.
The complete code to use would be:
Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = GetObject(, "Word.Application")
![]()
answered Jul 11, 2018 at 23:28
![]()
I recently had this happen to some code I had written. Out of nowhere (after running successfully for a few months), I would get the same Runtime Error ‘429’. This happened on two separate computers, the one I wrote and tested the code on months prior and the computer of the person who actually used the tool. It happened even though I used the original file on my machine and the user had been using his copy successfully for a few months, so I’m not convinced two separate files on two separate machines both got corrupted in the same manner. With that being said, I don’t have a good explanation of why this occurred. Mine would happen on a similar line of code:
Dim objFSO as Object
Set objFSO = CreateObj("Scripting.FileSystemObject")
I had the reference to the scripting library included and had done this successfully in the past.
I was able to fix the problem by changing from late to early binding on that object:
Dim objFSO as New Scripting.FileSystemObject
I have been switching everything over to early binding for some time now but this was some legacy code. A nice short little explanation on the difference between the two can be found here:
https://excelmacromastery.com/vba-dictionary/#Early_versus_Late_Binding
I’m not entirely certain why that fixed the problem, but hopefully it will help others in the future with similar issues.
answered Dec 5, 2019 at 16:19
user2731076user2731076
6491 gold badge6 silver badges20 bronze badges
Is wrdDoc initialised? Are you trying to use wrdDoc before the object has been Set?
wrdApps.documents.Add wrdDoc.FullName
Set wrdDoc = wrdApps.documents.Open(ThisWorkbook.Worksheets(3).Range("f" & i).Value)
Should the first line be ActiveDocument.FullName as in the comments? So:
wrdApps.documents.Add ActiveDocument.FullName
answered Sep 30, 2013 at 9:53
0
Check that you have the Microsoft Excel Object Library and the Microsoft Office Object Library ticked in Tools > References and that they have been registered.
If they are ticked, you may need to run Detect and Repair from the Excel Help menu to make sure that the Office installation hasn’t corrupted in any way.
answered Oct 3, 2013 at 10:10
In my case, the workbook appeared to be corrupted. Simply assigning a worksheet to a variable was throwing the error.
Dim ws as Worksheet
Set ws = ThisWorkbook.Worksheets("Data")
The workbook came directly from the client, so I’m not sure what they did with it, or how old it was but all the references appeared to be selected. Every other workbook with the same code was working correctly.
So to resolve the issue I copied the worksheets and modules to a new workbook and it worked without any issues.
Might not always be the best solution, but if you haven’t got any worksheets and modules, then it’s pretty easy.
answered Dec 3, 2019 at 8:31
Try this one.. i’ve encountered this a lot of time…
so I just run my excel by searching it (located on taskbar), then right click then «run as administrator»
or if you already created the excel file, open it from file>open>browse. avoid just double clicking the excel file to open directly.
answered Sep 9, 2018 at 8:49
Summary
When you use the New operator or the CreateObject function in Microsoft Visual Basic to create an instance of a Microsoft Office application, you may receive the following error message:
Run-time error ‘429’: ActiveX component can’t create object
This error occurs when the Component Object Model (COM) cannot create the requested Automation object, and the Automation object is, therefore, unavailable to Visual Basic. This error does not occur on all computers.
This article describes how to diagnose and resolve common problems that may cause this error.
More Information
In Visual Basic, there are several causes of error 429. The error occurs if any of the following conditions is true:
-
There is a mistake in the application.
-
There is a mistake in the system configuration.
-
There is a missing component.
-
There is a damaged component.
To find the cause of the error, isolate the problem. If you receive the «429» error message on a client computer, use the following information to isolate and resolve the error in Microsoft Office applications.
Note Some of the following information may also apply to non-Office COM servers. However, this article assumes that you want to automate Office applications.
Examine the code
Before you troubleshoot the error, try to isolate a single line of code that may be causing the problem.
If you discover that a single line of code may be causing the problem, complete these procedures:
-
Make sure that the code uses explicit object creation.
Problems are easier to identify if they are narrowed down to a single action. For example, look for implicit object creation that’s used as one of the following.
Code sample 1
Application.Documents.Add 'DON'T USE THIS!!
Code sample 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
Both of these code samples use implicit object creation. Microsoft Office Word 2003 does not start until the variable is called at least one time. Because the variable may be called in different parts of the program, the problem may be difficult to locate. It may be difficult to verify that the problem is caused when the Application object is created or when the Document object is created.
Instead, you can make explicit calls to create each object separately, as follows.
Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.AddWhen you make explicit calls to create each object separately, the problem is easier to isolate. This may also make the code easier to read.
-
Use the CreateObject function instead of the New operator when you create an instance of an Office application.
The CreateObject function closely maps the creation process that most Microsoft Visual C++ clients use. The CreateObject function also permits changes in the CLSID of the server between versions. You can use the CreateObject function with early-bound objects and with late-bound objects.
-
Verify that the «ProgID» string that is passed to
CreateObject is correct, and then verify that the «ProgID» string is version independent. For example, use the «Excel.Application» string instead of using the «Excel.Application.8» string. The system that fails may have an older version of Microsoft Office or a newer version of Microsoft Office than the version that you specified in the «ProgID» string. -
Use the Erl command to report the line number of the line of code that does not succeed. This may help you debug applications that cannot run in the IDE. The following code tells you which Automation object cannot be created (Microsoft Word or Microsoft Office Excel 2003):
Dim oWord As Word.Application Dim oExcel As Excel.Application On Error Goto err_handler 1: Set oWord = CreateObject("Word.Application") 2: Set oExcel = CreateObject("Excel.Application") ' ... some other code err_handler: MsgBox "The code failed at line " & Erl, vbCriticalUse the MsgBox function and the line number to track the error.
-
Use late-binding as follows:
Dim oWordApp As Object
Early-bound objects require their custom interfaces to be marshaled across process boundaries. If the custom interface cannot be marshaled during CreateObject or during New, you receive the «429» error message. A late-bound object uses the IDispatch system-defined interface that does not require a custom proxy to be marshaled. Use a late-bound object to verify that this procedure works correctly.
If the problem occurs only when the object is early-bound, the problem is in the server application. Typically, you can reinstall the application as described in the «Examine the Automation Server» section of this article to correct the problem.
Examine the automation server
The most common reason for an error to occur when you use CreateObject or New is a problem that affects the server application. Typically, the configuration of the application or the setup of the application causes the problem. To troubleshoot, use following methods:
-
Verify that the Office application that you want to automate is installed on the local computer. Make sure that you can run the application. To do this, click Start, click
Run, and then try to run the application. If you cannot run the application manually, the application will not work through automation. -
Re-register the application as follows:
-
Click Start, and then click Run.
-
In the Run dialog box, type the path of the server, and then append /RegServer to the end of the line.
-
Click OK.
The application runs silently. The application is re-registered as a COM server.
If the problem occurs because a registry key is missing, these steps typically correct the problem.
-
-
Examine the LocalServer32 key under the CLSID for the application that you want to automate. Make sure that the LocalServer32 key points to the correct location for the application. Make sure that the path name is in a short path (DOS 8.3) format. You do not have to register a server by using a short path name. However, long path names that include embedded spaces may cause problems on some systems.
To examine the path key that is stored for the server, start the Windows Registry Editor, as follows:
-
Click Start, and then click Run.
-
Type regedit, and then click OK.
-
Move to the HKEY_CLASSES_ROOTCLSID key.
The CLSIDs for the registered automation servers on the system are under this key.
-
Use the following values of the CLSID key to find the key that represents the Office application that you want to automate. Examine the LocalServer32 key of the CLSID key for the path.
Office server
CLSID key
Access.Application
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Excel.Application
{00024500-0000-0000-C000-000000000046}
Outlook.Application
{0006F03A-0000-0000-C000-000000000046}
PowerPoint.Application
{91493441-5A91-11CF-8700-00AA0060263B}
Word.Application
{000209FF-0000-0000-C000-000000000046}
-
Check the path to make sure that it matches the actual location of the file.
Note Short path names may seem correct when they are not correct. For example, both Office and Microsoft Internet Explorer (if they are installed in their default locations) have a short path that is similar to C:PROGRA~1MICROS~X (where
X is a number). This name may not initially appear to be a short path name.To determine whether the path is correct, follow these steps:
-
Click Start, and then click Run.
-
Copy the value from the registry, and then paste the value in the Run dialog box.
Note Remove the /automation switch before you run the application.
-
Click OK.
-
Verify that the application runs correctly.
If the application runs after you click OK, the server is registered correctly. If the application does not run after you click OK, replace the value of the LocalServer32 key with the correct path. Use a short path name if you can.
-
-
Test for possible corruption of the Normal.dot template or of the Excel.xlb resource file. Problems may occur when you automate Microsoft Word or Microsoft Excel if either the Normal.dot template in Word or the Excel.xlb resource file in Excel is corrupted. To test these files, search the local hard disks for all instances of Normal.dot or of Excel.xlb.
Note You may find multiple copies of these files. There is one copy of each of these files for each user profile that is installed on the system.
Temporarily rename the Normal.dot files or the Excel.xlb files, and then rerun your automation test. Word and Excel both create these files if they cannot find them. Verify that the code works. If the code works when a new Normal.dot file is created, delete the files that you renamed. These files are corrupted. If the code does not work, you must revert these files to their original file names to save any custom settings that are saved in these files.
-
Run the application under the Administrator account. Office servers require Read/Write access to the registry and to the disk drive. Office servers may not load correctly if your current security settings deny Read/Write access.
Examine the system
System configuration may also cause problems for the creation of out-of-process COM servers. To troubleshoot, use the following methods on the system on which the error occurs:
-
Determine whether the problem occurs with any out-of-process server. If you have an application that uses a particular COM server (such as Word), test a different out-of-process server to make sure that the problem is not occuring in the COM layer itself. If you cannot create an out-of-process COM server on the computer, reinstall the OLE system files as described in the «Reinstalling Microsoft Office» section of this article, or reinstall the operating system to resolve the problem.
-
Examine the version numbers for the OLE system files that manage automation. These files are typically installed as a set. These files must match build numbers. An incorrectly configured setup utility can mistakenly install the files separately. This causes the files to be mismatched. To avoid problems in automation, examine the files to make sure that the files builds are matched.
The automation files are located in the WindowsSystem32 directory. Examine the following files.
File name
Version
Date modified
Asycfilt.dll
10.0.16299.15
September 29, 2017
Ole32.dll
10.0.16299.371
March 29, 2018
Oleaut32.dll
10.0.16299.431
May 3, 2018
Olepro32.dll
10.0.16299.15
September 29, 2017
Stdole2.tlb
3.0.5014
September 29, 2017
To examine the file version, right-click the file in Windows Explorer, and then click Properties. Note the last four digits of the file version (the build number) and the date that the file was last modified. Make sure that these values are the same for all the automation files.
Note The following files are for Windows 10 Version 1709, build 16299.431. These numbers and dates are examples only. Your values may be different.
-
Use the System Configuration utility (Msconfig.exe) to examine the services and system startup for third-party applications that might restrict running code in the Office application
Note Disable the antivirus program only temporarily on a test system that is not connected to the network.
Alternatively, follow these steps in Outlook to disable third-party add-ins:
If this method resolves the problem, contact the third-party antivirus vendor for more information about an update to the antivirus program.
-
On the File menu, click Options, and then click Add-ins.
-
Click Manage COM add-ins, and then click Go.
Note The COM add-ins dialog box opens.
-
Clear the check box for any third-party add-in, and then click OK.
-
Restart Outlook.
-
Reinstall Office
If none of the previous procedures resolve the problem, remove and then reinstall Office.
For more information, see the following Office article:
Download and install or reinstall Office 365 or Office 2016 on a PC or Mac
References
For more information about Office automation and code samples, go to the following Microsoft website:
Getting started with Office development
Need more help?
Want more options?
Explore subscription benefits, browse training courses, learn how to secure your device, and more.
Communities help you ask and answer questions, give feedback, and hear from experts with rich knowledge.
|
ALFA Пользователь Сообщений: 243 |
Всем привет! |
|
Юрий М Модератор Сообщений: 60809 Контакты см. в профиле |
#2 30.09.2014 14:02:30
И где этот файл? |
||
|
Jack Пользователь Сообщений: 352 |
сохранить файл в формате .xlsx |
|
ALFA Пользователь Сообщений: 243 |
Вот если запускать файл уже при открытом приложении Excel, возникает сбой. |
|
Hugo Пользователь Сообщений: 23379 |
Чтоб всё проверить — нужен 2.htm |
|
ALFA Пользователь Сообщений: 243 |
вот он Прикрепленные файлы
|
|
Jack Пользователь Сообщений: 352 |
#7 30.09.2014 18:49:45 а если поменять в коде ЭтаКнига
на
именно на эту строчку иногда ругается |
||||
|
ALFA Пользователь Сообщений: 243 |
1/0 это модальное/не модальное, какое отношение имеет к делу? |
|
Jack Пользователь Сообщений: 352 |
у вас указан параметр showmodal = true. |
|
Юрий М Модератор Сообщений: 60809 Контакты см. в профиле |
Вам предлагают вариант — проверьте. Если ничего не изменится, значит не имеет)) |
|
ALFA Пользователь Сообщений: 243 |
#11 30.09.2014 19:05:06 Ошибка действительно пропала, но окно стало модальным и теперь невозможно выполнить следующее:
На фоне формы отображается эксель. |
||
|
Jack Пользователь Сообщений: 352 |
попробуйте тогда изменить параметр ShowModal в окне свойств юзерформы на False Изменено: Jack — 30.09.2014 19:10:53 |
|
ALFA Пользователь Сообщений: 243 |
|
|
Jack Пользователь Сообщений: 352 |
#14 30.09.2014 19:31:09 потестил.
приложение у меня скрывается. Изменено: Jack — 30.09.2014 19:31:26 |
||
|
ALFA Пользователь Сообщений: 243 |
У меня появляется ошибка, если приложение excel уже запущено(Открыт иной файл) на момент открытия файла, если я ставлю .show 0 то есть ошибка, если ставлю .show 1 то ошибка пропадает и application не скрывается. |
|
Doober Пользователь Сообщений: 2235 |
#16 30.09.2014 23:54:32
Все верно,код выполнится после закрытия формы.
Изменено: Doober — 01.10.2014 02:20:06 |
||||
|
bombowoz Пользователь Сообщений: 6 |
#17 25.11.2019 00:01:28 Доброго времени суток Всем. Год назад написал я макрос для Excel- файла с целью автоматизации деятельности своей и моих коллег. Суть макроса — запуск внешней ЕХЕ программы (самописаной) для получения от прибора данных и последующая интеграция данных в книгу Excel/
Основная проблема в том, что я не понимаю, почему перестало работать то, что полгода работало без проблем. Если-бы админы изменили что-то в политике безопасности, то у всех коллег одновременно перестало-бы работать. А так — через большие промежутки времени. Более того, что такого страшного в строке Где косяк? Почему перестало работать и как всё починить? Может есть другой способ запуска стороннего ЕХЕ-файла с параметрами (консольное приложение написано в CodeBlocks) и обязательным ожиданием ответного кода-завершения от него? (простой Shell не подходит)??? |
||
|
Юрий М Модератор Сообщений: 60809 Контакты см. в профиле |
#18 25.11.2019 00:06:03
А как это соотносится с данной темой (про ActiveX)? |
||
|
Hugo Пользователь Сообщений: 23379 |
Вообще скрипты vbs на этих машинах работают? Потому что бывает что это отключают из соображений безопасности, а как именно это реализовано — я не в курсе, может отключают на корню весь объект. |
|
БМВ Модератор Сообщений: 21679 Excel 2013, 2016 |
#20 25.11.2019 00:37:40
как правило блокируется запуск скрипта пользователем. Я б не стал горячится и отключать объект, так как полно системных скриптов, которые должны выполнятся, хотя бы даже установка принтеров через них сделана. а вот можно ли залочить Shell это вопрос мной не изученный. Как минимум яб проверил работу VBS, других его объектов например https://www.script-coding.com/WSH/FileSystemObject.html а уже потом бы решал. По вопросам из тем форума, личку не читаю. |
||
|
ZVI Пользователь Сообщений: 4340 |
#21 25.11.2019 02:06:52
В проекте установите ссылку на Tools — References — Windows Script Host Object Model и проверьте, работает ли такой код:
Если не работает, то проверьте свои права доступа (правый клик — свойства — Безопасность) на чтение и выполнение для файла C:WindowsSystem32wshom.ocx Изменено: ZVI — 25.11.2019 02:08:59 |
||||
|
bombowoz Пользователь Сообщений: 6 |
#22 25.11.2019 21:43:56
спасибо за участие Изменено: bombowoz — 25.11.2019 21:48:52 |
||
|
БМВ Модератор Сообщений: 21679 Excel 2013, 2016 |
Тут из запасников пришлось достать HTA и там wscript.Shell был , так в чистом виде в 10ке перестал работать, а если конвертить в exe то работает. По вопросам из тем форума, личку не читаю. |
|
bombowoz Пользователь Сообщений: 6 |
-э-э-э-э….. З.Ы.(извините, в VBA/VBS очень слаб, не пинайте ногами) |
|
БМВ Модератор Сообщений: 21679 Excel 2013, 2016 |
bombowoz, hta — ЭТО HTML Application. , то есть приложение которое работает с использованием движка браузера (в нутрях собственно HTML теги и миы или Java script. В чистом виде — означает ,что запускается HTA файл и, видимо, по соображениям безопасности в контенте этого процесса запрещен вызов SHELL, ну дабы зловреды не запустили чего. Блокировки объекта при вызове из VBS, VBA, я не замечал . По вопросам из тем форума, личку не читаю. |
|
bombowoz Пользователь Сообщений: 6 |
#26 26.11.2019 09:24:07
Проверил — работает на всех компах, если в чекбоксе (Tools — References — Windows Script Host Object Model) поставить птичку. Без птички не работает. P.S. А есть альтернатива запуска ЕХЕ помимо WshShell ? (чтобы можно было получать назад код завершения) |
||
|
bedvit Пользователь Сообщений: 2544 Виталий |
#27 26.11.2019 13:50:51
можно скомпилировать не ехе, а dll и запускать из VBA напрямую, не используя сторонние библиотеки. «Бритва Оккама» или «Принцип Калашникова»? |
||
|
ZVI Пользователь Сообщений: 4340 |
#28 26.11.2019 17:16:11
Если птички не жалко, то поставьте ее и используйте такой вариант кода:
Изменено: ZVI — 26.11.2019 17:16:35 |
||||
|
bombowoz Пользователь Сообщений: 6 |
#29 26.11.2019 17:52:51
Спасибо ещё раз — попробую. Отпишусь. |
||
|
bombowoz Пользователь Сообщений: 6 |
#30 27.11.2019 11:09:36 ZVI, — — работает.! |
- Remove From My Forums
-
Question
-
Excel and Access 2013. Windows 10
Excel file that runs the following VB code to pull info from a Access database.
Dim dbmain as DAO.Database
Set dbmain = OpenDatabase(dbpath)
VB codes work fine on multiple Windows 10 machine, but one. I get
«Run-time error ‘429’, ActiveX component can’t create object» on the OpenDatabase line.
Checked VBAProject — References, both the working and non-working machine have the same references check. Ran repair on Office 2013. Still getting the same error. I can browse and open the database manually.
Thanks in advance for your help.
Roget Luo
Answers
-
My suggestion would be to uninstall 64-bit Office and install 32-bit Office.
64-bit Office has far too many incompatibilities and hardly any advantages.
But apart from that, the Microsoft Office 15.0 Access database engine Object Library should work in 64-bit Office.
Regards, Hans Vogelaar (http://www.eileenslounge.com)
-
Marked as answer by
Wednesday, November 1, 2017 6:00 PM
-
Marked as answer by
- Remove From My Forums
-
Question
-
A DLL required by the object can’t be used, either because it can’t be found, or it was found but was corrupted.
Make sure all associated DLLs are available. For example, the Data Access Object (DAO) requires supporting DLLs that vary among platforms. You may have to rerun the setup program for such an object if that is what is causing this error.I am using Windows 10 and Office 2016 Excel visual basic.
How can I make sure all the associated DLLs are available?
How do I rerun the setup program for this object?
I am wishing to run this code:-
I am running windows 10 on notebook 64bit and subscribe to office 2016
Microsoft Excel 16
I get a ‘Run time error 429’
— ActiveX component can’t create object
when I run this code in Excel VBA.
Set objIE = New InternetExplorer
It should open a new instance of Internet Explorer, but the program halts with this error 429. But it appears the whole code doesn’t like the «obj» reference.
Thanks you in anticipation if anyone can help me.
Answers
-
-
Proposed as answer by
Sunday, June 26, 2016 2:58 PM
-
Marked as answer by
David_JunFeng
Monday, June 27, 2016 9:44 AM
-
Proposed as answer by
-
It should be InternetExplorer.Application instead of just InternetExplorer
Really? It get a compile error if I do so:
But when I set a reference to
Microsoft Internet Controls
{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B} 1.1
C:WindowsSysWOW64ieframe.dllthen this code works for me:
Option Explicit Sub Test() Dim objIE As InternetExplorer Set objIE = New InternetExplorer objIE.Visible = True End Sub
IMHO this issue is not related to the code but to windows, resp. the internet explorer itself.
So I suggest the OP should repair the internet explorer:
https://support.microsoft.com/en-us/kb/318378Andreas.
-
Edited by
Andreas Killer
Sunday, June 19, 2016 10:45 AM -
Proposed as answer by
David_JunFeng
Sunday, June 26, 2016 2:58 PM -
Marked as answer by
David_JunFeng
Monday, June 27, 2016 9:44 AM
-
Edited by
-
This code does what you want:
Option Explicit
Sub Test()
Dim ObjIE As ObjectSet ObjIE = CreateObject(«InternetExplorer.Application»)
‘…. (your code) ….
End Sub
Best regards, George
-
Proposed as answer by
David_JunFeng
Sunday, June 26, 2016 2:58 PM -
Marked as answer by
David_JunFeng
Monday, June 27, 2016 9:44 AM
-
Proposed as answer by
