CurDir()
Функция возвращает текущий путь.
И
Он начинается с пути пользователя по умолчанию, как правило, мои-документы. Если пользователь просматривает другой путь через пользовательский интерфейс (например, Open/Save) CurDir
, он вернет это. Теоретически несколько экземпляров различных приложений Office могут возвращать разные CurDir
одновременно.
CurDir
для хоста приложения можно изменить с помощью ChDir
Вы можете использовать этот код и GetOutlookPath()
функции:
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const REG_SZ As Long = 1
Private Const KEY_ALL_ACCESS = &H3F
Private Const HKEY_LOCAL_MACHINE = &H80000002
Public Function GetOutlookPath() As String
GetOutlookPath = GetOfficeAppPath("Outlook.Application")
End Function
Private Function GetOfficeAppPath(ByVal ProgID As String) As String
Dim lKey As Long
Dim lRet As Long
Dim sClassID As String
Dim sAns As String
Dim lngBuffer As Long
Dim lPos As Long
'GetClassID
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\Classes\" & ProgID & "\CLSID", 0&, KEY_ALL_ACCESS, lKey)
If lRet = 0 Then
lRet = RegQueryValueEx(lKey, "", 0&, REG_SZ, "", lngBuffer)
sClassID = Space(lngBuffer)
lRet = RegQueryValueEx(lKey, "", 0&, REG_SZ, sClassID, lngBuffer)
'drop null-terminator
sClassID = Left(sClassID, lngBuffer - 1)
RegCloseKey lKey
End If
'Get AppPath
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\Classes\CLSID\" & sClassID & "\LocalServer32", 0&, KEY_ALL_ACCESS, lKey)
If lRet = 0 Then
lRet = RegQueryValueEx(lKey, "", 0&, REG_SZ, "", lngBuffer)
sAns = Space(lngBuffer)
lRet = RegQueryValueEx(lKey, "", 0&, REG_SZ, sAns, lngBuffer)
sAns = Left(sAns, lngBuffer - 1)
RegCloseKey lKey
End If
'Sometimes the registry will return a switch beginning with "/" e.g., "/automation"
lPos = InStr(sAns, "/")
If lPos > 0 Then
sAns = Trim(Left(sAns, lPos - 1))
End If
GetOfficeAppPath = sAns
End Function
Когда вы говорите 'program' - вы имеете в виду перспективы или VB Проект? Либо будет статичным, так зачем вам нужно использовать 'CurDir()'? –
'CurDir' предоставляет вам каталог, из которого выполняется код. Если код выполняется с рабочего стола, вы получите '% USERPROFILE% \ Desktop \' ' – PaulFrancis
@PaulFrancis, вы имеете в виду в VBA? Я уверен, что 'CurDir()' при использовании в Office возвращает текущий каталог _working_, например, в Excel, который вы бы использовали 'ThisWorkbook.Path', чтобы получить путь, из которого выполняется код, и' CurDir() 'будет не обязательно должен быть одним и тем же путем. –