Ошибка с отказом в разрешении сохранение диаграммы Excel в формате .png на Mac

#excel #vba #macos #permissions

Вопрос:

У меня есть скрипт, который генерирует текстовые поля для видео с использованием некоторого входного текста. Код иногда работает, но часто после перезагрузки что-то меняется в разрешениях, и код возвращает ошибку «Отказано в разрешении». Я запустил утилиту диска для восстановления разрешений, добавил excel для полного доступа к диску, попробовал запросить разрешение для нескольких файлов… Я не могу понять, что в конечном итоге позволяет ему работать до следующей перезагрузки. Я видел много дискуссий по подобным проблемам, но ни одно из исправлений, о которых я упоминал, похоже, не работает. Я использую ОС Catalina и Excel для Mac v. 16.49.

Это линия, которая выходит из строя:

chartFrame.Chart.Export strPiece amp; "/" amp; engName amp; "Approaches.png"

Это общий код (я знаю, что он немного грязный, но он работает, когда работает)

 Dim kanaName As String
Dim japName As String
Dim engName As String
Dim kanaText As String
Dim kanaText2 As String
Dim WSObj As Object
Dim keySheet As Worksheet
Dim tBox As MSForms.TextBox
Dim boxPos As Range
Dim currentDoc As Worksheet
Dim boxString As String
Dim stringLen As Integer
Dim folderScript As String
Dim strPiece As String
Dim folderString As String
Dim folderCheck As String
Dim chartFrame As ChartObject
Dim colorCheck As String
Dim colorMark As Long
Dim filePermissionCandidates As Variant
Dim fileAccessGranted As Boolean

filePermissionCandidates = Array(ThisWorkbook.Path)
fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates)

'Set up
Set currentDoc = Worksheets(1)
kanaName = currentDoc.Cells(2, 1).Value
japName = currentDoc.Cells(3, 1).Value
engName = currentDoc.Cells(4, 1).Value
kanaText = currentDoc.Cells(2, 2).Value
folderString = "/Users/christopherfinlay/Desktop/DQ Box/Battle/" amp; engName
boxString = kanaName amp; kanaText amp; "!" amp; Chr$(10) amp; japName amp; " ga ora wa reta!" amp; Chr$(10) amp; engName amp; " appeared!" amp; Chr$(10) amp; Chr$(10) amp; "A " amp; engName amp; " appeared!"
stringLen = Len(boxString)
currentDoc.Shapes("TextBox1").DrawingObject.Text = boxString
currentDoc.Shapes.Range(Array("TextBox1")).Select
With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, stringLen).Font.Fill
    .Visible = msoTrue
    .ForeColor.RGB = RGB(240, 240, 240)
    .Transparency = 0
    .Solid
End With
currentDoc.Shapes("TextBox1").Width = 550
currentDoc.Shapes("TextBox1").TextFrame2.AutoSize = msoAutoSizeShapeToFitText

strPiece = MacScript("return POSIX path of (" amp; Chr(34) amp; folderString amp; Chr(34) amp; ")")
folderCheck = Dir(strPiece)
If folderCheck = "" Then
    MkDir strPiece
End If
colorCheck = kanaName amp; kanaText
stringLen = Len(colorCheck)
For i = 1 To stringLen
    If AscW(Mid(colorCheck, i, 1)) >= 12448 And AscW(Mid(colorCheck, i, 1)) <= 12543 Then
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(i, 1).Font.Fill
            .Visible = msoTrue
            .ForeColor.RGB = RGB(132, 60, 12)
            .Transparency = 0
            .Solid
        End With
    ElseIf AscW(Mid(colorCheck, i, 1)) > 12543 Then
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(i, 1).Font.Fill
            .Visible = msoTrue
            .ForeColor.RGB = RGB(0, 112, 192)
            .Transparency = 0
            .Solid
        End With
    Else
        With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(i, 1).Font.Fill
            .Visible = msoTrue
            .ForeColor.RGB = RGB(240, 240, 240)
            .Transparency = 0
            .Solid
        End With
    End If
Next
Set chartFrame = ActiveSheet.ChartObjects.Add(Left:=ActiveCell.Left, Width:=currentDoc.Shapes("TextBox1").Width, Top:=currentDoc.Shapes("TextBox1").Top, Height:=currentDoc.Shapes("TextBox1").Height)
chartFrame.ShapeRange.Fill.Visible = msoFalse
chartFrame.ShapeRange.Line.Visible = msoFalse
currentDoc.Shapes("TextBox1").Copy
chartFrame.Activate
ActiveChart.Paste
chartFrame.Chart.Export strPiece amp; "/" amp; engName amp; "Approaches.png"
chartFrame.Delete
 

Комментарии:

1. Привет, Дэррил Динсье! Наконец, не могли бы вы решить эту проблему?