VBA - 初始运行期间 #VALUE 错误,乘法器到动态范围

VBA - #VALUE error during initial run , multiplier to dynamic range

提问人:StillLearningThisStuff 提问时间:6/28/2023 最后编辑:StillLearningThisStuff 更新时间:6/28/2023 访问量:28

问:

对于令人困惑的标题,我深表歉意,但首先,我创建了一些代码来将乘数(引用到单元格值的定义变量)应用于非空白/非空单元格的动态范围,但仅在某些列中,并且总是在代码运行的开头而不是之后遇到 #VALUE 错误。

背景

有一个用户表单由用户填写,该表单的一部分允许输入一个乘数,该乘数将应用于用户正在处理的单个 ws 的动态表。整个表的大小可以不同(按列),列标题名称将从 ws 更改为 ws。这个“乘数”只需要更新某些列中填充的单元格,所以这不是一个多 ws 任务/更新,只是在用户完成它时。

总的来说,需要从 ws 更新到 ws 的列可以根据部分文本匹配分为 3 个:“ *Rate”、“ *Amount”、“ *Factor”。总共有 10 多个列标题与这些标题部分匹配。


问题

我无法解决的问题是,当第一次在新工作表上使用宏时,它会在随机空白单元格中给出 #VALUE 错误(对某些列中的填充单元格进行正确的数学运算)。但是在初始运行之后/手动清除内容并重新运行代码后,它会毫无问题地更新适用的单元格。

代码运行前:表视图

代码运行后:导致 #VALUE 错误


我的代码

Option Explicit

'1) Rate multiplier obt from Rate Diff form & stored in Admin ws (See: Rate form)

'----------------------------------------------
'2) Apply rate mutliplier 
'----------------------------------------------

Sub IP_Rate_Multiplier()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim c As Integer
    Dim r As Integer
    Dim LC As Long
    Dim LR As Long
    Dim multiplier As Double
    
    Set wb = ActiveWorkbook
    Set ws = wb.ActiveSheet
    multiplier = wb.Sheets("Admin").Range("U2").Value
    
    With Application
        .ScreenUpdating = False
    End With
    
    'Applic cols: "*Rate", "*Amount", "*Factor"
    
    LC = ws.Cells(6, Columns.Count).End(xlToLeft).Column      'hdr row count/length
    
    For c = 7 To LC                                           'Loop from col 7 to last col
        If ws.Cells(6, c).Value Like ("*Rate*") Or ws.Cells(6, c).Value Like ("*Amount*") Or ws.Cells(6, c).Value Like ("*Factor*") Then
            LR = ws.Cells(Rows.Count, c).End(xlUp).Row        'Last row of ea. col
            For r = 7 To LR                                   'Loop from row 7 to last row
                If ws.Cells(r, c) <> "" Then
                    ws.Cells(r, c).Value = Evaluate(ws.Cells(r, c).Value() & "*" & multiplier)
                End If
            Next r
        Else
        End If
    Next c
           
    With Application
        .ScreenUpdating = True
    End With

End Sub

所以我不绝对确定这是否与错误处理不当(或缺乏)错误处理、上面不正确的代码有关,或者因为它是一个新的 ws 总是填充在 wb 中然后工作?

如果还有什么我可以提供的,请告诉我!


编辑

澄清上面的一些代码/代码注释:这个乘数只发生在特定时间。填写的用户表单还会通知进入 ws 的其他内容,并且不知道用户何时或输入什么,所以我不能将其作为 ws 更改事件。

Excel VBA for 循环 错误处理 乘法

评论

0赞 Tim Williams 6/28/2023
我猜你的“空白”单元格实际上并不是空白的。因此,清除范围可以解决问题。
0赞 StillLearningThisStuff 6/28/2023
我在这些单元格中没有任何公式,但是这些单元格绑定了VBA ws_change事件代码和VBA dv代码。我执行了.在运行代码之前,在受影响的范围内进行 ClearContents,它起作用了!TY这么多,这是一个如此简单的解决方案!

答: 暂无答案