Excel VBA - поиск локального расположения файлов в SharePoint - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть бизнес-аккаунт, который создал папку документов SharePoint, из которой я локально синхронизировал ее с моими компьютерами через OneDrive (на диске D, доступен локально).

В VBA из Excel я знаюесть способ вызвать локальное расположение OneDrive с помощью

environ("OneDrive")

Однако я не знаю, как указать это в своем файле Excel, чтобы найти локальный файл, который хранится в SharePoint.

Причина, по которой это важно, заключается в том, что мне нужно использовать VBA для выполнения слияния, и я обнаружил, что хранимый в SharePoint XLSM не может быть правильно подключен.Вот код:

Private Sub InvitationLetter_Click()
Dim WordApp As New Word.Application, ActionFormDocument As Word.Document, WorksheetName As String
Dim OSPFullPath As String: OSPFullPath = ThisWorkbook.FullName

WorksheetName = ActiveWorkbook.Sheets("Guest Speakers").Name

With WordApp
  .DisplayAlerts = wdAlertsNone
  Set ActionFormDocument = .Documents.Open(ThisWorkbook.Path & "\1.2 - Guest Speaker\02 - Guest Speaker Invitation Letter.docx", _
    ConfirmConversions:=False, ReadOnly:=False, AddToRecentfiles:=False)

  With ActionFormDocument
    With .MailMerge
      .MainDocumentType = wdFormLetters
      .SuppressBlankLines = False
      .OpenDataSource Name:=OSPFullPath, ReadOnly:=False, _
        LinkToSource:=True, AddToRecentfiles:=False, _
        Format:=wdOpenFormatAuto, _
        Connection:="Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;Data Source=OSPFullPath;" & _
        "Mode=Read;Extended Properties=""HDR=YES;IMEX=1"";", _
        SQLStatement:="SELECT * FROM`" & WorksheetName & "$`" & "WHERE `Status` = 'Pending' And `Nomination Details Alert` LIKE '%Urgent%'", _
        SubType:=wdMergeSubTypeAccess
      .ViewMailMergeFieldCodes = 0
      With .DataSource
        .FirstRecord = wdDefaultFirstRecord
        .LastRecord = wdDefaultLastRecord
      End With
    End With
  End With

  .DisplayAlerts = wdAlertsAll

  .Visible = True
  .Activate
End With

Unload Me
End Sub

Мне нужно указать OSPFullPath локально (например, D: \ One Drive \ Excel.xlsm).Я не могу использовать функцию 'полное имя'.

Какой-либо код окружения, который я могу использовать, или в любом случае, чтобы определить местоположение файла?

1 Ответ

0 голосов
/ 23 сентября 2019

следующее может помочь, если я правильно понимаю вопрос, поскольку он получает полное имя рабочей книги на sharepoint: Весь кредит, чтобы ответить здесь 3373470

Private Function Local_Workbook_Name(ByRef wb As Workbook) As String

    Dim i As Long, j As Long
    Dim OneDrivePath As String
    Dim ShortName As String

    'Check if it looks like a OneDrive location
    If InStr(1, wb.FullName, "https://", vbTextCompare) > 0 Then
        'Replace forward slashes with back slashes
        ShortName = Replace(wb.FullName, "/", "\")

        'Remove the first four backslashes
        For i = 1 To 4
            ShortName = Mid(ShortName, InStr(ShortName, "\") + 1)
        Next

        'Loop to see if the tentative LocalWorkbookName is the name of a file that actually exists, if so return the name
        For j = 1 To 3
            OneDrivePath = Environ(Choose(j, "OneDrive", "OneDriveCommercial", "OneDriveConsumer"))
            If Len(OneDrivePath) > 0 Then
                Local_Workbook_Name = OneDrivePath & "\" & ShortName
                If Dir(Local_Workbook_Name) <> "" Then
                    Exit Function
                End If
            End If
        Next j
        'Possibly raise an error here when attempt to convert to a local file name fails - e.g. for "shared with me" files
    End If

    Local_Workbook_Name = wb.FullName

End Function

Есть ещеответы в этой теме и ссылки на другие страницы, которые могут помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...