![]() |
|
#1
|
|||
|
|||
![]()
Hi everyone
I would like to create a macro using Word VBA to save a new version of the document I am working on. If it is a new document, that hasn't yet been saved, I would like an input box to ask for a name for the file. The document should then be saved with that file name and add a version number (e.g. V1.0) and the current date (in the format dd.mm.yyyy). It should look like "Test - V1.0 - 01.01.24". The user should be prompted to select a folder to save the document. If the document already has been saved and named, I would like to be able to: (a) save a minor version update with the version number increasing by 0.1 and to update the date e.g. "Test - V1.1 - 02.01.24"; and (b) save a major version update with the version number increasing to the next whole number and to update the date e.g. "Test - V2.0 - 03.01.24". The document should save into the existing folder in that format. Does anyone know how to achieve that? I've been trying all morning by searching forums and getting ideas from Copilot but haven't been able to figure it out. |
#2
|
|||
|
|||
![]()
I've got this, which works for creating the initial file, but comes up with a Run-time error '13': Type Mismatch on this line: version = "V" & Format(CDbl(version) + 0.1, "0.0")
Code:
Sub SaveVersionedDocument() Dim doc As Document Dim fileName As String Dim version As String Dim currentDate As String Dim folderPath As String Dim minorUpdate As Boolean ' Set your document object (assuming you're running this from within Word) Set doc = ActiveDocument ' Check if the document has been saved If doc.Saved Then ' Extract existing file name, version, and date fileName = Left(doc.Name, Len(doc.Name) - 5) ' Remove ".docx" version = Mid(fileName, InStrRev(fileName, "V") + 1) currentDate = Format(Date, "dd.mm.yy") ' Determine if it's a minor update minorUpdate = InputBox("Is this a minor update? (Yes/No)") = "Yes" ' Update version and date If minorUpdate Then version = Replace(version, ".", "") ' Remove dots version = "V" & Format(CDbl(version) + 0.1, "0.0") Else version = "V" & Format(CDbl(version) + 1, "0") End If Else ' New document: prompt for file name fileName = InputBox("Enter a file name (without extension):") version = "V1.0" currentDate = Format(Date, "dd.mm.yy") End If ' Prompt user to select a folder With Application.FileDialog(msoFileDialogFolderPicker) If .Show = -1 Then folderPath = .SelectedItems(1) Else MsgBox "Folder selection canceled. Document not saved." Exit Sub End If End With ' Save the document doc.SaveAs2 fileName:=folderPath & "\" & fileName & " - " & version & " - " & currentDate & ".docx" MsgBox "Document saved successfully!" End Sub |
#3
|
|||
|
|||
![]()
I have got this to work, with a lot of trial and error, for the minor update at least.
The major update adds a whole digit rather than rounds up to the next number so you get V2.2 rather than V2.0. Does anyone know how to fix that or have any other suggestions? Code:
Sub SaveVersionedDocument() Dim doc As Document Dim fileName As String Dim docName As String Dim version As String Dim currentDate As String Dim folderPath As String Dim minorUpdate As Boolean ' Set your document object (assuming you're running this from within Word) Set doc = ActiveDocument docName = Left(doc.Name, Len(doc.Name) - 23) ' Remove ".docx" ' Check if the document has been saved If doc.Saved Then ' Extract existing file name, version, and date fileName = Left(doc.Name, Len(doc.Name) - 16) ' Remove ".docx" version = Mid(fileName, InStrRev(fileName, "V") + 1) currentDate = Format(Date, "dd.mm.yy") ' Determine if it's a minor update minorUpdate = InputBox("Is this a minor update? (Yes/No)") = "Yes" 'Update version and date If minorUpdate Then version = "V" & Format(CDbl(version) + 0.1, "0.0") Else version = "V" & Format(CDbl(version) + 1, "0.0") End If Else ' New document: prompt for file name fileName = InputBox("Enter a file name (without extension):") version = "V1.0" currentDate = Format(Date, "dd.mm.yy") End If ' Prompt user to select a folder With Application.FileDialog(msoFileDialogFolderPicker) If .Show = -1 Then folderPath = .SelectedItems(1) Else MsgBox "Folder selection canceled. Document not saved." Exit Sub End If End With ' Debug print the docName Debug.Print "docName at end: " & docName ' Save the document doc.SaveAs2 fileName:=folderPath & "\" & docName & " - " & version & " - " & currentDate & ".docx" MsgBox "Document saved successfully!" End Sub |
#4
|
|||
|
|||
![]()
Ok in case anyone is interested, I finally got this to work:
Code:
Sub SaveVersionedDocument3() Dim doc As Document Dim fileName As String Dim docName As String Dim version As String Dim currentDate As String Dim folderPath As String Dim minorUpdate As Boolean ' Set your document object (assuming you're running this from within Word) Set doc = ActiveDocument ' Check if the file name is longer than 16 characters (which means it has been saved before) pathlength = Len(doc.Name) Debug.Print "pathlength: " & pathlength 'Update the fileName if it has been saved before If pathlength > 16 Then ' Extract existing file name, version, and date fileName = Left(doc.Name, Len(doc.Name) - 16) ' Remove version and ".docx" version = Mid(fileName, InStrRev(fileName, "V") + 1) currentDate = Format(Date, "dd.mm.yy") docName = Left(doc.Name, Len(doc.Name) - 23) ' Remove ".docx" folderPath = ActiveDocument.Path ' Determine if it's a minor update minorUpdate = InputBox("Is this a minor update? (Y/N") = "Y" 'Update version and date If minorUpdate Then version = "V" & Format(CDbl(version) + 0.1, "0.0") Else version = "V" & Format(Ceiling(version), "0.0") End If Else ' New document: prompt for file name docName = InputBox("Enter a file name (without extension):") version = "V1.0" currentDate = Format(Date, "dd.mm.yy") ' Prompt user to select a folder With Application.FileDialog(msoFileDialogFolderPicker) If .Show = -1 Then folderPath = .SelectedItems(1) Else MsgBox "Folder selection canceled. Document not saved." Exit Sub End If End With End If ' Save the document doc.SaveAs2 fileName:=folderPath & "\" & docName & " - " & version & " - " & currentDate & ".docx" MsgBox "Document saved successfully!" End Sub Function Ceiling(ByVal num As Double) As Double If num = Int(num) Then Ceiling = num + 1 Else Ceiling = Int(num) + 1 End If End Function |
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
How can I recover a word document that was 'Saved-over' with another (old) version of same document? | Mrsolace | Word | 2 | 09-10-2021 10:50 AM |
Save document as new version with specific format | tanko | Word VBA | 4 | 04-05-2021 08:06 PM |
![]() |
palanski | Word | 3 | 10-15-2014 01:54 PM |
Version number for Word document, automated by VCS | lblythen | Word | 4 | 04-08-2014 11:24 PM |
![]() |
musawwir | Word | 1 | 11-05-2012 05:20 PM |