簡體   English   中英

Excel VBA-無效的過程調用或參數(錯誤5)

[英]Excel VBA - Invalid procedure call or argument (Error 5)

我在尋找造成這種情況的原因時遇到了麻煩

無效的過程調用或參數(錯誤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)

完整代碼:

'~~~> 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

RID.Value = FLO.1170
RID.Offset(columnOffset:=1).Value = WORKITEM MANAGEMENT

觸發一個

無效的過程調用或參數(錯誤5)

由於“ WORKITEM MANAGEMENT”中沒有換行符,因此應使用完整的單元格值,而不應使用Left函數。 其他113行工作正常。

  1. IIF似乎正在評估這兩個條件,而不是在第一個條件為假時忽略第二個條件。 如果和始終同時評估兩者。 如果是,則如果僅第一個為真,則僅求第二個。 我懷疑第二個條件導致崩潰,因為無論第一個條件是否為真(在這種情況下不是),並且正在評估中,並且Left的長度不能為負,因此正在評估它。 將IIF更改為一對嵌套的If語句。
  2. 還似乎您正在嘗試將Left(<string>, <length>)與數字10進行比較 這可能是不正確的。 如果從Left方法返回的是看起來像數字的文本,則將其包裝在CLng()或CDbl()中以獲取實際的數字。
  3. 也許.Split函數會是更好的選擇。 如果“拆分”找不到實際拆分某內容的分隔符,則您仍將原始值作為從零開始的元素。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM