Word Macro for saving word form with variable Name

Anonymous
2019-12-05T15:32:55+00:00

Hi,

I have been reading a post within this forum Here and have found that I can now create a saved word doc from a command button within a word form I have created. 

I have been saving the files as text files which I assume is because the code I am using shows as strFileName = .Text

I was hoping that to save the files as word docs all I would need to do is change this to .doc but that doesn't seem to work. 

Also I need to change the variable so that it creates a date and time that is added to the form I am using

The code I am currently using is the same from the previous reply on the above question

Private Sub CommandButton1_Click()

Dim rngFilename As Range

 Dim strFileName As String

 Set rngFilename = ActiveDocument.Range

 With rngFilename

     .End = .Start

     .MoveEnd wdWord, 4

     strFileName = .Text

 End With

 ActiveDocument.SaveAs "shared drive location\ " & strFileName

End Sub

From what I gather the 4 at the end of .MoveEnd wdWord 4 is the start of the file name but what if I need it to be further on down the form for example two words together on separate lines of the form, (e.g. word 13 and word 9) when I try to do this using the code above I am getting the following error

Runtime error 5096

Can someone help me with the code so that I can save the form as a word doc and save it automatically as the answers within the form?

Thanks

Mark

Microsoft 365 and Office | Word | For home | Windows

Locked Question. This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question.

0 comments No comments
Answer accepted by question author
Jay Freedman 208.6K Reputation points Volunteer Moderator
2019-12-17T15:00:07+00:00

The important part is exactly where and how your user saved the template. Microsoft Office is strict about security because hackers love to attack you with malware, so users have to jump through a few hoops to make macros work. 

First, any Office file sent from one computer to another is marked by Windows and has to be manually unmarked. After saving the file on the local drive, open its Properties dialog from the right-click menu and check the Unblock box. 

The second requirement is to satisfy or bypass Office's security checks. To satisfy them, a security certificate has to be applied to the file, something that isn't available to most people. To bypass the checks, the template file must be stored in a 'trusted location', a folder that is designated as one where all the files are known to be good. By default, the Office installer marks the User Templates, the Program Templates, and the Word Startup folders as trusted. This can be seen in File > Options > Trust Center > Trust Options > Trusted Locations. If the template wasn't initially saved in the Templates folder, it should be moved there before basing a document on it.

Was this answer helpful?

4 people found this answer helpful.
0 comments No comments
Answer accepted by question author
Charles Kenyon 172K Reputation points Volunteer Moderator
2019-12-18T17:43:45+00:00

I believe there is information about (1) requiring information and (2) reloading the information from the form into the UserForm on one of these if not both:

I'm on my way out the door. If these don't help and no one else supplies how to do this, I will follow up when I return.

Was this answer helpful?

1 person found this answer helpful.
0 comments No comments

16 additional answers

Sort by: Most helpful
  1. Jay Freedman 208.6K Reputation points Volunteer Moderator
    2019-12-19T13:00:03+00:00

    Your code omitted the "Exit Sub" statements that were in the code I posted. There should be one of those immediately after each MsgBox statement.

    By stopping the code when the message appears, the Exit Sub prevents the form from being saved and closing if the data is missing. The user gets another chance to fill in the data and click Submit again.

    As I mentioned before, though, none of this prevents the user from manually saving the document or closing it without clicking Submit.

    Was this answer helpful?

    3 people found this answer helpful.
    0 comments No comments
  2. Jay Freedman 208.6K Reputation points Volunteer Moderator
    2019-12-09T20:18:33+00:00

    The fact that your data items are in a table makes it easy to locate them. I'll assume that it's the first table in the template (and therefore in the documents based on it), which is named as "tbl" in the following code.

    I'll also assume that the date is a date-picker content control rather than just a typed date, and that the technician names are in a dropdown content control (as indicated by the "Choose an item" placeholder).

    If any of these assumptions are incorrect, please reply with an explanation.

    Here's the code:

    Private Sub CommandButton1_Click()

        Dim strFileName As String

        Dim strDate As String

        Dim tbl As Table

        Set tbl = ActiveDocument.Tables(1)  ' change the 1 if necessary

        ' test for failure to select date or technician name

        If tbl.Cell(Row:=3, Column:=2).Range.ContentControls(1).ShowingPlaceholderText Then

            MsgBox prompt:="Please select date", _

                Title:="Oops!"

            Exit Sub

        End If

        If tbl.Cell(Row:=5, Column:=2).Range.ContentControls(1).ShowingPlaceholderText Then

            MsgBox prompt:="Please select technician name", _

                Title:="Oops!"

            Exit Sub

        End If

        ' start with technician name

        strFileName = tbl.Cell(Row:=5, Column:=2).Range.ContentControls(1).Range.Text

        ' reformat the date (change order of month & day if needed)

        strDate = Format(expression:=tbl.Cell(Row:=3, Column:=2).Range.ContentControls(1).Range.Text, _

            Format:="MM.dd.yyyy")

        ' combine the parts

        strFileName = strFileName & "." & strDate & ".docx"

        ' save

        ActiveDocument.SaveAs FileName:="shared drive location" & strFileName, _

             FileFormat:=wdFormatDocumentDefault

    End Sub

    One other comment: I was not completely correct about needing to save documents as .docm (macro-enabled) files. As long as the template is available to the user's computer, the command button will be able to run the code that's stored in the template. The only situation where you'd need to save the code in the document itself is if the user needs to complete and save the document when the template can't be accessed -- for example, if the document is moved to a different computer that isn't connected to the template's location.

    Was this answer helpful?

    2 people found this answer helpful.
    0 comments No comments
  3. Jay Freedman 208.6K Reputation points Volunteer Moderator
    2019-12-05T16:45:43+00:00

    The code you copied from Doug's reply in the other thread was for the situation where the intended filename is the first four words in the document. Specifically, the lines

     Set rngFilename = ActiveDocument.Range

     With rngFilename

         .End = .Start

         .MoveEnd wdWord, 4

    place the start of the range at the beginning of the document and then move the end of the range four words to the right. Then the line

        strFileName = .Text

    puts the text of the range (that is, the four words) into the string variable strFileName. 

    You have a different situation, so the code needs to be different.

    If the beginning of the text in the document that you want to use for a filename isn't at the beginning of the document, or isn't all in the same paragraph, or isn't in the order you want (guessing from your "word 13 and word 9" comment), then the macro needs some way to determine where the text begins and ends, and maybe some way to re-order the pieces. Please reply and give exact details of how to find the text and make it into the filename you want -- pretend you're doing this with pieces of paper and giving instructions to a small child. :-)

    One last bit: Because the variable strFileName contains just the words from the document text, and doesn't include an extension, Word's SaveAs command will apply the default extension; in Word 2010 that will be ".docx". That makes it a Word document, not a "text" (.txt) file, but it won't contain any macros. If you want to include the macro for the command button, you would need to replace the SaveAs line with

    ActiveDocument.SaveAs "shared drive location" & strFileName & ".docm", wdFormatXMLDocumentMacroEnabled

    Notice that there should not be a space between the backslash and the closing quote mark in either version of the line.

    Was this answer helpful?

    2 people found this answer helpful.
    0 comments No comments