gpt4 book ai didi

vba - 在 for 循环中键入不匹配,包括对工作表单元格值的测试

转载 作者:行者123 更新时间:2023-12-04 20:37:43 26 4
gpt4 key购买 nike

我在 VBA 宏中收到类型不匹配错误。这是我的代码的重要部分:

Public Function CalculateSum(codes As Collection, ws As Worksheet) As Double

On Error GoTo ErrorHandler

If ws Is Nothing Then
MsgBox ("Worksheet is necessery")
Exit Function
End If


Dim balanceColumnIndex, codesCulumnIndex As Integer
Dim searchStartRow, searchEndRow As Integer
balanceColumnIndex = 17
codesColumnIndex = 4
searchStartRow = 7
searchEndRow = ws.Cells(ws.Rows.Count, codesColumnIndex).End(xlUp).Row

Dim result As Double
result = 0#

For counter = searchStartRow To searchEndRow
If Len(ws.Cells(counter, codesColumnIndex)) > 0 And Len(ws.Cells(counter, balanceColumnIndex)) > 0 And _
IsNumeric(ws.Cells(counter, codesColumnIndex).Value) And IsNumeric(ws.Cells(counter, balanceColumnIndex).Value) Then
If Contains(codes, CLng(ws.Cells(counter, codesColumnIndex).Value)) Then
result = result + ws.Cells(counter, balanceColumnIndex).Value
''' ^^^ This line throws a type-mismatch error
End If
End If
Next counter


CalculateSum = result

ErrorHandler:
Debug.Print ("counter: " & counter & "\ncode: " & ws.Cells(counter, codesColumnIndex).Value & "\namount: " & ws.Cells(counter, balanceColumnIndex).Value)

End Function

现在发生的情况是在将当前行余额添加到 result 的行上发生类型不匹配错误。虽然:
  • searchEndRow 等于 129,并且不知何故 counter 等于 130
  • 当前地址下的单元格是空的,但不知何故它们通过了长度和数值的测试(我此时停止调试,IsNumeric(ws.Cells(counter, codesColumnIndex).Value) 返回 true !

  • 现在我很困惑,我不知道该怎么办。请帮忙。

    最佳答案

    正如评论者所指出的,Cells(...).ValueVariant .这意味着运营商可能不适用于 .Value你期望的方式。对于使用 Len 的测试或其他字符串操作,明确转换为字符串。例如,而不是 Len(ws.Cells(...)) , 试试 Len(CStr(ws.Cells(...).Value)) .这样你就会知道Len正在给你你期望的结果。

    同样,您添加到 result 的位置, 使用 result = result + CDbl(ws.Cells(...).Value)确保您添加了 Double值(value)观在一起。

    要回答您关于在不同计算机上发生不同错误的问题,我最常遇到的是有问题的特定数据。正如其中一位评论者指出的那样,Empty确实是数字,因为它隐式转换为 0 !结果,IsNumeric(Empty)True .使用 CStr防止在您的代码中出现这种情况,因为 IsNumeric(CStr(Empty)) = IsNumeric("") = False .使用 IsNumeric(CStr(...))阻止您尝试添加 0# + "" ,这是类型不匹配。因此,也许用户有一个您在测试数据中没有的空单元格,这就是导致问题的原因。这不是唯一的可能性,只是我遇到最多的一种。

    关于vba - 在 for 循环中键入不匹配,包括对工作表单元格值的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39596341/

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