jj119120 发表于 2022-2-22 10:18:59

【已解决】使用_Excel_RangeFind搜索指定excel,找不到如何跳过报错

本帖最后由 jj119120 于 2022-2-22 12:55 编辑

先上代码
#include <Excel.au3>
Local $oExcel
Local $bianliang = 11
$ti = "\123.xls"
$oExcel = _Excel_Open(False, False, False, False, True)
$oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & $ti)
$Q = $oExcel.activesheet.UsedRange.Rows.Count
$tin1 = _Excel_RangeFind($oWorkbook, $bianliang, "A1:A" & $Q, Default, $xlWhole) ;查找EXCEL
If @error Then
      MsgBox(0, 0, "未找到")
Else
      $tmzb1 = StringReplace($tin1, "$", "")
      MsgBox(0, 0, $tmzb1)
EndIf

excel内容如下


使用_Excel_RangeFind搜索指定excel,找到弹出坐标,找不到会直接报错,我想让他跳过报错,弹出提示未找到,但不知道哪里错了

chzj589 发表于 2022-2-22 11:41:36

本帖最后由 chzj589 于 2022-2-22 11:43 编辑

查看帮助
#include <Array.au3>
#include <Excel.au3>
#include <MsgBoxConstants.au3>


; 创建应用对象并打开示例工作簿
Local $oExcel = _Excel_Open()
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind 示例", "创建 Excel 应用对象发生错误." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oWorkbook = _Excel_BookOpen($oExcel, @ScriptDir & "\Extras\_Excel1.xls")
If @error Then
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind 示例", "打开工作簿发生错误 '" & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _Excel_Close($oExcel)
    Exit
EndIf


; *****************************************************************************
; 查找所有匹配 "=C10*10" 公式的字符串, 精确匹配
; *****************************************************************************
Local $aResult = _Excel_RangeFind($oWorkbook, "=C10*10", "A1:G15", $xlFormulas, $xlWhole)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind 示例 2", "范围搜索失败." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind 示例 2", "查找所有匹配 "=C10*10" 公式的字符串, 精确匹配." & @CRLF & "成功完成数据搜索.")
_ArrayDisplay($aResult, "Excel UDF: _Excel_RangeFind 示例 2", "", 0, "|", "工作表|名称|单元格|值|公式|注释")

skysmile 发表于 2022-2-22 12:11:45

本帖最后由 skysmile 于 2022-2-22 12:23 编辑

可以尝试判定返回的数组行数,不管有没有找到,返回的都是个数组,只不过可能是个空数组,你后面的$tin1就会报错
If UBound($tin1,1)>0 Then
      $tmzb1 = StringReplace($tin1, "$", "")
      MsgBox(0, 0, $tmzb1)
Else
   MsgBox(0, 0, "未找到")
EndIf

jj119120 发表于 2022-2-22 12:54:48

skysmile 发表于 2022-2-22 12:11
可以尝试判定返回的数组行数,不管有没有找到,返回的都是个数组,只不过可能是个空数组,你后面的$tin1 ...

这个可以, 完美解决问题
页: [1]
查看完整版本: 【已解决】使用_Excel_RangeFind搜索指定excel,找不到如何跳过报错