2016-04-07 54 views
1

我正在寫一個Excel宏來自動填充和保存大量的Word文檔。它適用於Office 2016 for Mac 2016,但我希望確保與Windows的交叉兼容性。使用GrantAccessToMultipleFiles可以防止在Windows上運行子版

爲了減少由於Mac Office沙箱而給予單個文件許可的用戶負擔,我實現了GrantAccessToMultipleFiles command,使用ramitarora's helpful solution

不幸的是,因爲GrantAccessToMultipleFiles是一個特定於Mac的命令,所以我嘗試在Windows上運行時遇到了編譯錯誤:「Sub or Function not defined」。有針對這個的解決方法嗎?因爲這是一個編譯錯誤,我不能用「On Error Resume Next」來運行它。

作爲參考,有關代碼如下:

'Operating System check: if pos=0, user is on OSX 
Dim pos As Integer 
pos = InStr(Application.OperatingSystem, "Windows") 

'If on OSX ask for file permissions in bulk 
If pos = 0 Then 
    Dim fileAccessGranted As Boolean 
    Dim filePermissionCandidates 
    Dim filePathsArray As String 

    filePathsArray = filePaths(0) 

    For i = 0 To studentNum 
     filePathsArray = filePathsArray & ", " & filePaths(i + 1) 
    Next i 

    'Create an array with file paths for which permissions are needed 
    filePermissionCandidates = Array(filePathsArray) 

    'Request access from user 
    fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates) 
End If 

感謝。

+0

我不確定你的具體問題,但我有一個類似的問題,當我試圖讓一個腳本宏在兩個只有一個代碼庫的系統上有一個打開的文件對話框。我最終解決了它。我在你的礦區中看到的主要區別是,我發現我必須將代碼分成不同的函數,然後有一個選擇器函數來決定哪一個函數。它看起來不像你的OSX特定的代碼已被孤立到它自己的函數http://stackoverflow.com/questions/21035212/excel-vb-open-file-osx-and-windows – jskrwyk

+0

啊,杜,這就是解決方案!我將編寫一個單獨的子文件並僅在OSX上調用它。因爲它不會被調用,Windows上沒有編譯錯誤。感謝您的建議。 – clwatkins

+0

我已經添加了,如果它的工作,以便您可以標記爲正確的,以幫助其他人在未來。 – jskrwyk

回答

0

您必須將您的OSX和Windows代碼分隔成不同的功能,然後才能調用相關功能。這樣,具有特定代碼的功能就不會在錯誤的系統上調用,並且沒有問題。

1

您還可以使用條件編譯來VS Windows代碼單獨的MAC:

#If Mac then 
'your Mac code 
#Else 
'Windows code 
#End If 
1

具體而言,編碼到測試的Mac 2016或不應該是這樣的:

#If MAC_OFFICE_VERSION >= 15 Then 
    ' Do thing for Office for Mac 2016 (now at version 15.26) 
#Else 
    'Do thing for Windows 
#End If 

這是從這裏的Office開發中心文檔 https://dev.office.com/blogs/VBA-improvements-in-Office-2016

我測試過這個在OSX和Windows操作系統上運行我的宏莖和它的作品。

相關問題