Most Valuable Professional

View Jan Karel Pieterse's profile on LinkedIn subscribe to rss feed
Subscribe in a reader

Subscribe to our mailing list

* indicates required

Audit !!!

Check out our RefTreeAnalyser
the ultimate Excel formula auditing tool.


Excel VBA Masterclass (English)
Excel VBA for Financials (Dutch)

Third party tools

Speed up your file

The best tool to optimise your Excel model!

What has changed?

PerfectXL Compare, for Spreadsheet Comparison
This Excel compare tool is fast, reliable, and easy to use. Compare two Excel files now and see for yourself!
Home > English site > Articles > Object Lister

Listing an Objects Properties and Methods


If you do some VBA programming regularly, you'll be acquainted with the Object browser, which neatly shows you all objects, properties and methods belonging to any object in Excel (or any other library you have referenced in your VBA project).

Whilst this is a tremendous tool to look for information on just a couple of properties I find it not very handy when you e.g. need to get all of an objects properties into your VBA code.

So because I like a challenge I decided to build my own object browser, which is shown to you here.

What does it do?

This tool uses the tlbinf32.dll to fetch data from typelibraries. I grabbed some code from various places (amongst which Chip Pearson's great site and some newsgroup messages like this one) and created a userform with a treeview control (because this is the type of control that can show hierarchical information so nicely).

The help files of tlbinf32.dll can be downloaded here: and the dll can be found here (not sure if you can use the download at will without any licensing issues though).

After downloading the dll it needs to be registered with windows:

Click Start, run and type:

regsvr32 c:\YourPathToThedll\tlbinf32.dll

Click OK. If successful, Windows will tell you it successfully registered the dll.

In its basic state, you select any object in Excel and start the tool, which will show you the first level set of objects, properties and methods of that selection. Here is what the UI looks like after starting the tool whilst you have a chart title selected:

Tool's main window, showing members of a ChartTitle object

And here is the same window after expanding two of the object's members:

Main window after double clicking "Border" and "Font" objects.

As you can see, it is really easy to get a list of all objects and properties of an object.

What's even better is that you can get them into Excel easily. Clicking the "Report" button yields a list of all objects in the current display. Below a portion of those is shown:

Result of clicking "Report".

You can imagine that now it is easy to copy this and paste it into the VBE to quickly create code that sets a lot of properties.


I have made this tool available for download:


All comments about this page:

Comment by: chead5 (14-5-2007 07:06:34)

I seem to be missing the required dll that you mentiuoned in this article. Does anyone know where I can get a good copy of it?


Comment by: Dianne Butterworth (14-5-2007 08:06:40)

It looks like tlbinf32.dll might be a file installed with Visual Basic 6; it's not on my system.

The tool is a great idea though.


Comment by: Jan Karel Pieterse (14-5-2007 09:20:39)

Hi Dianne,

You're right of course. I have updated the text to add a download link to the tlbinf32.dll. I'm not entirely sure whether this download is permitted though.

Jan Karel


Comment by: Pascal (16-5-2007 07:47:51)


When I came across this page I recognised the potential usefulness of such a utility. You don't mind my adding it to my StumbleUpon firefox extension?

I only get this:
[attempted to paste capture of window here, can't so it's here: ]
It shows only this:

i.e. only a comma below 'ChartTitle'.
'Expand this' after highlighting it has no effect. Nor has any other button.
I have downloaded and properly placed tlbinf32.dll in c:\windows\system32 and it is seen as 'TypeLib information' in Tools|References in VBE.
I tried 'Show Help' but nothing happens. Does TlbInf32.chm need placing somewhere specific?

Thanks, Pascal


Comment by: Jan Karel Pieterse (16-5-2007 08:39:08)

Hi Pascal,

The fact that you can even run the tool indicates the tlbinf32.dll is found by Excel, so no problem there.

What happens if you select -say- a cell?

The chm file only contains help about the dll, pressing help should render help about the Excel object and does NOT require the chm file of the tlbinf32.


Comment by: Graham (16-5-2007 09:23:02)

Looks great Jan - is there a way of running this on Excel 2007?


Comment by: Pascal (16-5-2007 09:56:32)

Just the same except instead of 'ChartTitle', I get 'Range'


Comment by: Jan Karel Pieterse (17-5-2007 02:01:09)

Graham: It works for me. You do have the dll setup, right?


Comment by: Jan Karel Pieterse (17-5-2007 02:02:23)

Pascal: No idea what gives, sorry. Maybe it needs "Trust access to visual basic projects" set? (tools, macro, security, trusted sources tab)


Comment by: Nick Hebb (18-5-2007 05:25:28)


Thank you for this great tool. It will save me hours of time on a current project.

Version 4 suggestion: Add a option to exclude Parent from the Expand feature. It takes a while to expand, and I'm guessing that a good chunk of the time is for the Parent properties, which most users of the tool probably wouldn't be interested in.


Comment by: Jan Karel Pieterse (18-5-2007 06:37:33)

Hi Nick,

You're welcome. As for the parent object: It should step over that one, might be I disabled a relevant piece of the code in troubleshooting other stuff <smile>


Comment by: xMRG (21-5-2007 23:13:01)

I get the same error as Pascal.

I commented out the On Error Resume Next line in Sub IterateMembers(). The following error is generated when selecting the Chart Object and pressing Ctrl + Alt + o.

Simple Object Browser: Error message

Oops, An error has occurred in Simple Object Browser
Error 429: ActiveX component can't create object in IterateMembers.Class Module clsAnalyseObject

Don't know if this helps identify why this tool does not work for Pascal and me.


Comment by: Jan Karel Pieterse (22-5-2007 02:51:40)

Hi Pascal and xMRG,

The problem seems to indicate the tlbinf32.dll has not been properly set up.


Comment by: PM (22-5-2007 08:02:09)

To solve the problem with tlbinf32.dll and error 429, fire up the command prompt and enter the following line:
regsvr32 c:\windows\system32\tlbinf32.dll

A popup window should open saying:
DllRegisterServer in c:\windows\system32\tlbinf32.dll succeeded.

That's it.


Comment by: xMRG (22-5-2007 09:37:30)

Looks great! I got it to work.

Pascal, do this
Go to the Start menu and select Run
Type the following line into the ComboBox
regsvr32 tlbinf32.dll
Press Ok and it should work.

BTW, I put the tlbinf32.dll in

Hope this helps.


Comment by: Jan Karel Pieterse (22-5-2007 10:07:45)

Hi xMRG, Pascal,

Thanks for sharing the solution guys.
I had planned to add this information but you guys beat me to it!


Comment by: Jim McClelland (24-5-2007 14:57:23)

I am struggling with an issue which seems related to this thread. I am trying to determine a simple way to assign an object to another object. IOW, I'd like to copy all of the properties of one object to another one. For example, in VBA, copying the guts of one "FormatCondition" object to a new FormatCondition. Have any of you encountered this issue before?


Comment by: Jan Karel Pieterse (24-5-2007 21:22:19)

Hi Jim,

Yes I have and the tool is very useful for that. You must however do this manually.
Open the module modMain and modify this line in StartForm:

Set .ObjectToList = Selection
Set .ObjectToList = Selection.FormatConditions(1)

Select any cell with a CF and run the ObjectLister tool.

Expand the found list down to its deepest level (2 I think) and click report.
From there you can use Excel formulas to build your code.


Comment by: Troy (17-12-2007 07:44:05)

Incredible tool! This was obviously a huge amount of work!

However, I don't see the methods (e.g. Range.Activate; or Range.Columns.Autofit)???


Comment by: Jan Karel Pieterse (17-12-2007 11:32:38)

Hi Troy,

Indeed, it only shows properties and sub-objects. Methods are omitted. Shouldn't be very hard to add though.

I'll leave that as an exercise for you :-)


Comment by: Dean (8-1-2008 19:59:35)

Great piece of kit. Infinitely useful when trying to track down tricky properties.


Comment by: Hal (16-2-2008 17:04:15)

Is there a virus in ObjectLister 003.xls


While running control-alt-O after selecting your demo chart, and auto expanding to the maximum depth (5?) I found the code after a couple of minutes elicited symptoms of a virus (?)that was trapped by Outlook warning me that a program was trying to read the address book.


Comment by: Jan karel Pieterse (17-2-2008 03:59:48)

Hi Hal,

I just checked Objectlister 32 using Nod32:

Scanned disks, folders and files: C:\data\ObjectLister\ObjectLister 003.xls
Number of threats found: 0


Comment by: Eric (14-3-2008 15:25:40)

Excellent work, once again.

Is there an Object that corresponds to current Watches in the VBE?

If there was, I'd like to change (in my copy) "Selection" in the "Set .ObjectToList = Selection" line to whatever it would be. Of course, I could do it one-by-one, but it would be more convenient if there was a Watches object.


Comment by: Jan karel Pieterse (16-3-2008 22:13:37)

Hi Eric,

No, I don't think there is.


Comment by: Bruno (16-5-2008 12:56:08)

Hallo Jan,

a really wonderful tool - it works perfect on the Excel-sheet and helps to save a lot
of time. Many thanks for your work!

Does there exist a similar tool for the VBE-objects of a userform?


Comment by: Jan Karel Pieterse (18-5-2008 03:12:49)

Hi bruno,

No, but you do not need a separate tool. You can insert a userform in the
objectlister VBAProject with just one control (the one you want listed) and change
the routine in modMain like this:

Change this line:
        Set .ObjectToList = Selection
        Set .ObjectToList = UserForm1.Controls(1)


Comment by: Bruno (18-5-2008 15:00:20)

Hello Jan,
many thanks for your help.
I have tried your instructions with the sample userform1 within your object lister
Project and changed the above mentioned line. I started "startform", but it produces
the following error:
Error -2147024809; UngĂĽltiges Argument in Startform.Module.modMain

and the procedure stopped in the changed line.
Do you have any idea?
At the moment it would be very helpful for me, because Excel produced an error in my
program (the exit-event will not be fired anymore in my existing userforms), so i
have to build them again).
Greetings from the Allgäu


Comment by: Jan Karel Pieterse (18-5-2008 23:58:35)

Hi Bruno,

Sorry, I did not test the code. This does work with a commandbutton called
CommandButton1 on the form called Userform1:

        Set .ObjectToList = UserForm1.CommandButton1


Comment by: Go (5-3-2009 19:17:20)


i'm rookie in this vb things, it's very confusing. From your creation here, does it use only for charting? what about other objects and their properties? can i get the explanation of them (so it would not just a list)?

very appreciate what you've done


Comment by: Jan Karel Pieterse (6-3-2009 02:40:42)

Hi Go,

To be honest I don't think this utility is the best place to start learning VBA. Excel VBA Help is a better place to start and the object browser (F2 from the editor) is also a good resource.
Also, I'd avise you to go to the library and get yourself a good book on VBA. For beginners, the dummies series are a good start.


Comment by: Narendra (26-6-2009 01:48:19)

I see that Articles on your page are split in Steps by Step Procedures, each located on a different page.
It will be better to use a "one page per article" concept.

For browsing on a long page one can always use, tags/bookmarks & "Back to Top" at each topic end.

Just a suggestion.



Comment by: Jan Karel Pieterse (26-6-2009 04:01:27)

Hi Narendra,

Thanks for your comment.
There is something to say for either method. Personally I prefer shorter pages (in general) over long pages with bookmarks. And short pages load faster.


Comment by: Mark Aldous (22-7-2009 04:12:06)

your sample app is almost perfect for my needs, but there is one extra bit I am trying to figure out. As part of the development process of my app I want to report to a log file the names and values of properties of numerous classes. This is all working well until the class contains a collection of another class. Can you give some advice on how to get the objects from the collection and add them to log.

Below is my code for now
many thanks

Public Function GetObjectProperties_v2(ByVal Obj As Object) As String
Dim cObjAnalyser As clsAnalyseObject
Dim cFoundMember As clsFoundMember
Dim sReturn As String

sReturn = vbNullString

Set cObjAnalyser = New clsAnalyseObject
With cObjAnalyser
    Set .ObjectToList = Obj
    .Root = True
    .IgnoreParentAndApplication = True
End With

If Not cObjAnalyser.PropsAndObjects Is Nothing Then
     For Each cFoundMember In cObjAnalyser.PropsAndObjects
         If cFoundMember.IsObjectOrCollection Then
            sReturn = sReturn & " <" & cFoundMember.Name & "(" & CStr(cFoundMember.TypeName) & ")" & ">"
            Debug.Print cFoundMember.Name & "(" & CStr(cFoundMember.TypeName) & ")" & ">"
            ' now I need to get child objects from the collection and report the properties for each object
            sReturn = sReturn & " <" & cFoundMember.Name & "=" & CStr(cFoundMember.value) & ">"
            Debug.Print vbTab & cFoundMember.Name & "=" & CStr(cFoundMember.value) & ">"
         End If
End If
End Function


Comment by: Jan Karel Pieterse (22-7-2009 05:17:38)

Hi Mark,

Not sure if this will work, but you might try recursing the function and adding an optional argument which adds some text if the function has been used recursively:

Public Function GetObjectProperties_v2(ByVal Obj As Object, Optional sText2Add As String = "") As String
    Dim cObjAnalyser As clsAnalyseObject
    Dim cFoundMember As clsFoundMember
    Dim sReturn As String

    sReturn = vbNullString

    Set cObjAnalyser = New clsAnalyseObject
    With cObjAnalyser
        Set .ObjectToList = Obj
        .Root = True
        .IgnoreParentAndApplication = True
    End With

    If Not cObjAnalyser.PropsAndObjects Is Nothing Then
        For Each cFoundMember In cObjAnalyser.PropsAndObjects

            If cFoundMember.IsObjectOrCollection Then
                sReturn = sReturn & " <" & cFoundMember.Name & "(" & CStr(cFoundMember.TypeName) & ")" & ">"
                Debug.Print cFoundMember.Name & "(" & CStr(cFoundMember.TypeName) & ")" & ">"
                If cFoundMember Is Collection Then    '<-----please check, this may be wrong!
                    GetObjectProperties_v2 cFoundMember, sText2Add & " " & cFoundMember.Name & ":"
                End If
                ' now I need to get child objects from the collection
                ' and report the properties for each object

                sReturn = sReturn & " <" & cFoundMember.Name & "=" & CStr(cFoundMember.Value) & ">"
                Debug.Print vbTab & cFoundMember.Name & "=" & CStr(cFoundMember.Value) & ">"
            End If
    End If

End Function


Comment by: Mark Aldous (22-7-2009 06:15:39)

Hi Jan,
thanks for the reply.

I changed your class (clsAnalyseObject) so that it returned "_Collection" for the type name (cFoundMember.TypeName = mMember.ReturnType.TypeInfo.Name).

Unfortunately when I then tried to call it recursively it was sending through the cFoundMember object not the child object of the collection.

A simple example of what I am trying to read is as follows.


For now I am going to call the objects in the child collections through type specific subs. I will try to investigate further at a later date and let you know of any progress.

many thanks


Comment by: Stephen (4-8-2009 07:53:16)

What are the prerequsities for this to run? I had it running on Windows XP SP3 but after I reimaged my machine it no longer works. I receive the a compile error, "Can't find project or library" at the subroutine, "Private Sub AddObjectToTree(oObj As Object, nNodeToAdd2 As MSComctlLib.Node, bRoot As Boolean, IgnoreParentAndApp As Boolean)".


Comment by: Jan Karel Pieterse (7-9-2009 08:59:55)

Hi Stephen,

See the "What does it do" section for instructions on what you need to make it work.


Comment by: prasuraRaprit (9-4-2011 12:51:55)

Use the Move tool (V) to move it off into the bottom-left corner.


Comment by: Rob Manner (24-5-2012 15:17:12)


I am fascinated by this Object Browser, but can't get it to work in Excel 2010 with Windows 7. I have installed DLL and all, but wanted to check with you first before providing error messages etc., as it looks like there have not been any comments in a long while. Perhaps the browser is no longer maintained.

Many thanks,



Comment by: Jan Karel Pieterse (25-5-2012 01:59:45)

Hi Michael,

The site is still very much alive, it is just that this particular page isn't commmented on much.

I wouldn't know why the tool doesn't work for you, please send me a direct email with some screenshots, so we can have a look.


Comment by: Walter, Rauschenberger (29-5-2012 18:54:53)

Hi Michael,

I was looking for pretty much the same but a bit simplier so that I can use it directly in my project for analysing one specific object on a user form. I am wondering how I can achieve this with your solution. I.e. the output (property and value) with Debug.Print would be the means of choice.
Do you see any chance to change yor solution so that it works without the userform and it does not write the result to a worksheet?

Best regards


Comment by: Jan Karel Pieterse (30-5-2012 07:01:48)

Hi Walter,

If you look at the sub called "AddObject2Tree" you can see how the class module that handles the listing of an object is put to use. You can easily copy out this sub to a normal module and adjust it so it lists them in the immediate pane.


Comment by: Jan Karel Pieterse (30-5-2012 07:07:26)

Hi Walter,

If you look at the sub called "AddObject2Tree" you can see how the class module that handles the listing of an object is put to use. You can easily copy out this sub to a normal module and adjust it so it lists them in the immediate pane.


Comment by: juwen (7-6-2012 11:02:22)


My download file in this:
the tlbinf32.dll be registered with windows is successfully.

open the ObjectList 003.xls and hit ctrl+alt+o have show Run-time error:'13' Type Mismatch”

office 2010 in windows 7 to run the ObjectList 003.xls file


Comment by: Jan Karel Pieterse (7-6-2012 14:13:23)

Hi Juwen,

Two questions:

1. Which object was selected when you pressed the shortcut key?

2. Which line of cod eis highlighted if you click Debug?


Comment by: juwen (8-6-2012 02:48:27)


How to select an object?

Can you tell my how to use ObjectList 003.xls?


Comment by: Jan Karel Pieterse (8-6-2012 12:00:04)

Hi Juwen,

You select an object by just clicking on it in Excel. Then use the short-cut key menitoned in the tool.
Of course you have to download and register the tlbinf32.dll first, like I described above.


Comment by: juwen (9-6-2012 03:52:53)

Hi Jan,

1. I don't know which object I have to select.
Can you give me a specific example, please?

2. When I click Debug,the line of codeis highlighted is
"Set vReturn = tliApp.InvokeHook(ObjectToList, mMember.MemberId, INVOKE_PROPERTYGET)" in sub IterateMembers


Comment by: Jan Karel Pieterse (9-6-2012 20:58:16)

Hi Juwen,

You select the object (in Excel) from which you want to show the properties.


Comment by: Young7 (6-2-2013 04:22:06)

Thank you very much for this tool!
I know the tool is set up to work on visible objects, but I modified it to work with other (invisible) objects.

For example, let’s say I set “test” to “Internetexplorer.application”… I can send that object to your tool and it shows me the properties. Very cool!

You have me wondering if I can use this in VB6 also. This tool displays needed information in a very useful format.

I just changed your “StartForm” routine to accept an object. I also changed the “Set.objectToList=selection” to set.objecttolist=obj (the object I send it).

Excellent work!


Comment by: Joe Anderson (22-6-2013 02:07:53)

I used your ObjectLister extensively with Windows Vista. I now have Windows 7 with Excel 2010 and cannot get ObjectLister to work. I get a compile error: "Method or data member not found" on this line of the Sub StartForm:


Have tried lots of different things, un-/re-register DLL, etc. but am stumped.

Yours is a great tool, which I hope to continue to use. I would be grateful for any advice.



Comment by: Jan Karel Pieterse (24-6-2013 13:38:26)

Hi Joe,

Hard to say what's wrong, most likely the dll has not been properly registered. You may have to also change the references in the VBA project of the Excel demo file I created to make sure it points to the installed dll.
I expect you'll have to run the registration as an administrator to make it "stick".


Comment by: Gomel (10-7-2013 22:01:53)

Hello, do you have same project for powerpoint 2010 64bit?


Comment by: Jan Karel Pieterse (11-7-2013 21:18:52)

Hi Gomel,

Not needed. You can add a reference to the Powerpoint object model in Excel VBA and then set an object variable to the object you want to look at. But you also need to start PPT form Excel VBA and make sure that object in question is in the current presentation, so you can actually set the object variable to that item.


Comment by: PJ in FL (17-3-2014 16:04:25)

Just a note to say I had difficulty downloading the DLL from the link provided.

However, the file is included in the COM Add-In Installer package downloadable from Chip Pearson's "Creating A COM Add-In In Visual Basic 6" page, located at this link address:

Personally, I cringe when I need to download a DLL or other active component from a location I don't know, so finding the file on Chip's site was a welcome relief!


Comment by: George Skelton (25-5-2014 16:56:12)

Hi, I'm trying to get this working with 64-bit Excel on Windows 7 Excel 2010. I have tlbinf32.dll saved in C:\Windows\System32, I run regsvr32 from there and get "DllRegisterServer in TLBINF32.DLL succeeded". However when I try to add the Reference in VBA, I browse, select the dll and click open but it won't appear in the Available References list with a checkmark (but there is no error message).

If on the other hand I put tlbinf32.dl in C:\Windows\SysWOW64 and register it there, then I can add the reference but when I try to use it I get Run-time error '429': ActiveX component can't create object


Comment by: Jan Karel Pieterse (25-5-2014 17:00:20)

Hi John,

The tlbinf32.dll is 32 bit, which means it will not work with 64 bit Office I'm afraid.


Comment by: Lisa Green (2-4-2015 16:48:03)

Hi Jan Karel,

I'm trying to use this to show a UserForms properties.

Is that possible please?



Comment by: Jan Karel Pieterse (3-4-2015 16:23:50)

Hi Lisa,

Odd enough I cannot get it to list properties and methods of a userform. I tried:

        Set .ObjectToList = ThisWorkbook.VBProject.VBComponents("ufObjBrowser")

to no avail.

This also does not really give anything helpful:

    Dim uf As ufObjBrowser
    Set uf = New ufObjBrowser
'other code
        Set .ObjectToList = uf

However, as soon as I pass a control I get the associated properties:

    Dim uf As ufObjBrowser
    Set uf = New ufObjBrowser
'other code
        Set .ObjectToList = uf.cmbClose


Comment by: Lisa Green (3-4-2015 18:37:51)

Thanks for trying Jan Karel...

Did you get the properties for the userform or the command button?

My aim is to get a list of built in events and then use your performance code in each to log performance and to tell which events fire when.



Comment by: Jan Karel Pieterse (3-4-2015 19:25:15)

Hi Lisa,

No just the control properties. As far as I recall, the object lister ignores events.


Comment by: Lisa Green (3-4-2015 22:28:28)

I'm wondering if it's a problem with "windows"... AFAIK an object like a command button is actually a window while a userform is contained within a window... and no... I'm not sure about what I'm saying!!! :-)

Shame about not listing events... Googling and following links for a loooooooong time is't helping.. :-( I've managed to get lists of events from various sites but some of the lists miss some events that I know exist and some include events I know... I think I know.. are spurious.

It seems the best way so far is to go to the VBE and womanually write down the events from a drop down box!!!

It's an old story I think Jan Karel... They're somewhere ... otherwise the listbox would be up the spout... ut where!!???



Comment by: Jan Karel Pieterse (5-4-2015 15:04:46)

Hi Lisa,

I'm afraid that is the only way I see right now.


Comment by: shg (11-11-2015 20:47:39)

Jan Karel,

After copying the dll, when I run regsvr32 C:\Windows\System32\TLBINF32.DLL, I get

The module "C:\Windows\System32\TLBINF32.DLL" failed to load. Make sure the binary is stored at the specified path [it is] ... The specified module could not be found."

W7 64 bit, Excel 2010 32 bit.

Is it obvious what I'm fat-fingering?


Comment by: Jan Karel Pieterse (12-11-2015 11:03:50)

Hi shg,

To be honest, I haven't touched this in a long time and I forgot how I set this up on my system! The file itself is both in my Documents folder somewhere and in the C:\Windows\SysWOW64 folder and it works as expected so I guess I somehow managed to register the dll successfully.
Perhaps registering it from the C:\Windows\SysWOW64 folder should work (remember to run cmd as an admin!)


Comment by: shg (12-11-2015 16:58:37)

I will try that, thank you.


Comment by: David Miley (1-6-2019 17:46:00)

Will this work on custom objects (i.e. classes that I have created)?


Comment by: Jan Karel Pieterse (3-6-2019 09:38:00)

Hi David,

I don't know, perhaps you should just try?


Have a question, comment or suggestion? Then please use this form.

If your question is not directly related to this web page, but rather a more general "How do I do this" Excel question, then I advise you to ask your question here:

Please enter your name (required):

Your e-mail address (optional, will only be used to inform you when your comment is published or to respond to your question directly):

Your request or comment (max 2000 characters):

To post VBA code in your comment, use [VB] tags, like this: [VB]Code goes here[/VB].

I give permission to process this data and display my name and my comment on this website accoring to our Privacy Policy.