3

我遇到了一个我无法找到文档的问题。

我一直在用数据填充电子表格。然后我在我的工作表中搜索一个特定的值,我发现其中一些找不到。

我“解决”了我的问题,但我对 Range.Find 的行为感到非常惊讶。

发生的事情是,当我填充工作表时,一些值显示为 ######,因为列大小不够宽。我注意到那些是找不到的值。在我对所有列运行自动调整后,我能够找到每个值。

除了调整列的大小之外,我还能做些什么吗?

编辑更新:

我第一次有这个:

find.Find(day.ToShortDateString(), Type.Missing, Excel.XlFindLookIn.xlValues, 
Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, 
Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);

我将其切换为:

find.Find(day.ToShortDateString(), Type.Missing, Excel.XlFindLookIn.xlFormulas, 
Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, 
Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);

现在列宽不是问题。

在哪些情况下会使用不同的 .XlFindLookIn 参数?

4

1 回答 1

2
Excel.XlFindLookIn.xlValues

根据单元格的 .Text 属性的值进行搜索(我看过一些 MS 论坛帖子,他们说它是基于 .Value2 的,但您的案例清楚地证明了这一点)

Excel.XlFindLookIn.xlFormulas

根据单元格的 .Formula 属性值进行搜索。如果单元格具有固定值或用于该单元格的实际公式,则此属性包含与 .Value2 属性相同的值。

这一切都意味着您自己的解决方案仅在您的工作表仅包含固定值并且不会找到值来自公式的单元格时才有效。

请注意,此搜索行为不是 VSTO 特定的。它与它在 Excel 本身的查找对话框中的工作方式相同,如果您从 VBA 调用 if 也是如此。

最简单的测试用例:

  • 在单元格 A1 中输入 1234567
  • 在单元格 A2 中输入 =A1
  • 调整(缩小)列宽直到你得到 1E+06
  • 转到搜索对话框 (ctrl+f) 并打开展开选项
  • 输入 1234567 作为搜索值
  • 在“公式”中查找“全部查找”将返回“A1”
  • 在“值”中查找“全部查找”将不返回任何内容
  • 现在调整列的大小,使整个值可见并再次启动查找对话框
  • 在“公式”中查找“全部查找”仍将返回“A1”
  • 在“值”中查找的“查找全部”现在将返回“A1”和“A2”
于 2012-10-15T00:08:02.853 回答