为什么Excel会突然在单元格中找到某些内容?
我有一个vba函数,它从工作簿接收一行,并在come列中查找数据,设置变量或不设置变量,这取决于找到的内容。对于第2-16行,一切正常;空单元格将被跳过。突然在第17行,一个看似空的单元格触发第一个if条件 我尝试为包含空字符串的单元格添加额外的检查,并在工作表本身中检查了为什么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
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