Microsoft Office Forums

Go Back   Microsoft Office Forums > >

Reply
 
Thread Tools Display Modes
  #1  
Old 10-30-2022, 05:14 AM
Italophile Italophile is offline Word - position document Windows 11 Word - position document Office 2021
Expert
 
Join Date: Mar 2022
Posts: 554
Italophile is just really niceItalophile is just really niceItalophile is just really niceItalophile is just really nice
Default

Quote:
Originally Posted by bugy View Post
Can I save the value of the bookmark in a variable?
thanks
That's what the code already does. If that isn't what you want, you'll have to be more specific about what you need.
Reply With Quote
  #2  
Old 10-30-2022, 05:59 AM
BrianHoard BrianHoard is offline Word - position document Windows 10 Word - position document Office 2019
Advanced Beginner
 
Join Date: Jul 2022
Location: Haymarket, VA USA
Posts: 85
BrianHoard is on a distinguished road
Default

This example displays the numbers for all bookmarks in your document as a msgBox. Since it appears your numbers vary in size, I'm extending the range as long as their are numbers in it. In the code below, you can see the line where your bookmark value from the document is being stored as the var, bookmarkValue.

It was being stored in the previous example as "code", so as Italophile mentioned, you are already storing it as a variable.

Next question for you - What are you going to do with the variable once you have it?
Posting a sample Word document (not screen shots) with the actual bookmarks you're trying to work with, and details about your end goal would be helpful.

This is like a mystery that we're learning a little more with each iteration

Code:
Sub bookmarkValues()
    Dim rng As Range
    Dim bm As Bookmark
    Dim rng_expanded As Range
    Dim bookmarkValue As String
    
    For Each bm In ActiveDocument.Bookmarks
      Set rng = bm.Range
      If rng.Start = rng.End Then
        Set rng_expanded = rng
        rng_expanded.MoveEndWhile cset:="0123456789"
        
        ' Store bookmark document text as a variable
        bookmarkValue = rng_expanded.Text
        
        Call MsgBox(prompt:=("Bookmark value: " & bookmarkValue), buttons:=vbOKOnly)
      End If
    Next bm

End Sub
Reply With Quote
  #3  
Old 10-30-2022, 08:44 AM
bugy bugy is offline Word - position document Windows 10 Word - position document Office 2010
Novice
Word - position document
 
Join Date: Jan 2019
Posts: 16
bugy is on a distinguished road
Default

Quote:
Originally Posted by BrianHoard View Post
This example displays the numbers for all bookmarks in your document as a msgBox. Since it appears your numbers vary in size, I'm extending the range as long as their are numbers in it. In the code below, you can see the line where your bookmark value from the document is being stored as the var, bookmarkValue.

It was being stored in the previous example as "code", so as Italophile mentioned, you are already storing it as a variable.

Next question for you - What are you going to do with the variable once you have it?
Posting a sample Word document (not screen shots) with the actual bookmarks you're trying to work with, and details about your end goal would be helpful.

This is like a mystery that we're learning a little more with each iteration

Code:
Sub bookmarkValues()
    Dim rng As Range
    Dim bm As Bookmark
    Dim rng_expanded As Range
    Dim bookmarkValue As String
    
    For Each bm In ActiveDocument.Bookmarks
      Set rng = bm.Range
      If rng.Start = rng.End Then
        Set rng_expanded = rng
        rng_expanded.MoveEndWhile cset:="0123456789"
        
        ' Store bookmark document text as a variable
        bookmarkValue = rng_expanded.Text
        
        Call MsgBox(prompt:=("Bookmark value: " & bookmarkValue), buttons:=vbOKOnly)
      End If
    Next bm

End Sub
the bookmar that I want to save in a variable is the one that I attach in the image. It is called "CodiClient".
I want to save the variable because I have a program that saves the document in the directory of that code when I close the document.

I put the code that I have (I want the value that I enter through the inputbox, variable "oBM" to be taken from the bookmark)

Code:
Sub SaveAsBM()
Dim oBM As String
Dim sPath As String
oBM = InputBox("RECEPTE", "ENTRA EL CODI DEL PACIENT", "")
sPath = "C:\Server\" & oBM & "\"
CreateFolders sPath
ActiveDocument.SaveAs sPath & "recepte" & Format(Now, "yyyymmdd hhnnss") & ".pdf"
bFound = True
End Sub


Private Function CreateFolders(strPath As String)
Dim strTempPath As String
Dim lng_Path As Long
Dim VPath As Variant
Dim oFSO As Object
Dim i As Integer
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    VPath = Split(strPath, "\")
    If Left(strPath, 2) = "\\" Then
        strPath = "\\" & VPath(2) & "\"
        For lng_Path = 3 To UBound(VPath)
            strPath = strPath & VPath(lng_Path) & "\"
            If Not oFSO.FolderExists(strPath) Then MkDir strPath
        Next lng_Path
    Else
        strPath = VPath(0) & "\"
        For lng_Path = 1 To UBound(VPath)
            strPath = strPath & VPath(lng_Path) & "\"
            If Not oFSO.FolderExists(strPath) Then MkDir strPath
        Next lng_Path
    End If
lbl_Exit:
    Set oFSO = Nothing
    Exit Function
End Function
Attached Images
File Type: jpg 30-10-2022_16-36-05.jpg (38.2 KB, 16 views)
Reply With Quote
  #4  
Old 10-30-2022, 06:39 PM
BrianHoard BrianHoard is offline Word - position document Windows 10 Word - position document Office 2019
Advanced Beginner
 
Join Date: Jul 2022
Location: Haymarket, VA USA
Posts: 85
BrianHoard is on a distinguished road
Default

Okay, I think we're getting closer. I modified your SaveAsBM script as below, replacing the InputBox with code for getting the value of the bookmark named "CodiClient"

It tested fine for me, creating the folder named 11241, and saving the document as a PDF. But the PDF wouldn't open for me, but I trust it's working for you, or you know how to make that part work.

Let me know if this is getting closer to your goal.

Code:
Sub SaveAsBM()
  Dim oBM As String
  Dim sPath As String
  
  Dim bm As Bookmark
  Dim bmName As String
  Dim bmValue As String
  Dim rng_bm As Range
  Dim rng_expanded As Range
  Dim bmCheck As Boolean
  
  bmName = "CodiClient"
  sPath = "C:\Server"
      
  '  oBM = InputBox("RECEPTE", "ENTRA EL CODI DEL PACIENT", "")
  
  ' Store bookmark value for new folder name.
  For Each bm In ActiveDocument.Bookmarks
    If bm.Name = bmName Then
      Set rng_bm = bm.Range
      
      If rng_bm.Start = rng_bm.End Then
        Set rng_expanded = rng_bm
        rng_expanded.MoveEndWhile cset:="0123456789"
        bmValue = rng_expanded.Text
        sPath = (sPath & "\" & bmValue & "\")
        bmCheck = True
      End If
    End If
  Next bm
  
  If bmCheck = True Then
    Debug.Print ("Creating folder: " & sPath)
    CreateFolders sPath
    ActiveDocument.SaveAs sPath & "recepte" & Format(Now, "yyyymmdd hhnnss") & ".pdf"
    bFound = True
  Else
    Call MsgBox(prompt:=("Unable to find bookmark, " & bmName), buttons:=vbCritical)
  End If

End Sub
Reply With Quote
  #5  
Old 10-31-2022, 01:25 AM
Italophile Italophile is offline Word - position document Windows 11 Word - position document Office 2021
Expert
 
Join Date: Mar 2022
Posts: 554
Italophile is just really niceItalophile is just really niceItalophile is just really niceItalophile is just really nice
Default

Looping through the bookmarks collection is unnecessary when there is a built-in function to check that a bookmark exists.

So the simplified code should be:
Code:
Sub SaveAsBM()
    Dim sPath As String: sPath = "C:\Server"
    Dim bmName As String: bmName = "CodiClient"
  
    Dim bm As Bookmark
    Dim bmValue As String
    Dim rng_bm As Range
      
    If ActiveDocument.Bookmarks.Exists(bmName) Then
        Set rng_bm = bm.Range
        If rng_bm.Start = rng_bm.End Then
            rng_bm.MoveEndWhile cset:="0123456789"
            bmValue = rng_bm.Text
        End If
        sPath = (sPath & "\" & bmValue & "\")
        Debug.Print ("Creating folder: " & sPath)
        CreateFolders sPath
        ActiveDocument.SaveAs sPath & "recepte" & Format(Now, "yyyymmdd hhnnss") & ".pdf"
    Else
        Call MsgBox(prompt:=("Unable to find bookmark, " & bmName), buttons:=vbCritical)
    End If

End Sub
Reply With Quote
  #6  
Old 10-31-2022, 11:51 AM
bugy bugy is offline Word - position document Windows 10 Word - position document Office 2010
Novice
Word - position document
 
Join Date: Jan 2019
Posts: 16
bugy is on a distinguished road
Default

Quote:
Originally Posted by Italophile View Post
Looping through the bookmarks collection is unnecessary when there is a built-in function to check that a bookmark exists.

So the simplified code should be:
Code:
Sub SaveAsBM()
    Dim sPath As String: sPath = "C:\Server"
    Dim bmName As String: bmName = "CodiClient"
  
    Dim bm As Bookmark
    Dim bmValue As String
    Dim rng_bm As Range
      
    If ActiveDocument.Bookmarks.Exists(bmName) Then
        Set rng_bm = bm.Range
        If rng_bm.Start = rng_bm.End Then
            rng_bm.MoveEndWhile cset:="0123456789"
            bmValue = rng_bm.Text
        End If
        sPath = (sPath & "\" & bmValue & "\")
        Debug.Print ("Creating folder: " & sPath)
        CreateFolders sPath
        ActiveDocument.SaveAs sPath & "recepte" & Format(Now, "yyyymmdd hhnnss") & ".pdf"
    Else
        Call MsgBox(prompt:=("Unable to find bookmark, " & bmName), buttons:=vbCritical)
    End If

End Sub
Hello
I get this error, do you know what it could be?
"Object variable or With block variable not set"
Code:
Sub SaveAsBM()
    Dim sPath As String: sPath = "C:\server"
    Dim bmName As String: bmName = "CodiPacient"
  
    Dim bm As Bookmark
    Dim bmValue As String
    Dim rng_bm As Range
      
    If ActiveDocument.Bookmarks.Exists(bmName) Then
        Set rng_bm = bm.Range
        If rng_bm.Start = rng_bm.End Then
            rng_bm.MoveEndWhile cset:="0123456789"
            bmValue = rng_bm.Text
        End If
        sPath = (sPath & "\" & bmValue & "\")
        Debug.Print ("Creating folder: " & sPath)
        CreateFolders sPath
        ActiveDocument.SaveAs sPath & "recepte" & Format(Now, "yyyymmdd hhnnss") & ".pdf"
    Else
        Call MsgBox(prompt:=("Unable to find bookmark, " & bmName), buttons:=vbCritical)
    End If
End Sub
Private Function CreateFolders(strPath As String)
Dim strTempPath As String
Dim lng_Path As Long
Dim VPath As Variant
Dim oFSO As Object
Dim i As Integer
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    VPath = Split(strPath, "\")
    If Left(strPath, 2) = "\\" Then
        strPath = "\\" & VPath(2) & "\"
        For lng_Path = 3 To UBound(VPath)
            strPath = strPath & VPath(lng_Path) & "\"
            If Not oFSO.FolderExists(strPath) Then MkDir strPath
        Next lng_Path
    Else
        strPath = VPath(0) & "\"
        For lng_Path = 1 To UBound(VPath)
            strPath = strPath & VPath(lng_Path) & "\"
            If Not oFSO.FolderExists(strPath) Then MkDir strPath
        Next lng_Path
    End If
lbl_Exit:
    Set oFSO = Nothing
    Exit Function
End Function
Attached Images
File Type: jpg 31-10-2022_19-46-50.jpg (173.9 KB, 11 views)
Reply With Quote
  #7  
Old 10-31-2022, 08:47 PM
BrianHoard BrianHoard is offline Word - position document Windows 10 Word - position document Office 2019
Advanced Beginner
 
Join Date: Jul 2022
Location: Haymarket, VA USA
Posts: 85
BrianHoard is on a distinguished road
Default

That error is from "bm.Range" not being valid. That was being used in my original code which was looping through all the bookmarks.
So now, you can use this instead. Notice the difference in how this is setting rng_bm.
Code:
Sub SaveAsBM()
    Dim sPath As String: sPath = "C:\Server"
    Dim bmName As String: bmName = "CodiPacient"
  
    Dim bm As Bookmark
    Dim bmValue As String
    Dim rng_bm As Range
      
    If ActiveDocument.Bookmarks.Exists(bmName) Then
        Set rng_bm = ActiveDocument.Bookmarks(bmName).Range
        If rng_bm.Start = rng_bm.End Then
            rng_bm.MoveEndWhile cset:="0123456789"
            bmValue = rng_bm.Text
        End If
        sPath = (sPath & "\" & bmValue & "\")
        Debug.Print ("Creating folder: " & sPath)
        CreateFolders sPath
        ActiveDocument.SaveAs sPath & "recepte" & Format(Now, "yyyymmdd hhnnss") & ".pdf"
    Else
        Call MsgBox(prompt:=("Unable to find bookmark, " & bmName), buttons:=vbCritical)
    End If
End Sub
Reply With Quote
  #8  
Old 11-02-2022, 10:42 AM
bugy bugy is offline Word - position document Windows 10 Word - position document Office 2010
Novice
Word - position document
 
Join Date: Jan 2019
Posts: 16
bugy is on a distinguished road
Default

Quote:
Originally Posted by Italophile View Post
Looping through the bookmarks collection is unnecessary when there is a built-in function to check that a bookmark exists.

So the simplified code should be:
Code:
Sub SaveAsBM()
    Dim sPath As String: sPath = "C:\Server"
    Dim bmName As String: bmName = "CodiClient"
  
    Dim bm As Bookmark
    Dim bmValue As String
    Dim rng_bm As Range
      
    If ActiveDocument.Bookmarks.Exists(bmName) Then
        Set rng_bm = bm.Range
        If rng_bm.Start = rng_bm.End Then
            rng_bm.MoveEndWhile cset:="0123456789"
            bmValue = rng_bm.Text
        End If
        sPath = (sPath & "\" & bmValue & "\")
        Debug.Print ("Creating folder: " & sPath)
        CreateFolders sPath
        ActiveDocument.SaveAs sPath & "recepte" & Format(Now, "yyyymmdd hhnnss") & ".pdf"
    Else
        Call MsgBox(prompt:=("Unable to find bookmark, " & bmName), buttons:=vbCritical)
    End If

End Sub
Thank you very much !!! it has worked perfectly for me
Reply With Quote
Reply



Similar Threads
Thread Thread Starter Forum Replies Last Post
Word - position document Can I make Word remember the window size and position for each document? Jennifer Murphy Word 4 02-20-2023 06:36 PM
Changing Caption Position on Whole Document at once Alexandarale Word Tables 1 11-15-2020 06:56 PM
Word - position document Copy selected text from one document and paste to new document in same position on the page gasparik Word VBA 1 05-11-2020 05:41 AM
Starting a document, returning to last position glennnall Word 0 10-08-2017 10:09 AM
Word - position document VBA: how can I know the position on a document? tinfanide Excel Programming 3 02-27-2012 03:24 PM

Other Forums: Access Forums

All times are GMT -7. The time now is 09:36 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.
Search Engine Optimisation provided by DragonByte SEO (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
MSOfficeForums.com is not affiliated with Microsoft