• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 457
  • Last Modified:

how to program macro to perform on open of word document

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
trevoray
Asked:
trevoray
1 Solution
 
Tommy KinardCommented:
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
 
trevorayAuthor Commented:
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
 
trevorayAuthor Commented:
is all that code really needed? it seems like a lot just to play the first object located in the word doc
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
Tommy KinardCommented:
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
 
Tommy KinardCommented:

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
 
Tommy KinardCommented:
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
 
trevorayAuthor Commented:
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
 
Tommy KinardCommented:
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
 
Tommy KinardCommented:
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
 
Tommy KinardCommented:
Hi trevoray,

Did that work?

dragontooth

0
 
JMoon5FTMCommented:
Try adding DoEvents to the beginning of your Sub.
0
 
trevorayAuthor Commented:
that macro works when i press run, but it does not automatically work when i open up the document
0
 
Tommy KinardCommented:
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
 
Tommy KinardCommented:
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
 
trevorayAuthor Commented:
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
 
Tommy KinardCommented:
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
 
trevorayAuthor Commented:
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
 
Tommy KinardCommented:
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
 
SteinerCommented:
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
 
Tommy KinardCommented:
Glad I could Help!

dragontooth

0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now