Question

Using VBA Code in .rtf documents

Asked by: ExtremeD

Is there any way at all, that I can run macros/vba code in rich text format?

The reason I ask, is that, I have a database linked to a word document that allows employees to select their names from a dropdown combobox.  Works fine in .doc format, but .rtf it removes all macros.
Unfortunately, the system we use, only supports .rtf and not .doc formats.

Is it possible?

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2008-07-02 at 02:02:54ID23532872
Tags

Microsoft

,

Word

,

2003

Topics

Microsoft Word

,

Access Coding/Macros

,

ActiveX

Participating Experts
1
Points
250
Comments
20

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. VBA f() to use clipboard to get RTF codes for range text
    I need a VBA function which uses the clipboard to get RTF codes for range text e.g. something like: e.g. to get onto clipboard m_oWordPara.Range.Copy now once its on the clipboard, I want retreive the RTF representation of the text into a simple VBA string variable.
  2. RTF and Excel  ???
    Hi Guys, How do I open a RTF file with excel. Please don't tell me to open it with word & export. Doug
  3. RTF with *dynamical* content...
    Hi RTF is a TXT/tag-based format so i thought i would be pretty easy to generate dynamicaly. Actually, it is easy and everything works fine with text data. My only problem is to deal with pictures... Does anyone know how to handle graphic files in order to include'em in an RT...
  4. RTF
    experts, Is there any posible way to count the number of lines on RTF? and if the number of lines achive the defined maximum number of lines it will authomaticaly go to the next page but the same form template. I need this on my ISO documentation.. thanks..
  5. Possible to parse RTF in VBA?
    Is there any way of parsing RTF in VBA? Regards, G.

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: GrahamSkanPosted on 2008-07-02 at 06:13:14ID: 21915971

By design, most macros reside in the document's template which remains attached even if the document is saved as rtf. Make sure that then code is in the template, and that it (or a copy) are accessible by the user.

 

by: ExtremeDPosted on 2008-07-02 at 11:39:12ID: 21919323

Hi Graham - thanks for replying

This is the code I have attached to a combobox within my word document (See code below).

However, whenever I try saving the word document as Rich Text Format, it warns me that all macros will be lost!  It works ok if I save it as .doc format.

Is it possible with .rtf?

Private Sub Document_Open()
 On Error GoTo Document_Open_Err
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=C:\db\Names.mdb"
    rst.Open "SELECT DISTINCT [StaffNames] FROM tblNames ORDER BY [StaffNames];", _
             cnn, adOpenStatic
    rst.MoveFirst
    With Me.ComboBox1
        .Clear
        Do
            .AddItem rst![StaffNames].Value
            rst.MoveNext
        Loop Until rst.EOF
    End With
Document_Open_Exit:
    On Error Resume Next
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Exit Sub
Document_Open_Err:
    MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
    Resume Document_Open_Exit
End Sub

 

by: GrahamSkanPosted on 2008-07-02 at 12:48:32ID: 21919988

The broad intention is that macro code stays in the template. When a new document is created the template is automatically attached and the template components such as styles, toolbars and macros are usable by the document.

If the document has to be moved for further editing, the template or a copy of the same name should be accessible.

Up to this point, rtf-saved files do not differ from those saved in standard format. You just can't add and keep code in the file itself.



 

by: ExtremeDPosted on 2008-07-03 at 01:32:15ID: 21923615

I can understand what you're saying, but, how do I create the template, and how does that link into the .rtf document?  Because, as soon as I save my document as  "whatever.rtf", all the code gets deleted and is then blank and thus my combobox in the document can not access the external database names. (See code above).

 

by: GrahamSkanPosted on 2008-07-03 at 01:58:29ID: 21923720

If there are any, remove all the specialisations from your particular copy of the document. Save your document with the code as a template next to Normal.dot in the User templates folder or in the Workgroup templates folder.  See Tools/Options. File Locations tab for both folders.

You can then use File/New to create a new document from your template. Your new document will automatically be attached to the template and will have the macros available to it, even if it is saved in RTF format.

You can change the attached template of any existing document via Tools/Templates and Add-ins

 

by: ExtremeDPosted on 2008-07-03 at 02:27:44ID: 21923810

Thanks Graham,

I got as far as savining the document as a template in the User Templates Folder and then going to File/New - and then wasn't quite sure what to do.  

So I tried creating a new document and pasted everything from the template to the new document and saved it as .rtf - that didn't work?

 

by: ExtremeDPosted on 2008-07-03 at 02:55:42ID: 21923912

Ok, I understand a bit more now.  I have saved a copy of the document as a template in the User Template Directory.  I then saved the document as .rtf format (Tells me I'll lose all macros).
I then go into that document and into Tools/Templates and Addons and select the template I saved.
However,  the code is not being executed or attached and thus I can't use the external database from the combobox.

Am I doing something wrong?  

 

by: GrahamSkanPosted on 2008-07-03 at 02:56:31ID: 21923916

You should be able to find your template by clicking on the 'On my computer...' link in the 'New Document' task pane that opens on the right,  and choosing from the Templates dialogue that the link opens.

 

by: GrahamSkanPosted on 2008-07-03 at 02:58:40ID: 21923920

Cross-posted, but to emphasise, you won't need to attach a template to any new documents created from the template.

 

by: ExtremeDPosted on 2008-07-03 at 03:12:37ID: 21923967

Ok, it seems to be copying the code across after creating a new document.rtf, but, it's not executing the code?  The code works fine in the .dot format.  It's just not working in the .rt format once it's been created?

 

by: ExtremeDPosted on 2008-07-03 at 04:06:04ID: 21924195

Hi Graham,

Can I send you a copy of everything I have (document.dot, document.rtf and the database).  Perhaps you can work out the problem better than I can?

 

by: GrahamSkanPosted on 2008-07-03 at 13:28:34ID: 21928760

Sorry for the delay. Went out for the day (ended up in Brighton).

Normally you can attach documents here, but it sounds a bit more than usual.
If you want to email them, my address is in my profile.

 

by: ExtremeDPosted on 2008-07-03 at 16:17:24ID: 21930088

Thanks Graham - I have e-mailed you.

 

by: GrahamSkanPosted on 2008-07-04 at 14:35:36ID: 21934990

I have used your files to test the situation.

In fact, as you have found, the Document_Open event only fires if the actual document or template that contains the code is opened.

However, if you put the code into the template's Document_New event, it will run and fill the combo at the time that a document is first created.

If you need it to change the user name later, and want it to run automatically when the document is opened, you can put the code in the AutoOpen macro,

 

by: ExtremeDPosted on 2008-07-04 at 16:02:44ID: 21935183

Hi Graham,

Does that mean that users would have to open up the template .dot each time?  Because this wouldn't work with our system.  We can only SEE and open .rtf documents.

 

by: ExtremeDPosted on 2008-07-04 at 16:21:41ID: 21935226

I'm sorry, but I've tried getting this to work when I open .rtf documents for the first time, but, it's just not working.  I've done everything you've suggested.  I must be doing something wrong.

Can you send me what you done?

 

by: GrahamSkanPosted on 2008-07-05 at 03:54:59ID: 21936587

RTF is Microsoft's open format to permit documents to be read by other programmes, where macros would not be appropriate. It is an excellent way of transferring finished documents between systems.

You are probably also meeting one of the several disadvantages of using ActiveX controls on directly on documents (as opposed to on UserForms). They are only easy to find in macros via the ThisDocument module, which refers to the actual document or template that holds the code.

Your code works asis in the Document_New but needs a tweak in the AutoOpen. It is only a tweak because you only have one ActiveX control hence it cn be found with InLineShapes(1).

I have attached the template with the macros that are also in the snippet. Ironically, EE doesn't allow .dot files in case they contain unexpected macros, but .doc files are OK, so I've renamed it. :)

'ThisDocument Module
 
Option Explicit
 
Private Sub Document_New()
 On Error GoTo Document_New_Err
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=C:\db\Names.mdb"
    rst.Open "SELECT DISTINCT [StaffNames] FROM tblNames ORDER BY [StaffNames];", _
             cnn, adOpenStatic
    rst.MoveFirst
    With Me.ComboBox1
        .Clear
        Do
            .AddItem rst![StaffNames].Value
            rst.MoveNext
        Loop Until rst.EOF
    End With
Document_New_Exit:
    On Error Resume Next
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Exit Sub
Document_New_Err:
    MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
    Resume Document_New_Exit
End Sub
 
'Code module
Option Explicit
 
Sub AutoOpen()
 On Error GoTo AutoOpen_Err
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=C:\db\Names.mdb"
    rst.Open "SELECT DISTINCT [StaffNames] FROM tblNames ORDER BY [StaffNames];", _
             cnn, adOpenStatic
    rst.MoveFirst
    With ActiveDocument.InlineShapes(1).OLEFormat.Object
        .Clear
        Do
            .AddItem rst![StaffNames].Value
            rst.MoveNext
        Loop Until rst.EOF
    End With
AutoOpen_Exit:
    On Error Resume Next
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Exit Sub
AutoOpen_Err:
    MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
    Resume AutoOpen_Exit
End Sub
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:

Select allOpen in new window

 

by: ExtremeDPosted on 2008-07-05 at 08:14:45ID: 21937318

Graham, you're an absolute Star.  It works, thank you very much.

But, the document keeps opening in design mode, even though my security settings are set to low?


 

by: GrahamSkanPosted on 2008-07-05 at 17:01:11ID: 21938827

It does with me too, even if it is saved in doc format. I'm not convinced that the Low security setting is the whole answer, but I don't have any more information, I'm afraid.

 

by: ExtremeDPosted on 2008-07-07 at 00:46:19ID: 31472722

Thanks for all your help.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...