Solved

how to program macro to perform on open of word document

Posted on 2004-03-30
20
431 Views
Last Modified: 2013-12-25
hi, i am new to macro programming and don't know what to do. i have the following macro that works when i select run from the menu, but doesn't work upon document open. the macro plays the sound file in the document.

how can i modify this so that it will run (play the sound) upon opening the document? thanks!

Sub Document_Open()  
    ActiveDocument.InlineShapes(1).Select  
    Selection.InlineShapes(1).OLEFormat.DoVerb VerbIndex:=wdOLEVerbPrimary
End Sub
0
Comment
Question by:trevoray
20 Comments
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
Hi trevoray,
The below code will play a sound (TADA.WAV) when the doc is opened.


Private Const SND_APPLICATION = &H80         '  look for application specific association
Private Const SND_ALIAS = &H10000     '  name is a WIN.INI [sounds] entry
Private Const SND_ALIAS_ID = &H110000    '  name is a WIN.INI [sounds] entry identifier
Private Const SND_ASYNC = &H1         '  play asynchronously
Private Const SND_FILENAME = &H20000     '  name is a file name
Private Const SND_LOOP = &H8         '  loop the sound until next sndPlaySound
Private Const SND_MEMORY = &H4         '  lpszSoundName points to a memory file
Private Const SND_NODEFAULT = &H2         '  silence not default, if sound not found
Private Const SND_NOSTOP = &H10        '  don't stop any currently playing sound
Private Const SND_NOWAIT = &H2000      '  don't wait if the driver is busy
Private Const SND_PURGE = &H40               '  purge non-static events for task
Private Const SND_RESOURCE = &H40004     '  name is a resource name or atom
Private Const SND_SYNC = &H0         '  play synchronously (default)
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long

Private Sub Document_Open()
ActiveDocument.InlineShapes(1).Select  
    Selection.InlineShapes(1).OLEFormat.DoVerb VerbIndex:=wdOLEVerbPrimary
        'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    PlaySound "C:\WINDOWS\MEDIA\TADA.WAV", ByVal 0&, SND_FILENAME Or SND_ASYNC

End Sub


dragontooth

0
 

Author Comment

by:trevoray
Comment Utility
dragontooth,

thanks! so, do i even need the code i provided? it looks like it will work without any of my original code.

trevor
0
 

Author Comment

by:trevoray
Comment Utility
is all that code really needed? it seems like a lot just to play the first object located in the word doc
0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
If you are talking about these 2 lines, not to play a wave.

ActiveDocument.InlineShapes(1).Select  
Selection.InlineShapes(1).OLEFormat.DoVerb VerbIndex:=wdOLEVerbPrimary

dragontooth

0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility

http://www.mentalis.org/apilist/PlaySound.shtml

another related link
http://www.jpsoft.com/help/index.htm?playsound.htm

This is some more information on the API call which explains the variables and their usage. This is all from http://www.allapi.net/  .


· pszSound
A string that specifies the sound to play. If this parameter is NULL, any currently playing waveform sound is stopped. To stop a non-waveform sound, specify SND_PURGE in the fdwSound parameter.
Three flags in fdwSound (SND_ALIAS, SND_FILENAME, and SND_RESOURCE) determine whether the name is interpreted as an alias for a system event, a filename, or a resource identifier. If none of these flags are specified, PlaySound searches the registry or the WIN.INI file for an association with the specified sound name. If an association is found, the sound event is played. If no association is found in the registry, the name is interpreted as a filename.

· hmod
Handle of the executable file that contains the resource to be loaded. This parameter must be NULL unless SND_RESOURCE is specified in fdwSound.

· fdwSound
Flags for playing the sound. The following values are defined:
SND_APPLICATION
The sound is played using an application-specific association.
SND_ALIAS
The pszSound parameter is a system-event alias in the registry or the WIN.INI file. Do not use with either SND_FILENAME or SND_RESOURCE.
SND_ALIAS_ID
The pszSound parameter is a predefined sound identifier.
SND_ASYNC
The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously played waveform sound, call PlaySound with pszSound set to NULL.
SND_FILENAME
The pszSound parameter is a filename.
SND_LOOP
The sound plays repeatedly until PlaySound is called again with the pszSound parameter set to NULL. You must also specify the SND_ASYNC flag to indicate an asynchronous sound event.
SND_MEMORY
A sound event’s file is loaded in RAM. The parameter specified by pszSound must point to an image of a sound in memory.
SND_NODEFAULT
No default sound event is used. If the sound cannot be found, PlaySound returns silently without playing the default sound.
SND_NOSTOP
The specified sound event will yield to another sound event that is already playing. If a sound cannot be played because the resource needed to generate that sound is busy playing another sound, the function immediately returns FALSE without playing the requested sound.
If this flag is not specified, PlaySound attempts to stop the currently playing sound so that the device can be used to play the new sound.
SND_NOWAIT
If the driver is busy, return immediately without playing the sound.
SND_PURGE
Sounds are to be stopped for the calling task. If pszSound is not NULL, all instances of the specified sound are stopped. If pszSound is NULL, all sounds that are playing on behalf of the calling task are stopped.
You must also specify the instance handle to stop SND_RESOURCE events.
SND_RESOURCE
The pszSound parameter is a resource identifier; hmod must identify the instance that contains the resource.
SND_SYNC
Synchronous playback of a sound event. PlaySound returns after the sound event completes.

0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
But the short and sweet of it is to just play the sound this is all you need.

Private Const SND_FILENAME = &H20000     '  name is a file name
Private Const SND_SYNC = &H0         '  play synchronously (default)
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long

Private Sub Document_Open()
    PlaySound "C:\WINDOWS\MEDIA\TADA.WAV", ByVal 0&, SND_FILENAME Or SND_ASYNC
End Sub

dragontooth

0
 

Author Comment

by:trevoray
Comment Utility
dragon,

those 2 lines are what plays my file. my file is the first object in the word document.

how can i do this using my two lines of code i already have and referencing the sound object that is already embedded in my word document?
0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
Sorry didn't relize the object was embedded, I was just looking at that, I will have to go to another computer, this one does not have speakers.

dragontooth

0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
This is what worked for me. Word 2000 Win 98SE

Private Sub Document_Open()
ActiveDocument.InlineShapes(1).OLEFormat.DoVerb VerbIndex:=wdOLEVerbPrimary
End Sub

dragontooth


0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
Hi trevoray,

Did that work?

dragontooth

0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 5

Expert Comment

by:JMoon5FTM
Comment Utility
Try adding DoEvents to the beginning of your Sub.
0
 

Author Comment

by:trevoray
Comment Utility
that macro works when i press run, but it does not automatically work when i open up the document
0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
Do you have macro's enabled? Is this a .dot? If it is a dot you need to place the sub in Document_New.

dragontooth
0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
Also if the macro setting is set to high it will not run, with that setting they are always disabled unless there is a certificate.

dragontooth

0
 

Author Comment

by:trevoray
Comment Utility
the security is set to low. i don't know if i have macro's enabled or not, but wouldn't if i didn't have macros enabled, wouldn't i get an error when i tried to run the macro manually?
0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
If the security is set to low that should be ok. What version of word are you using? I have Word 2000. I can try 2003 also.

dragontooth

0
 

Author Comment

by:trevoray
Comment Utility
sorry for delayed respsonse. i use Word 2000. So you are telling me that you have created a file, added a sound bite to it. Added the macro. Closed Word. Opened up the file, and the sound plays upon opening the file?
0
 
LVL 14

Accepted Solution

by:
Tommy Kinard earned 500 total points
Comment Utility
Yes, on 3 machines, on 2 machines it complained about the audio device could not be started. Win 98 Win XP pro. There may be another macro that is interfering with that one, just a guess at this point. There may be an option in word that will not let you run a macro on open/startup let me check.

dragontooth

0
 
LVL 11

Expert Comment

by:Steiner
Comment Utility
Ok, just tried it using Word97, the macro itself ran when I opened the document, but playing the sound --> nope.

As far as I could see, the macro is run BEFORE the entire document, especially embedded objects, are loaded properly. But I don't have a clue on how to solve this (and maybe THAT is just because I'm using Word97)
0
 
LVL 14

Expert Comment

by:Tommy Kinard
Comment Utility
Glad I could Help!

dragontooth

0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now