获取聚焦细胞中的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; }