Where do I find the signature folder from VBA

Where in the Outlook object tree do I find the folder used for signatures?
Who is Participating?
to read the key you can use

Set oShell = CreateObject("WScript.Shell")
strSigFolder = oShell.RegRead("HKCU\Software\Microsoft\Office\11.0\Common\General\Signatures")

but that gives me only a value of Signatures not a folder but i don't use them so i'm not sure how it looks if you do

The regkey is the same for me in office 9.0, 10.0 and 11.0 but couldn't find it under 8.0

how to determine the office version is a bit more difficult because a user can multiple installations, if you need to get it from the active application [i assume outlook here]

strVersion = Application.Version

Hello thor_ostergaard,

not sure if it is exposed in the object model but this is another way to get the path and the file
it is vb script but you can copy paste it in vba the messagebox will give you the file and path of the signature file

Dim strName, strFilePath, strFileExt, strFile
Dim oFile, oFolder,dtePrevDate

'this part gets the username and path to the signature file

Dim WSHNetwork: Set WSHNetwork = WScript.CreateObject("WScript.Network")

strName = WSHNetwork.UserName
strFilePath = "C:\Documents and Settings\" & _
    strName & "\Application Data\Microsoft\Signatures"

'this part gets the latest signature file
' file extension to look for
strFileExt = "rtf"

Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(strFilePath)

' get the newest signature file
dtePrevDate = "0"
For Each oFile In oFolder.Files
   If LCase(oFSO.GetExtensionName(oFile.Name)) = LCase(strFileExt) Then
     If DateDiff("s", dtePrevDate, oFile.DateLastModified) > 0 Then
       strFile = oFile.Path
       dtePrevDate = oFile.DateLastModified
     End If
   End If

msgbox strFile

hope this helps a bit
thor_ostergaardAuthor Commented:
Well - i'm not sure it helps.
I know that the path "Application Data\Microsoft\Signatures" is different in different language versions of outlook so I was looking after the "real" path.
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

i can't find that info from the outlook objectmodel, otherwise if you have the filename you could look up the path from there by searching the file first in the user data folder, the signature folder is not an important default folder like the desktop or temp folders that you can get through the environment variables or fso

if you need to implement a interface for different languages then i think using a sort of case select based on the language to get the right folder is the easiest way to solve it

but maybe someone else has a better idea
thor_ostergaardAuthor Commented:
I found this:
The name of the signatures folder is stored in the registry:

Don't know how to read from registry in VBA
Don't know how to determin the office version.
Don't know if this path is the same in all office versions (except for 11.0)
thor_ostergaardAuthor Commented:
And a better way to get the username:

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function UserNameWindows() As String
    Dim lngLen As Long
    Dim strBuffer As String
    Const dhcMaxUserName = 255
    strBuffer = Space(dhcMaxUserName)
    lngLen = dhcMaxUserName
    If CBool(GetUserName(strBuffer, lngLen)) Then
        UserNameWindows = Left$(strBuffer, lngLen - 1)
        UserNameWindows = ""
    End If
End Function

thor_ostergaardAuthor Commented:
Thanks for your help
thanks for the grade, i hope you found some value in it
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.