【问题标题】:Excel Addin not executing Call FunctionExcel Addin 未执行调用函数
【发布时间】:2023-03-29 01:39:02
【问题描述】:

我有一个共享点站点,我使用 vba 上传新数据。我创建了一个 Excel 插件,我们将把它部署给其他用户,以便任何人都可以上传。

Excel 插件由两个模块组成。第一个模块是“功能”模块,第二个是在插件上按下按钮时运行的代码。如果我用普通的 Excel 宏工作簿测试所有这些,它就完美了。但是,当我在 Addin 功能中对其进行测试时,“调用 SaveChanges”部分不起作用。

有人知道是什么导致这部分无法工作吗?我什至尝试在 Addin 上为 SaveChanges 部分添加另一个按钮,但仍然无法作为 Addin。

它调用的 SaveChanges Sub 将数据保存回共享点。

模块 1

Option Explicit
Sub link_edit_Mode()
    
    Dim mySh As Worksheet
    Dim spSite As String
    
    Set mySh = Sheets("Sheet1")
    
    Dim src(0 To 1) As Variant
    
    spSite = "https://share.websitehere.com/sites/sitename/" 'site name
    src(0) = spSite & "/_vti_bin"
    
    src(1) = "{00000000-8F5B-4736-B48F-337D350E18C1}" 'GUID
    
    mySh.ListObjects.Add xlSrcExternal, src, True, xlYes, mySh.Range("A1")
    
End Sub

Sub SaveChanges()

   Dim mySh As Worksheet
   Dim lstOBJ As ListObject

   On Error GoTo errhdnler
   
   Set mySh = Sheets("Sheet1")
   Set lstOBJ = mySh.ListObjects(1)
   
   lstOBJ.UpdateChanges xlListConflictDialog
   
   Set mySh = Nothing
   Set lstOBJ = Nothing
   
Exit Sub
errhdnler:

Debug.Print Err.Description & Err.Number

End Sub

Sub refresh_Con()

   Dim mySh As Worksheet
   Dim lstOBJ As ListObject

On Error GoTo errhdnler

   Set mySh = Sheets("Sheet1")
   
   Set lstOBJ = mySh.ListObjects(1)
   
   lstOBJ.Refresh
  
   Set mySh = Nothing
   Set lstOBJ = Nothing
   
Exit Sub

errhdnler:

Debug.Print Err.Description & Err.Number

End Sub

模块 2

Sub FollowUps(control As IRibbonControl)
'
Dim lCopyLastRow As Long
Dim lDestLastRow As Long
Dim wsCopy As Worksheet
Dim wsDest As Worksheet

Rows("1:5").Select
Range("A5").Activate
Selection.Delete Shift:=xlUp
Columns("H:H").EntireColumn.AutoFit
Columns("I:I").EntireColumn.AutoFit

Sheets.Add.Name = "Sheet1"

' Worksheets("Sheet1").Visible = True

Call link_edit_Mode

Do While (Selection.Offset(1, 0) <> "")
   Range("A3").Select
   Selection.ListObject.ListRows(1).Delete
Selection.Offset(1, 0).Select
Range("A2").Select

Loop

'Set variables for copy and destination sheets
Set wsCopy = Workbooks("SA_Follow_Ups.xlsx").Worksheets("Follow Ups OpenUnresolved Over")
Set wsDest = Workbooks("SA_Follow_Ups.xlsx").Worksheets("Sheet1")

'1. Find last used row in the copy range based on data in column A
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row

'2. Find first blank row in the destination range based on data in column A
'Offset property moves down 1 row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(0).Row

'3. Copy & Paste Data
wsCopy.Range("A2:I" & lCopyLastRow).copy
wsDest.Range("B" & lDestLastRow).PasteSpecial xlValues

Call SaveChanges

ActiveWindow.SelectedSheets.Visible = False

End Sub

【问题讨论】:

    标签: excel vba excel-addins


    【解决方案1】:

    如果您将代码用作加载项,则需要指定不再将某些内容保存在加载项本身的工作表中,而是保存在 ActiveWorkbook 工作表中。

    所以你需要添加几行:

    Dim wb As Workbook
    Set wb = Application.ActiveWorkbook
    Set mySh= wb.Sheets("Sheet1")
    

    【讨论】:

    • 我试过了,还是不行?
    • 您是否在所有需要的功能中实现了这一点?
    • 非常感谢,我做到了,我在保存功能的模块中更改了它但不起作用。
    • 它会在调试窗口中给出任何错误吗?因为那是 SaveChanges 代码的一部分
    • 完全没有错误,我什至试图不隐藏在 savechanges 调用之后出现的工作表,但这没有用。奇怪的是,它可以完美地作为工作簿使用,但它只是作为一个插件来解决这个问题。
    【解决方案2】:

    所以我想通了。

    Sub SaveChanges()
    
       Dim mySh As Worksheet
       Dim objListObj As ListObject
    
       On Error GoTo errhdnler
       
       Set mySh = ActiveWorkbook.Worksheets("Sheet1")
       Set objListObj = mySh.ListObjects("Table1")
       
       objListObj.UpdateChanges xlListConflictDialog
       
       Set mySh = Nothing
       Set objListObj = Nothing
       
    Exit Sub
    errhdnler:
    
    Debug.Print Err.Description & Err.Number
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2021-09-05
      相关资源
      最近更新 更多