我有一个电子表格,许多人需要访问(在sharepoint上),出于几个原因,我们需要在本地(同步)这样做。
然而,由于每个用户的知识水平不断出现问题和错误,电子表格需要有结构和一致性,因此为了实现这一点,我创建了一个带有一组参数的用户表单,以帮助人们输入准确的数据和避免错误。
它是一个投标登记册,用于输入客户、客户联系和招标信息,生成报价号、文件夹和文件名等。
在OneDrive/Sharepoint路径更改之前(以前文件路径是本地的,现在是sharepoint URL),我有一个宏,当用户单击按钮时运行,它将在相关的本地sharepoint目录中创建一个适当命名的文件夹,在该文件夹中创建一组标准文件夹(客户端文档、合同、产品文件等)。然后打开投标表单并将其保存在创建的文件夹中。文件名(报价号)用于从投标寄存器中查找查询,以返回所有客户端/联系人/报价信息。
由于sharepoint已经将它的path协议从本地更改为URL,所以我无法让它工作,从而导致手动处理,从而导致错误和不一致。
我一直在搜索使用VBA在sharepoint上创建文件夹和文件的方法,以及除禁用"Use Office应用程序同步我打开的Office文件“之外与本地路径交互的方法(由于文件协作而需要此功能)。当我找到一种将URL转换为本地路径的方法时,我有一个希望,但是,这不是最好的解决方案,因为每个用户都在不同级别同步文件夹(也许有人可以帮助我确定路径,一个宏在OneDrive目录中搜索文件夹"2021投标书“并返回路径.认为这可能是缓慢的)
然而,我注意到,如果我去文件>信息,有一个按钮“打开文件位置”,它直接带我到文件的本地路径文件夹,它告诉我这个信息在excel的某个地方,必须有一个方法来检索它,我没有在我的任何搜索中看到过这个引用,在指出它之后,有人对如何或是否可以工作有任何想法吗?我试着记录一个宏,但它根本没有注册它。
任何帮助将不胜感激,并在此之前感谢您。

发布于 2021-01-08 00:45:55
对于每个onedrive/sharepoint根同步文件夹(顶级)的子文件夹中的文件,代码工作得很好,但如果文件位于顶层,则不适用。
我遍历了代码,查看了它在每个斜杠中的筛选位置,并将"GetFilePathByRootFolder“函数中的"do while”改为"for“。用"do while“循环计算斜杠的数量,然后对斜杠+1到"RemoveTopFolderFromPath”的数量执行" for“循环,并附加运行,只留下文件名,以便在根文件夹中对文件名进行最后搜索。
希望这是有意义的。
Public Function GetFilePathByRootFolder(ByVal RootFolder As String, ByVal SearchPath As String) As String
Dim result As String
Dim evalPath As String
Dim testFilePath As String
Dim slashCounter As Integer 'added by AC
Dim i As Integer 'added by AC
Dim oneDrivePathFound As Boolean
evalPath = IIf(InStr(SearchPath, "\") = 0, "\", vbNullString) & SearchPath
slashCounter = 0 'added by AC
Do While evalPath Like "*\*" 'added by AC
slashCounter = slashCounter + 1 'added by AC
evalPath = RemoveTopFolderFromPath(evalPath) 'added by AC
Loop 'added by AC
slashCounter = slashCounter + 1
evalPath = IIf(InStr(SearchPath, "\") = 0, "\", vbNullString) & SearchPath
For i = 1 To slashCounter 'added by AC
testFilePath = RootFolder & IIf(Left$(evalPath, 1) <> "\", "\", vbNullString) & evalPath 'added by AC
Debug.Print testFilePath 'added by AC
If Not (Dir(testFilePath)) = vbNullString Then 'added by AC
oneDrivePathFound = True 'added by AC
Exit For 'added by AC
End If 'added by AC
'remove top folder in path 'added by AC
evalPath = RemoveTopFolderFromPath(evalPath) 'added by AC
Next i 'added by AC
' Do While evalPath Like "*\*" ' change loop to "for each \ in evalPath +1"
' testFilePath = RootFolder & IIf(Left$(evalPath, 1) <> "\", "\", vbNullString) & evalPath
' Debug.Print testFilePath
' If Not (Dir(testFilePath)) = vbNullString Then
' oneDrivePathFound = True
' Exit Do 'exit for
' End If
' 'remove top folder in path
' evalPath = RemoveTopFolderFromPath(evalPath)
' Loop
If oneDrivePathFound = True Then
result = testFilePath
Else
result = vbNullString
End If
GetFilePathByRootFolder = result
End Function发布于 2022-05-01 19:05:57
这对我有用。我用了环境变量。
OneDrive = Environ("OneDrive")
CurPath = Application.ThisWorkbook.Path
If (InStr(1, Left(CurPath, 4), "http", vbTextCompare)) Then
SubPathPos = InStr(30, CurPath, "/", vbTextCompare)
CurPath = OneDrive & Right(CurPath, Len(CurPath) - SubPathPos + 1)
End If
ChDir (CurPath)发布于 2022-07-22 18:18:07
对于没有直接评论@engineercliff代码(没有足够的声誉点)表示歉意:
简单而有效,我只是用"/“代替了结尾的”/“来使它正常工作:
OneDrive = Environ("OneDrive")
CurPath = Application.ThisWorkbook.Path
If (InStr(1, Left(CurPath, 4), "http", vbTextCompare)) Then
SubPathPos = InStr(30, CurPath, "/", vbTextCompare)
CurPath = OneDrive & Right(CurPath, Len(CurPath) - SubPathPos + 1)
Curpath = Replace(Curpath, "/", "\")
End If
ChDir (CurPath)https://stackoverflow.com/questions/65605296
复制相似问题