gpt4 book ai didi

excel - 为什么条件在 Do-Loop 之外起作用,但在其中给出类型不匹配

转载 作者:行者123 更新时间:2023-12-04 21:58:58 25 4
gpt4 key购买 nike

我在一些 vbscript 代码中有一个 Do-Loop,当我最后一次使用它时(一两个月前)它肯定可以工作。今天它不起作用,出现运行时错误:

Microsfot VBScript runtime error: Type mismatch at line {Line with the Do on it}


这是原始代码:
counter = 0 
Do until objSheet.range(startCell).offset(counter) = ""
counter = counter + 1
Loop
我已经通过添加 if 语句测试了条件是否应该工作:
counter = 0 
call writeLine(objSheet.range(startCell).offset(counter))
if not objSheet.range(startCell).offset(counter) = "" then call writeLine("not blank")
Do until objSheet.range(startCell).offset(counter) = ""
counter = counter + 1
Loop
if 语句执行得很好,在我的输出窗口中我得到:

10100

not blank


但是在第一次尝试时,它仍然在 Do 行上出现类型不匹配。
所以我尝试了另一种 Do Loop:
counter = 0
call writeLine(objSheet.range(startCell).offset(counter))
if not objSheet.range(startCell).offset(counter) = "" then call writeLine("not blank")

Do
if objSheet.range(startCell).offset(counter) = "" then
Exit Do
else
counter = counter + 1
end if
Loop
它仍然输出“10100,不是空白”,即它执行第一个 if 语句绝对没问题,但随后它在 Do-Loop 中的 if 语句上得到类型不匹配。
为什么我得到类型不匹配?
写相同问题的可能更相关的方式: 为什么 If 语句在 Do-Loop 内时有类型不匹配,但在它之外时却没有?

最佳答案

工作表的单元格中可能存在错误值。

尝试

Do 

val = objSheet.range(startCell).offset(counter)
MsgBox TypeName(val)

if VarType(val) = vbError then val = "Error"
MsgBox val

if val = "" then exit do

counter = counter + 1
MsgBox counter

Loop

要清楚:
如果代码尝试将 Excel 单元格错误值与字符串 "" 进行比较,则会引发运行时错误。 .当然,您可以通过错误处理来捕获运行时错误。但是在包含单元格错误值的单元格之后,您将很难读取单元格。因此,我认为这里更好的方法是检查是否存在单元格错误值,如果有,将其转换为字符串。因此不会引发运行时错误。

如果需要确切地知道它是哪个 Excel 单元格错误值,那么可以这样做:
...
if VarType(val) = vbError then val = objSheet.range(startCell).offset(counter).text
MsgBox val
...

关于excel - 为什么条件在 Do-Loop 之外起作用,但在其中给出类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38743021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com