Excel VBA-过程调用或参数无效(错误5)

Excel VBA-过程调用或参数无效(错误5),vba,excel,Vba,Excel,我很难找到这次事故的原因 无效的过程调用或参数(错误5) 这发生在我正在操作的表的最后一行 我尝试过相同格式的不同表格,发现它们工作得很好。这使我相信表中的特定行存在问题 相关代码: VName.Value = RID.Value & " " & IIf(InStr(1, RID.Offset(columnOffset:=1).Value, vbCrLf) <> 0 And _ (InStr(1, RID.Offset(columnOffset:=1)

我很难找到这次事故的原因

无效的过程调用或参数(错误5)

这发生在我正在操作的表的最后一行

我尝试过相同格式的不同表格,发现它们工作得很好。这使我相信表中的特定行存在问题

相关代码:

    VName.Value = RID.Value & " " & IIf(InStr(1, RID.Offset(columnOffset:=1).Value, vbCrLf) <> 0 And _
    (InStr(1, RID.Offset(columnOffset:=1).Value, vbCrLf) - 1) >= 10, _
    Left(RID.Offset(columnOffset:=1).Value, InStr(1, RID.Offset(columnOffset:=1).Value, vbCrLf) - 1), RID.Offset(columnOffset:=1).Value)
VName.Value=RID.Value&&&IIf(InStr(1,RID.Offset(columnpoffset:=1.Value,vbCrLf))0和_
(指令(1,RID.Offset(columnOffset:=1).Value,vbCrLf)-1)>=10_
左(RID.Offset(ColumnCoffset:=1).Value,指令(1,RID.Offset(ColumnCoffset:=1).Value,vbCrLf)-1),RID.Offset(ColumnCoffset:=1).Value)
完整代码:

“~~~>每行
'~~>ID行(偏移2列),其中SectionTitle(缓存A3)+ID在标题上以0开头
设为零
设置区段=范围(“值”!$A$3”)
设置RCount=.Range(.Cells(HC,2),.Cells(.Cells(Rows.count,2).End(xlUp).Row,2))
IDCount=0
对于RCount中的每个RID
'ID请求行
RID.Offset(columnPoffset:=-1).Value=SecT.Value&&IDCount
“~~~>将ID、ReqName、节添加到值表中,如果ID为0,则键入=文件夹
设置VSection=工作表(“值”)。单元格(工作表(“值”)。单元格(Rows.count,2)。结束(xlUp)。行+1,2)
VSection.EntireRow.ClearContents
设置VName=工作表(“值”)。单元格(工作表(“值”)。单元格(Rows.count,2)。结束(xlUp)。行+1,3)
设置VType=工作表(“值”)。单元格(工作表(“值”)。单元格(Rows.count,2)。结束(xlUp)。行+1,4)
设置VID=工作表(“值”)。单元格(工作表(“值”)。单元格(行数,2)。结束(xlUp)。行数+1,5)
'行=标题,其中IDCount=0
如果IDCount=0,则
v节值=节值
VName.Value=节值
VType.Value=“文件夹”
VID.Value=IDCount
'行标题,其中IDCount>0
如果IDCount>0,则
v节值=节值
VName.Value=RID.Value&&&IIf(InStr(1,RID.Offset(columnpoffset:=1.Value,vbCrLf))0和_
(指令(1,RID.Offset(columnOffset:=1).Value,vbCrLf)-1)>=10_
左(RID.Offset(ColumnCoffset:=1).Value,指令(1,RID.Offset(ColumnCoffset:=1).Value,vbCrLf)-1),RID.Offset(ColumnCoffset:=1).Value)
VName.WrapText=False
VID.Value=IDCount
如果结束
IDCount=IDCount+1
下一个RID
RID.Value=FLO.1170

RID.Offset(ColumnCoffset:=1)。Value=WORKITEM管理

触发

无效的过程调用或参数(错误5)

由于“工作项管理”中没有换行符,因此应使用完整的单元格值,而不是左函数。其他113排运行良好

  • 似乎IIF正在评估这两个条件,而不是在第一个条件为假时忽略第二个条件。如果和始终同时计算这两个参数。如果第一个为真,则仅计算第二个。我怀疑第二个标准是导致崩溃的原因,因为无论第一个标准是否为真(在本例中为非),都会对其进行评估,并且Left的长度不能为负。将IIF更改为一对嵌套的If语句
  • 您似乎还试图将
    左(,)
    与数字10进行比较。这可能不正确。若从中返回的文本看起来像一个数字,那个么将其包装在CLng()或CDbl()中以获得实际的数字
  • 也许a会是一个更好的选择。如果Split找不到分隔符来实际拆分某些内容,则仍将原始值作为基于零的元素

    VName.Value=RID.Value&&&Split(RID.Offset(columnpoffset:=1.Value,Chr(10))(0)


  • 似乎
    IIF
    正在评估这两个条件,而不是在第一个条件为false时忽略第二个条件。如果和始终同时计算这两个参数。如果第一个为真,则仅计算第二个。我怀疑第二个标准是导致崩溃的原因,因为无论第一个标准是否为真(在本例中为非真),都会对其进行评估,
    Left
    的长度不能为负。将IIF更改为一对嵌套的If语句。似乎有效。感谢您的快速回复。另请参阅:@ssoog-请参阅下面我的扩展说明和使用
    .Split
    的替代方法。我没有想到使用.Split函数。太好了,谢谢你。
    '~~~> For Each Row
    '~~~> ID Row (offset by 2 columns) with SectionTitle (Cache A3) + ID starting with 0 on the header
    Set RID = Nothing
    Set SecT = Range("'Values'!$A$3")
    Set RCount = .Range(.Cells(HC, 2), .Cells(.Cells(Rows.count, 2).End(xlUp).Row, 2))
    IDCount = 0
    
    For Each RID In RCount
        'ID Req rows
        RID.Offset(columnOffset:=-1).Value = SecT.Value & " " & IDCount
    '~~~> Add ID, ReqName, Section to Values sheet where if ID is 0 then Type = Folder
            Set VSection = Worksheets("Values").Cells(Worksheets("Values").Cells(Rows.count, 2).End(xlUp).Row + 1, 2)
            VSection.EntireRow.ClearContents
            Set VName = Worksheets("Values").Cells(Worksheets("Values").Cells(Rows.count, 2).End(xlUp).Row + 1, 3)
            Set VType = Worksheets("Values").Cells(Worksheets("Values").Cells(Rows.count, 2).End(xlUp).Row + 1, 4)
            Set VID = Worksheets("Values").Cells(Worksheets("Values").Cells(Rows.count, 2).End(xlUp).Row + 1, 5)
        'Row = Header where IDCount = 0
            If IDCount = 0 Then
            VSection.Value = SecT.Value
            VName.Value = SecT.Value
            VType.Value = "Folder"
            VID.Value = IDCount
        'Row <> Header where IDCount > 0
            ElseIf IDCount > 0 Then
            VSection.Value = SecT.Value
            VName.Value = RID.Value & " " & IIf(InStr(1, RID.Offset(columnOffset:=1).Value, vbCrLf) <> 0 And _
            (InStr(1, RID.Offset(columnOffset:=1).Value, vbCrLf) - 1) >= 10, _
            Left(RID.Offset(columnOffset:=1).Value, InStr(1, RID.Offset(columnOffset:=1).Value, vbCrLf) - 1), RID.Offset(columnOffset:=1).Value)
            VName.WrapText = False
            VID.Value = IDCount
            End If
        IDCount = IDCount + 1
    Next RID