Как запустить макрос Excel при обновлении файла? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть PowerApp, который обновляет ячейку в файле Excel, размещенном в OneDrive. Файл Excel содержит макрос, который должен запускаться, когда PowerApp изменяет файл Excel. Однако этого не происходит. Если я обновлю ячейку вручную, макрос будет работать нормально. Он просто не активируется, когда файл обновляется PowerApps.

Могу ли я использовать другую функцию, которая будет срабатывать, когда PowerApp изменяет файл?

Если это невозможно, могу ли я использовать Flow для активации макроса?

Вот текущий скрипт, который работает с ручными изменениями, но не с автоматическими изменениями PowerApps.

Private Sub Worksheet_Change(ByVal Target As Range)
    Call InsertImageTest
End Sub

Вот макрос, который я хочу вызвать, используя код выше.

Sub InsertImageTest()

' This macro inserts an image from a set location to a set cell.

Dim ws As Worksheet
Dim imagePath As String
Dim cell As String
Dim posText As String
Dim imgLeft As Double
Dim imgTop As Double
Dim rngX As Range
Dim activeSheetName As String

' Customizable variables
imagePath = ActiveWorkbook.Path & Range("$B$2").Value
posText = "Signature"
activeSheetName = "Data" ' Set to "Data" by default, but will change to the Active sheets name, if the active sheet is not called "Data"

' For i = 1 To Sheets.Count
'    If CStr(Sheets(i).Name) Is CStr(activeSheetName) Then
'        Debug.Print "Code can be executed! Data tab was found"
'    End If
' Next i

cell = "$A$1"

Set ws = ActiveSheet
Set rngX = Worksheets(activeSheetName).Range("A1:Z1000").Find(posText, lookat:=xlPart)
If Not rngX Is Nothing Then
    cell = rngX.Address
    Debug.Print cell
    Debug.Print rngX.Address & " cheating"
    Worksheets(activeSheetName).Range(cell).Value = ""

    Debug.Print rngX.Address & " real"

    imgLeft = Range(cell).Left
    imgTop = Range(cell).Top

    ' Width & Height = -1 means keep original size
    ws.Shapes.AddPicture _
    Filename:=imagePath, _
    LinkToFile:=msoFalse, _
    SaveWithDocument:=msoTrue, _
    Left:=imgLeft, _
    Top:=imgTop, _
    Width:=-1, _
    Height:=-1
End If

' The code beaneath will resize the cell to fit the picture
For Each Picture In ActiveSheet.DrawingObjects
PictureTop = Picture.Top
PictureLeft = Picture.Left
PictureHeight = Picture.Height
PictureWidth = Picture.Width
For N = 2 To 256
If Columns(N).Left > PictureLeft Then
PictureColumn = N - 1
Exit For
End If
Next N
For N = 2 To 65536
If Rows(N).Top > PictureTop Then
PictureRow = N - 1
Exit For
End If
Next N
Rows(PictureRow).RowHeight = PictureHeight
Columns(PictureColumn).ColumnWidth = PictureWidth * (54.29 / 288)
Picture.Top = Cells(PictureRow, PictureColumn).Top
Picture.Left = Cells(PictureRow, PictureColumn).Left
Next Picture

End Sub

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

К сожалению, сервер открывает Excel через API, и Excel не запускает макросы таким образом.Кажется, поток имеет то же самое .Я хотел бы рассмотреть реализацию макрофункции логики в PowerApps.Настройте форму редактирования столбца, который предполагает запуск макроса, зависит от того, что макрос должен делать.Возможно, разблокируйте карту данных, если макрос пытается изменить значение другого столбца.

0 голосов
/ 25 июня 2019

Попробуйте:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  'Your Code Here
End Sub
...