首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回Excel宏OneDrive本地路径-可能的引线

返回Excel宏OneDrive本地路径-可能的引线
EN

Stack Overflow用户
提问于 2021-01-07 00:59:33
回答 3查看 4.6K关注 0票数 2

我有一个电子表格,许多人需要访问(在sharepoint上),出于几个原因,我们需要在本地(同步)这样做。

然而,由于每个用户的知识水平不断出现问题和错误,电子表格需要有结构和一致性,因此为了实现这一点,我创建了一个带有一组参数的用户表单,以帮助人们输入准确的数据和避免错误。

它是一个投标登记册,用于输入客户、客户联系和招标信息,生成报价号、文件夹和文件名等。

在OneDrive/Sharepoint路径更改之前(以前文件路径是本地的,现在是sharepoint URL),我有一个宏,当用户单击按钮时运行,它将在相关的本地sharepoint目录中创建一个适当命名的文件夹,在该文件夹中创建一组标准文件夹(客户端文档、合同、产品文件等)。然后打开投标表单并将其保存在创建的文件夹中。文件名(报价号)用于从投标寄存器中查找查询,以返回所有客户端/联系人/报价信息。

由于sharepoint已经将它的path协议从本地更改为URL,所以我无法让它工作,从而导致手动处理,从而导致错误和不一致。

我一直在搜索使用VBA在sharepoint上创建文件夹和文件的方法,以及除禁用"Use Office应用程序同步我打开的Office文件“之外与本地路径交互的方法(由于文件协作而需要此功能)。当我找到一种将URL转换为本地路径的方法时,我有一个希望,但是,这不是最好的解决方案,因为每个用户都在不同级别同步文件夹(也许有人可以帮助我确定路径,一个宏在OneDrive目录中搜索文件夹"2021投标书“并返回路径.认为这可能是缓慢的)

然而,我注意到,如果我去文件>信息,有一个按钮“打开文件位置”,它直接带我到文件的本地路径文件夹,它告诉我这个信息在excel的某个地方,必须有一个方法来检索它,我没有在我的任何搜索中看到过这个引用,在指出它之后,有人对如何或是否可以工作有任何想法吗?我试着记录一个宏,但它根本没有注册它。

任何帮助将不胜感激,并在此之前感谢您。

File > Info - Screenshot

EN

回答 3

Stack Overflow用户

发布于 2021-01-08 00:45:55

对于每个onedrive/sharepoint根同步文件夹(顶级)的子文件夹中的文件,代码工作得很好,但如果文件位于顶层,则不适用。

我遍历了代码,查看了它在每个斜杠中的筛选位置,并将"GetFilePathByRootFolder“函数中的"do while”改为"for“。用"do while“循环计算斜杠的数量,然后对斜杠+1到"RemoveTopFolderFromPath”的数量执行" for“循环,并附加运行,只留下文件名,以便在根文件夹中对文件名进行最后搜索。

希望这是有意义的。

代码语言:javascript
复制
    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
票数 1
EN

Stack Overflow用户

发布于 2022-05-01 19:05:57

这对我有用。我用了环境变量。

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2022-07-22 18:18:07

对于没有直接评论@engineercliff代码(没有足够的声誉点)表示歉意:

简单而有效,我只是用"/“代替了结尾的”/“来使它正常工作:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65605296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档