找回密码
 加入
搜索
查看: 1080|回复: 3

[网络通信] 【已解决】使用_Excel_RangeFind搜索指定excel,找不到如何跳过报错

[复制链接]
发表于 2022-2-22 10:18:59 | 显示全部楼层 |阅读模式
本帖最后由 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[0][2], "$", "")
        MsgBox(0, 0, $tmzb1)
EndIf

excel内容如下


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 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, "|", "工作表|名称|单元格|值|公式|注释")

发表于 2022-2-22 12:11:45 | 显示全部楼层
本帖最后由 skysmile 于 2022-2-22 12:23 编辑

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

评分

参与人数 1金钱 +22 收起 理由
jj119120 + 22 很给力!

查看全部评分

 楼主| 发表于 2022-2-22 12:54:48 | 显示全部楼层
skysmile 发表于 2022-2-22 12:11
可以尝试判定返回的数组行数,不管有没有找到,返回的都是个数组,只不过可能是个空数组,你后面的$tin1[0] ...

这个可以  , 完美解决问题
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-3 12:49 , Processed in 0.076658 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表