命名范围更改事件未触发

时间:2019-09-05 02:36:29

标签: excel vb.net vsto

我决定将一个包含VBA代码的旧excel文件转换为VSTO应用。工作表中有几个命名范围,并且这些范围可以在运行时(行数)变化。因此,从一开始,范围只有一排,每列有1到多列。 一旦知道需要多少行,就可以相应地调整范围的大小。我遇到的问题是,给定命名范围的给定工作表上的change事件不会针对已添加的新行触发。例如,在工作表中将一个名为scores的命名范围定义为$ E $ 1:$ V $ 1,并在运行时进行更改以将行数扩展到20($ E $ 1:$ V $ 20)。如果第一行上的一列发生更改,则会触发sheetx_scores_change事件,但其他行不会触发。

如果在重新命名之前查看命名范围,它将显示正确的单元格数(18),并且ReferTo属性也正确。调整大小后,ReferTo也将更新,但单元格计数仍为18。

Public Sub Initialize
    for each nr As Excel.Name in allsheets("test").Names
        If nr.Comment = "" then
            r = nr.RefersToRange                 
            nr.RefersTo=r.Resize(lr,r.Columns.count)                                                     
        End if
    Next
End sub

现在,如果我在工作表的代码中更改此大小,则会使用正确的单元格数更新计数,但更改事件将不再触发该范围内的任何单元格。

Sheet Code ...

Private Sub UpdateRange
    system.Diagnostics.debug.print( sheet4_scores.Count & " - " &  
        sheet4_scores.Columns.Count & " - " & Sheet4_Scores.Rows.count)

    Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange
    NamedRange1 = Me.Sheet4_Scores       

    system.Diagnostics.debug.print(NamedRange1.RefersToRange.rows.Count)
    Me.Sheet4_Scores.RefersTo= "='Test'!$e$5:$v$41"

    system.Diagnostics.debug.print( sheet4_scores.Count & " - " &  
        sheet4_scores.Columns.Count & " - " & Sheet4_Scores.Rows.count)
    system.Diagnostics.debug.print( NamedRange1.Count & " - " &  
        NamedRange1.Columns.Count & " - " & NamedRange1.Rows.count)
End Sub

Debug output...
18 - 18 - 1
29
666 - 18 - 37
666 - 18 - 37

那么,如何在运行时更新命名范围,并使所有单元格触发命名范围的更改事件?

0 个答案:

没有答案