如何使用 VBA 将可变文件路径构建为 link 或 MS ACCESS 中的路径
How to build a variable filepath as link or path in MS ACCESS using VBA
我在 MS ACCESS 中遇到以下问题:
使用 VBA,一个 PDF 文件存储在 OneDrive 文件夹中并与 Sharepoint 同步。众所周知,OneDrive 在所有计算机上以相同的方式声明为另一种驱动器。
保存后,文件位于 computer01 的文件夹中:
C:\Users\User01\OneDrive - AllFolders\SharedFolder\AllDocs\Doc01.pdf =>( \USER01 )
现在 computer02 上的用户 02 也连接到该文件夹,他想通过 VBA 打开该文件。 shared table 字段中的文件路径相应为:
C:\Users\User01\OneDrive - AllFolders\SharedFolder\AllDocs\Doc01.pdf
User02当然不能通过VBA打开文件,因为路径应该是:
C:\Users\User02\OneDrive - AllFolders\SharedFolder\AllDocs\Doc01.pdf =>( \USER02 )
例如我尝试使用这样的路径来保存文件(这不是正确的语法!):
(Environ("USERPROFILE")) & "\OneDrive - AllFolders\SharedFolder\AllDocs\Doc01.pdf
but (Environ("USERPROFILE")) as table.field.value当然理解为字符串而不是变量!
如何解决这个问题?谢谢!
我的代码:
Option Compare Database
Option Explicit
Public OneDriveDirectory As String
Public Function SetPathToOneDrive() As String
SetPathToOneDrive = (Environ("USERPROFILE")) & "\OneDrive - AllFolders\SharedFolder\AllDocs\"
End Function
Sub SaveDoc()
Dim xSource As String, xDestination As String, xFilename As String
Dim FSO As Object
Dim db As DAO.Database
Dim rs As DAO.Recordset
OneDriveDirectory = SetPathToOneDrive
xFilename = "Doc01.pdf"
xSource = (Environ("USERPROFILE")) & "\" & xFilename
xDestination = OneDriveDirectory & xFilename
Set db = CurrentDb
Set rs = db.OpenRecordset("tblDocLinks", dbOpenDynaset)
Set FSO = VBA.CreateObject("Scripting.FileSystemObject")
Call FSO.CopyFile(xSource, xDestination)
With rs
.AddNew
.Fields("fldDocPath") = xDestination
.Update
End With
rs.close
db.close
End Sub
有
SetPathToOneDrive = Environ$("%UserProfile%") & "\OneDrive - All Folders\SharedFolder\AllDocs\"
你应该得到正确的路径。
你确定路径正确吗?默认值类似于 C:\Users\username\OneDrive\...
根据环境,在数据库中存储绝对文件路径可能不是一个好主意。我倾向于只保存文件名并在 VBA 中一起构建路径,通常使用从 config-table 或 -file.
中获取的值
我在 MS ACCESS 中遇到以下问题:
使用 VBA,一个 PDF 文件存储在 OneDrive 文件夹中并与 Sharepoint 同步。众所周知,OneDrive 在所有计算机上以相同的方式声明为另一种驱动器。
保存后,文件位于 computer01 的文件夹中:
C:\Users\User01\OneDrive - AllFolders\SharedFolder\AllDocs\Doc01.pdf =>( \USER01 )
现在 computer02 上的用户 02 也连接到该文件夹,他想通过 VBA 打开该文件。 shared table 字段中的文件路径相应为:
C:\Users\User01\OneDrive - AllFolders\SharedFolder\AllDocs\Doc01.pdf
User02当然不能通过VBA打开文件,因为路径应该是:
C:\Users\User02\OneDrive - AllFolders\SharedFolder\AllDocs\Doc01.pdf =>( \USER02 )
例如我尝试使用这样的路径来保存文件(这不是正确的语法!):
(Environ("USERPROFILE")) & "\OneDrive - AllFolders\SharedFolder\AllDocs\Doc01.pdf
but (Environ("USERPROFILE")) as table.field.value当然理解为字符串而不是变量!
如何解决这个问题?谢谢!
我的代码:
Option Compare Database
Option Explicit
Public OneDriveDirectory As String
Public Function SetPathToOneDrive() As String
SetPathToOneDrive = (Environ("USERPROFILE")) & "\OneDrive - AllFolders\SharedFolder\AllDocs\"
End Function
Sub SaveDoc()
Dim xSource As String, xDestination As String, xFilename As String
Dim FSO As Object
Dim db As DAO.Database
Dim rs As DAO.Recordset
OneDriveDirectory = SetPathToOneDrive
xFilename = "Doc01.pdf"
xSource = (Environ("USERPROFILE")) & "\" & xFilename
xDestination = OneDriveDirectory & xFilename
Set db = CurrentDb
Set rs = db.OpenRecordset("tblDocLinks", dbOpenDynaset)
Set FSO = VBA.CreateObject("Scripting.FileSystemObject")
Call FSO.CopyFile(xSource, xDestination)
With rs
.AddNew
.Fields("fldDocPath") = xDestination
.Update
End With
rs.close
db.close
End Sub
有
SetPathToOneDrive = Environ$("%UserProfile%") & "\OneDrive - All Folders\SharedFolder\AllDocs\"
你应该得到正确的路径。
你确定路径正确吗?默认值类似于 C:\Users\username\OneDrive\...
根据环境,在数据库中存储绝对文件路径可能不是一个好主意。我倾向于只保存文件名并在 VBA 中一起构建路径,通常使用从 config-table 或 -file.
中获取的值