2016-04-07 6 views
1

Ich schreibe ein Excel-Makro, um automatisch eine Anzahl von Word-Dokumenten zu füllen und zu speichern. Es funktioniert großartig auf Office für Mac 2016, aber ich möchte die Kompatibilität mit Windows sicherstellen.Verwenden von GrantAccessToMultipleFiles verhindert Sub-Ausführung unter Windows

Um die Benutzerbelastung durch das Gewähren einzelner Dateiberechtigungen aufgrund von Mac Office Sandboxing zu reduzieren, habe ich die GrantAccessToMultipleFiles command unter Verwendung von ramitarora's helpful solution implementiert.

Da GrantAccessToMultipleFiles ein Mac-spezifischer Befehl ist, stehe ich leider auf einen Compile-Fehler: "Sub oder Funktion nicht definiert", sobald ich versuche, dies unter Windows auszuführen. Gibt es dafür eine Lösung? Da es sich um einen Kompilierungsfehler handelt, kann ich nicht einfach mit "On Error Resume Next" darüber laufen.

Als Referenz ist relevant Code unten:

'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 

Dank.

+0

Ich bin mir nicht sicher über Ihr spezifisches Problem, aber ich hatte ein ähnliches Problem, als ich versuchte, ein Skriptmakro zu haben, das einen offenen Dateidialog auf beiden Systemen mit nur einer Codebasis hätte. Ich habe es irgendwann gelöst. Der Hauptunterschied, den ich zwischen deiner Mine sehe, ist, dass ich entdeckt habe, dass ich den Code in verschiedene Funktionen aufteilen muss und dann eine Picker-Funktion haben muss, um zu entscheiden, welche. Es sieht nicht so aus, als ob dein OSX-spezifischer Code in seine eigene Funktion isoliert worden wäre http://stackoverflow.com/questions/21035212/excel-vb-open-file-osx-and-windows – jskrwyk

+0

Ah, duh, das ist die Lösung ! Ich werde ein separates Sub schreiben und es nur unter OSX aufrufen. Kein Kompilierfehler unter Windows, da dieser nicht aufgerufen wird. Danke für den Vorschlag. – clwatkins

+0

Ich habe hinzugefügt, dass als Antwort, wenn es funktioniert hat, so können Sie es als richtig markieren, um anderen in der Zukunft zu helfen. – jskrwyk

Antwort

0

Sie müssen Ihren OSX- und Windows-Code in verschiedene Funktionen aufteilen und dann nur die entsprechende Funktion aufrufen. Auf diese Weise wird die Funktion mit dem spezifischen Code niemals auf dem falschen System aufgerufen und es gibt kein Problem.

1

Sie auch die bedingte Kompilierung können Mac vs Windows-Code trennen:

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

der Code Speziell für Mac 2016 zu testen oder nicht aussehen sollte:

#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 

Das von der ist Office-Dev Center Dokumentation hier https://dev.office.com/blogs/VBA-improvements-in-Office-2016

ich habe dies getestet, um meinen Makro sowohl OSX und Windows-Betrieb sy läuft Stiele und es funktioniert.

Verwandte Themen