提问人:StillLearningThisStuff 提问时间:6/28/2023 最后编辑:StillLearningThisStuff 更新时间:6/28/2023 访问量:28
VBA - 初始运行期间 #VALUE 错误,乘法器到动态范围
VBA - #VALUE error during initial run , multiplier to dynamic range
问:
对于令人困惑的标题,我深表歉意,但首先,我创建了一些代码来将乘数(引用到单元格值的定义变量)应用于非空白/非空单元格的动态范围,但仅在某些列中,并且总是在代码运行的开头而不是之后遇到 #VALUE 错误。
背景
有一个用户表单由用户填写,该表单的一部分允许输入一个乘数,该乘数将应用于用户正在处理的单个 ws 的动态表。整个表的大小可以不同(按列),列标题名称将从 ws 更改为 ws。这个“乘数”只需要更新某些列中填充的单元格,所以这不是一个多 ws 任务/更新,只是在用户完成它时。
总的来说,需要从 ws 更新到 ws 的列可以根据部分文本匹配分为 3 个:“ *Rate”、“ *Amount”、“ *Factor”。总共有 10 多个列标题与这些标题部分匹配。
问题
我无法解决的问题是,当第一次在新工作表上使用宏时,它会在随机空白单元格中给出 #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 更改事件。
答: 暂无答案
评论