获取聚焦细胞中的Excel当前值

我正在开发一个Excel加载项。 我需要从A1单元格获取值,所以我使用这个代码

value = workbook.Worksheets[1].Range["A1:A1"].Value2; 

这很好,但如果:
– 上一个单元值是“1”
– 用户键入“2”,但不按Enter或Tab
– 用户激活function区按下button

从此代码示例获得的值2是“1”(以前的值)不是“2”(当前值显示在单元格中,但未validation)。 这在我的情况是错误的,我需要“2”。
我怎样才能解决这个问题?


我试图强制select另一个单元格

  Application.ActiveCell.Offset[1, 0].Select(); 

要么

  Application.ActiveSheet.Range["A2"].Select(); 

但没办法..“2”的价值是失去了。


我也尝试从工具栏中的文本区域获得价值(“2”显示在那里),但不知道锄头做!

当Excel处于编辑模式时( 类似于 在Excel的单元格中 F2 ),function区和VBA编辑器上的大多数button变得不可访问。

话虽如此, VBA代码可以在Edit模式下运行吗? 是的,它可以显示在这个链接

要回答你的问题,你将不得不使用API​​来捕获密钥,然后找出当前的单元格值。 相信我,这是不值得的痛苦。

简单的select

使用ExcelApp.Interactive检查Excel的编辑模式。 如果Excel处于编辑模式,则通知用户退出单元格,然后重试。 在网上进行了一次快速检查,发现了一个类似的例子。请参阅2000 – 2010年所有Excel版本的正确解决scheme一节

此代码在vb.net中,但可以很容易地转换为C#

 Function IsEditing() As Boolean If ExcelApp.Interactive = False Then Return False Try ExcelApp.Interactive = False ExcelApp.Interactive = True Catch Return True End Try Return False End Function 

来自Chat的C#代码

 bool IsEditing() { if (Globals.ThisAddIn.Application.Interactive == false) return false; try { Globals.ThisAddIn.Application.Interactive = false; Globals.ThisAddIn.Application.Interactive = true; } catch (Exception e) { return true; } return false; }