I’m getting the above error when trying to execute this macros. I’m pretty new to Macros and coding in general so please forgive the ignorance.
Sub DeleteEmptyRows()
Dim oTable As Table, oRow As Row, _
TextInRow As Boolean, i As Long
Application.ScreenUpdating = False
For Each oTable In ActiveDocument.Tables
For Each oRow In oTable.Rows
TextInRow = False
For i = 2 To oRow.Cells.Count
If Len(oRow.Cells(i).Range.Text) > 2 Then
'end of cell marker is actually 2 characters
TextInRow = True
Exit For
End If
Next
If TextInRow = False Then
oRow.Delete
End If
Next
Next
Application.ScreenUpdating = True
End Sub
![]()
Adrian Mole
47.9k138 gold badges48 silver badges78 bronze badges
asked Jun 17, 2014 at 10:34
3
Your error is caused by these:
Dim oTable As Table, oRow As Row,
These types, Table and Row are not variable types native to Excel. You can resolve this in one of two ways:
- Include a reference to the Microsoft Word object model. Do this from Tools | References, then add reference to MS Word. While not strictly necessary, you may like to fully qualify the objects like
Dim oTable as Word.Table, oRow as Word.Row. This is called early-binding.
- Alternatively, to use late-binding method, you must declare the objects as generic
Objecttype:Dim oTable as Object, oRow as Object. With this method, you do not need to add the reference to Word, but you also lose the intellisense assistance in the VBE.
I have not tested your code but I suspect ActiveDocument won’t work in Excel with method #2, unless you properly scope it to an instance of a Word.Application object. I don’t see that anywhere in the code you have provided. An example would be like:
Sub DeleteEmptyRows()
Dim wdApp as Object
Dim oTable As Object, As Object, _
TextInRow As Boolean, i As Long
Set wdApp = GetObject(,"Word.Application")
Application.ScreenUpdating = False
For Each oTable In wdApp.ActiveDocument.Tables
answered Jun 17, 2014 at 12:09
![]()
David ZemensDavid Zemens
52.7k11 gold badges79 silver badges129 bronze badges
0
I am late for the party. Try replacing as below, mine worked perfectly-
«DOMDocument» to «MSXML2.DOMDocument60»
«XMLHTTP» to «MSXML2.XMLHTTP60»
answered May 2, 2019 at 15:38
Sub DeleteEmptyRows()
Worksheets("YourSheetName").Activate
On Error Resume Next
Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
The following code will delete all rows on a sheet(YourSheetName) where the content of Column A is blank.
EDIT: User Defined Type Not Defined is caused by «oTable As Table» and «oRow As Row». Replace Table and Row with Object to resolve the error and make it compile.
answered Jun 17, 2014 at 10:51
Olle89Olle89
6687 silver badges22 bronze badges
1

Are you sitting there staring at this error on your VBA screen and getting frustrated? No worries, we shall fix it.
But before deep diving into the root cause and solution to fix this error, let’s understand the correct procedure for using an object in our code. It will ease the debugging process.
For this example, let’s look at a Dictionary object.
Contents
- DICTIONARY in VBA:
- Resolving the Error
-
- Analyze the meaning and “ROOT CAUSE” of the error:
- Solution:
- Method 1
- Method 2
- Video Example
-
DICTIONARY in VBA:
A DICTIONARY is an object similar to the VBA COLLECTION object with the following differences:
- The values of the keys can be updated or changed later and
- The key / item value can easily be checked for existence without completely iterating through all the items. This also helps to retrieve values easily.
If you’re a beginner, just imagine that this object is a real time dictionary where the keys are the words and items are the respective definitions. As in a dictionary, in the VBA object we do not need to iterate through all the keys to find the value of one specific key.
And just like any other object in VBA, we can use a dictionary object by adding the corresponding reference through Tools menu. Declaration and definition of objects can be done through early or late binding methods per the developer’s convenience.
Resolving the Error
The error in the title is a compile time error that is encountered when you compile the code.
Analyze the meaning and “ROOT CAUSE” of the error:
Let us split and read the error to understand it better.
User-defined type | not defined
First, let’s try to understand we have encountered the error because something is
“not defined”.
A possible reason for the error to occur is that you are utilizing the early binding method to declare and define the object, but the required reference has not been added.
Refer to the sample code below to understand the difference between early and late binding.
Late binding:
' Create a dictionary object using the late binding method.
Dim obdict As Object
Set obdict = CreateObject("Scripting.Dictionary")
Early binding:
' Create a dictionary object using the early binding method.
Dim obdict As New Scripting.Dictionary
Solution:
Try one of the following steps to resolve the error:
Method 1
Maybe VBA doesn’t understand that you have defined the object. In VBA, you need to add the respective reference for the object to let the language know that you have properly defined it.
- Goto the menu Tools-> References
- Select the library “Microsoft Scripting Runtime.” (This varies depending on the object used. Here the same dictionary object is considered for explanation purposes
- Click on the “OK” button and close the dialog
- Now you can compile the code and see that the error doesn’t appear anymore

Note: All this is NOT mandatory if you are following “late binding” method.
Method 2
Use the late binding method where you declare a generic object first, then define its type. This does not require any reference.
Syntax:
Dim <variable> As Object
Set <variable> = CreateObject("Scripting.Dictionary")
Example for an Excel sheet object:
Dim ExcelSheet As Object
Set ExcelSheet = CreateObject("Excel.Sheet")
Example for a dictionary object:
'Example of creating a dictionary object
Dim odict As Object
Set odict = CreateObject("Scripting.Dictionary")
Video Example
The video below shows how to resolve the error using each of the two methods above.
|
DO_oK 11 / 11 / 7 Регистрация: 05.11.2011 Сообщений: 87 |
||||
|
1 |
||||
|
08.08.2017, 09:32. Показов 7767. Ответов 11 Метки нет (Все метки)
Привет! Поискал решение, не нашел, давно не обращался за помощью на форум так вот ругается на первую же строчку кода, т.е. на «Sub FSD()». Весь код:
__________________
0 |
|
es geht mir gut 11264 / 4746 / 1183 Регистрация: 27.07.2011 Сообщений: 11,437 |
|
|
08.08.2017, 09:42 |
2 |
|
FSD() Обзови по другому FSD_1 , например.
0 |
|
11 / 11 / 7 Регистрация: 05.11.2011 Сообщений: 87 |
|
|
08.08.2017, 09:45 [ТС] |
3 |
|
Переименовал в FSD_1(), не работает. Вообще от имени не зависит пробовал разные варианты и кириллицу тоже
0 |
|
6874 / 2806 / 533 Регистрация: 19.10.2012 Сообщений: 8,550 |
|
|
08.08.2017, 09:46 |
4 |
|
Библиотека с FileSystemObject подключена?
0 |
|
11 / 11 / 7 Регистрация: 05.11.2011 Сообщений: 87 |
|
|
08.08.2017, 09:50 [ТС] |
5 |
|
Если речь идет об этом то видимо нет. Можно поподробней? Миниатюры
0 |
|
6874 / 2806 / 533 Регистрация: 19.10.2012 Сообщений: 8,550 |
|
|
08.08.2017, 10:17 |
6 |
|
РешениеНайдите и подключите Microsoft scripting runtime scrrun.dll
3 |
|
mobile
26771 / 14450 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
|
08.08.2017, 10:24 |
7 |
|||
|
Библиотека Microsoft Scripting Runtime. Но часто применяют позднее связывание без объявления в референсах: вместо Dim fso As New FileSystemObject пишут
Добавлено через 31 секунду
4 |
|
11 / 11 / 7 Регистрация: 05.11.2011 Сообщений: 87 |
|
|
08.08.2017, 10:25 [ТС] |
8 |
|
Проблема решилась, спасибо! Найдите и подключите Microsoft scripting runtime scrrun.dll
0 |
|
es geht mir gut 11264 / 4746 / 1183 Регистрация: 27.07.2011 Сообщений: 11,437 |
|
|
08.08.2017, 10:29 |
9 |
|
Аппаздал Зато в этом случае ничего не надо подключать .
0 |
|
DO_oK 11 / 11 / 7 Регистрация: 05.11.2011 Сообщений: 87 |
||||
|
09.08.2017, 07:37 [ТС] |
10 |
|||
|
Попробовал так, остается ошибка, не подскажите в чем дело?
0 |
|
6874 / 2806 / 533 Регистрация: 19.10.2012 Сообщений: 8,550 |
|
|
09.08.2017, 08:45 |
11 |
|
Ошибка в TextStream — что это, куда это… никто не знает.
0 |
|
shanemac51 Модератор
11261 / 4592 / 739 Регистрация: 07.08.2010 Сообщений: 13,157 Записей в блоге: 4 |
||||
|
09.08.2017, 09:21 |
12 |
|||
|
у меня заработало, но после исправлений
0 |

Сообщение было отмечено DO_oK как решение
