Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Excel会突然在单元格中找到某些内容?_Excel_Vba - Fatal编程技术网

为什么Excel会突然在单元格中找到某些内容?

为什么Excel会突然在单元格中找到某些内容?,excel,vba,Excel,Vba,我有一个vba函数,它从工作簿接收一行,并在come列中查找数据,设置变量或不设置变量,这取决于找到的内容。对于第2-16行,一切正常;空单元格将被跳过。突然在第17行,一个看似空的单元格触发第一个if条件 我尝试为包含空字符串的单元格添加额外的检查,并在工作表本身中检查了code(H17),它是#VALUE Function calcID(r As Long) As Variant If (Not IsEmpty(allProps.Cells(r, 8))) Or (Not allPr

我有一个vba函数,它从工作簿接收一行,并在come列中查找数据,设置变量或不设置变量,这取决于找到的内容。对于第2-16行,一切正常;空单元格将被跳过。突然在第17行,一个看似空的单元格触发第一个if条件

我尝试为包含空字符串的单元格添加额外的检查,并在工作表本身中检查了
code(H17)
,它是
#VALUE

Function calcID(r As Long) As Variant
    If (Not IsEmpty(allProps.Cells(r, 8))) Or (Not allProps.Cells(r, 8).Value = "") Then
        MsgBox "Found ID: " & allProps.Cells(r, 8).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 8).Value)
    ElseIf Not IsEmpty(allProps.Cells(r, 9)) Or Not allProps.Cells(r, 9).Value = "" Then
        MsgBox "Found reverse ID: " & allProps.Cells(r, 9).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 9).Value)
    Else
        calcID = ""
    End If
End Function
我在其他地方使用CDate,效果很好。最终,当我进入
if
时,错误就会出现,因为我认为CDate没有一个字符串可以使用


单元格中以=开头的部分值在excel中作为公式

对于eg:=test,在excel中将其视为一个有如下错误的公式

我确实遇到了类似的问题,并通过比较单元格中的值和删除单元格中不需要的=值来解决它。
请确保该单元格中没有任何值使excel认为它是公式或单元格引用。

单元格中以=开头的部分值在excel中被视为公式

对于eg:=test,在excel中将其视为一个有如下错误的公式

我确实遇到了类似的问题,并通过比较单元格中的值和删除单元格中不需要的=值来解决它。
请确保该单元格中没有任何值使excel认为它是公式或单元格引用。

我认为您只希望处理非空且不等于emptystring的单元格。如果某个单元格不为空但等于emptystring,这将防止出现奇怪的行为

将逻辑OR更改为ANDs

Function calcID(r As Long) As Variant
    If (Not IsEmpty(allProps.Cells(r, 8))) And (Not allProps.Cells(r, 8).Value = "") Then
        MsgBox "Found ID: " & allProps.Cells(r, 8).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 8).Value)
    ElseIf Not IsEmpty(allProps.Cells(r, 9)) And Not allProps.Cells(r, 9).Value = "" Then
        MsgBox "Found reverse ID: " & allProps.Cells(r, 9).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 9).Value)
    Else
        calcID = ""
    End If
End Function

我认为您只想处理非空且不等于emptystring的单元格。如果某个单元格不为空但等于emptystring,这将防止出现奇怪的行为

将逻辑OR更改为ANDs

Function calcID(r As Long) As Variant
    If (Not IsEmpty(allProps.Cells(r, 8))) And (Not allProps.Cells(r, 8).Value = "") Then
        MsgBox "Found ID: " & allProps.Cells(r, 8).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 8).Value)
    ElseIf Not IsEmpty(allProps.Cells(r, 9)) And Not allProps.Cells(r, 9).Value = "" Then
        MsgBox "Found reverse ID: " & allProps.Cells(r, 9).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 9).Value)
    Else
        calcID = ""
    End If
End Function

该单元格中可能有空格、
”或多个空格吗?我的理解是,如果
=code(H17)
产生
#值
,那么不,它不是空格,是H17还是J17?你能检查一下Excel界面的内容吗?。。。这就是你的问题,你的猫把一团羊毛丢进了电子表格,这把所有的公式都搞乱了!:-)空格和不可打印字符仍然会增加单元格值的长度(即使您看不到它们)。如果Len(Trim(Application.WorksheetFunction.Clean(allProps.Cells(r,8)))>0,为什么不测试
,然后
该单元格中是否有一个空格、
“”
,或多个空格?我的理解是,如果
=code(H17)
导致
\VALUE
则不,它不是空格,是H17还是J17?你能检查一下Excel界面的内容吗?。。。这就是你的问题,你的猫把一团羊毛丢进了电子表格,这把所有的公式都搞乱了!:-)空格和不可打印字符仍然会增加单元格值的长度(即使您看不到它们)。如果Len(Trim(Application.WorksheetFunction.Clean(allProps.Cells(r,8)))>0,那么
单元格H17中就没有“=”,为什么不测试
;我在单元格中单击并点击了delete等。您可以通过调试代码来获取单元格的运行时值吗?看起来像
calcID=Empty
单元格H17中没有“=”;我在单元格中单击并点击了delete等。您可以通过调试代码来获取单元格的运行时值吗?看起来像
calcID=Empty