【问题标题】:How to set a VSTO variable with VBA code?如何使用 VBA 代码设置 VSTO 变量?
【发布时间】:2021-02-24 21:45:59
【问题描述】:

我想阻止用户保存 VSTO 项目。

Public Class ThisWorkbook
Private Sub ThisApplication_WorkbookBeforeSave(Wb As Workbook, SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles ThisApplication.WorkbookBeforeSave
    Cancel = True
End Sub
end Class

我的目标是设置一个变量,如 VbaSave(作为布尔值),并在 VBA 中使用一个子变量在该变量上分配 True 或 False,然后保存或不保存项目。

我脑海中的新代码将是:

在 VSTO 中

Public Class ThisWorkbook
public VbaSave as Boolean = false

Private Sub ThisApplication_WorkbookBeforeSave(Wb As Workbook, SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles ThisApplication.WorkbookBeforeSave
    if VbaSave= false then Cancel = True
End Sub
end Class

在 VBA 模块中

sub mysave()
    myPath = Application.GetSaveAsFilename(FileFilter:= _
      "Excel Files (*.xlsx), *.xlsx", title:="Save PO", _
      InitialFileName:=ThisWorkbook.Path)
                    
    If myPath = "Falso" Then
        msgStr = "ATTENTION !!!" & vbCrLf & "operazione annullata," & vbCrLf & _
          "nessun file verrà salvato."
        MsgBox msgStr, vbInformation, "Revi4Utility.Info"
        GoTo done
    Else
        VbaSave=true
        ActiveWorkbook.SaveCopyAs fileName:=myPath
        VbaSave=false
    End If
end sub

当我运行 mysave 时,此示例崩溃。调试告诉我VbaSave 没有定义。

【问题讨论】:

    标签: vba visual-studio vsto


    【解决方案1】:

    我在 VBA 上创建了一个公共布尔变量,以及一个检索变量值的函数。
    在带有.Application.Run 的 VSTO 中,我调用 VBA 函数并获得值。

    VBA 代码:

    ' I define boolean value
    Public SysSave As Boolean  'and I assign False like a STD value on my Ribbon load
        
    'one function to get SysSave value  
    Function CanSave() As Boolean
        CanSave = SysSave
    End Function
    
    ' the sub to save the file  
    sub mysave()
        myPath = Application.GetSaveAsFilename(FileFilter:= _
          "Excel Files (*.xlsx), *.xlsx", title:="Save PO", _
          InitialFileName:=ThisWorkbook.Path)
        If myPath = "Falso" Then
            msgStr = "ATTENTION !!!" & vbCrLf & "operazione annullata," & vbCrLf & "nessun file verrà salvato."
            MsgBox msgStr, vbInformation, "Revi4Utility.Info"
            GoTo done
        Else
            SysSave=true
            ActiveWorkbook.SaveCopyAs fileName:=myPath
            SysSave=false
        End If
    end sub
    

    VSTO 代码:

    'Then I change the VSTO code
    Public Class ThisWorkbook
    Public SysSave As Boolean = False
    
    Private Sub ThisApplication_WorkbookBeforeSave(Wb As Workbook, SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles ThisApplication.WorkbookBeforeSave
        SysSave = Globals.ThisWorkbook.Application.Run("CanSave")
        If SysSave = False Then Cancel = True
    End Sub
    
    End Class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2012-05-14
      • 2011-08-08
      • 1970-01-01
      • 2014-05-10
      • 2018-01-11
      • 1970-01-01
      相关资源
      最近更新 更多