C# 我如何确定新的&;Excel中SheetChange事件上的上一个单元格值?
我的Excel工作簿中有一些特殊的单元格,这些单元格由我的Excel加载项管理。我想阻止用户更改这些单元格的内容,但我也想知道,用户希望为这些单元格输入什么值。在SheetChange事件中,我可以检查哪些用户输入了我的特殊单元格,但如何确定这些单元格中的先前值并还原用户更改C# 我如何确定新的&;Excel中SheetChange事件上的上一个单元格值?,c#,excel,vsto,C#,Excel,Vsto,我的Excel工作簿中有一些特殊的单元格,这些单元格由我的Excel加载项管理。我想阻止用户更改这些单元格的内容,但我也想知道,用户希望为这些单元格输入什么值。在SheetChange事件中,我可以检查哪些用户输入了我的特殊单元格,但如何确定这些单元格中的先前值并还原用户更改 这不是我的解决办法。若我将单元格锁定在Excel中,它将变为只读-在这种情况下,用户甚至无法尝试在此单元格中输入任何内容-Excel弹出警告对话框。我的问题是,我想捕获用户输入到我的单元格中的内容,使用此值执行某些操作,
这不是我的解决办法。若我将单元格锁定在Excel中,它将变为只读-在这种情况下,用户甚至无法尝试在此单元格中输入任何内容-Excel弹出警告对话框。我的问题是,我想捕获用户输入到我的单元格中的内容,使用此值执行某些操作,然后将单元格内容还原为原始值。如果需要防止用户更改值,为什么不锁定单元格(右键单击,格式化单元格,锁定),然后保护工作表(工具保护工作表)。当以编程方式更改单元格时,更改locked属性,并在计算后将其更改回来类似的内容如何,在VBA中,但应该很容易转换为C#
我会在一张隐藏的纸上保存一份单元格的副本
然后,当用户更改单元格时,可以很容易地在隐藏的工作表上找到匹配的单元格。也许在输入单元格时可以捕获值:
Option Explicit
Dim LastText As String
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
LastText = Target.Value
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Source As Range)
Debug.Print LastText; Source
End Sub
我使用
应用程序解决了这个问题。撤消检查更改是否无效。所以缓存单元格值是唯一的解决方案。我将有数百个要缓存的单元格:-)考虑使用字典(或集合,但字典更快)来存储值,记住匹配的范围不需要是矩形的,例如范围(“A1:B4,C7:D8,E4,F7:G10”),这样就可以在一个交集中对其进行监控。
Option Explicit
Dim LastText As String
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
LastText = Target.Value
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Source As Range)
Debug.Print LastText; Source
End Sub