为啥 Excel 中的自动调整行 VBA 代码不断在我的公式中导致 #value 错误?
Posted
技术标签:
【中文标题】为啥 Excel 中的自动调整行 VBA 代码不断在我的公式中导致 #value 错误?【英文标题】:Why does autofit row VBA code in Excel keep causing #value error in my formula?为什么 Excel 中的自动调整行 VBA 代码不断在我的公式中导致 #value 错误? 【发布时间】:2016-07-14 04:45:42 【问题描述】:我有一个基于偏移数组代码的连接,用于组合数据。
Public Function concatPlusIfs(rng As Range, sep As String, lgCritOffset1 As Long, lgCritOffset2 As Long, varCrit1 As Variant, lgCritOffset3 As Long, lgCritOffset4 As Long, varCrit2 As Variant, Optional noDup As Boolean = False, Optional skipEmpty As Boolean = False) As String
Dim CL As Range, strTemp As String
If noDup Then 'remove duplicates, use collection to avoid them
Dim newRow As New Collection
On Error Resume Next
For Each CL In rng.Cells
If skipEmpty = False Or Len(Trim(CL.Text)) > 0 Then
If CL.Offset(lgCritOffset1, lgCritOffset2) = varCrit1 And CL.Offset(lgCritOffset3, lgCritOffset4) = varCrit2 Then newRow.Add CL.Text, CL.Text
End If
Next
For i = 0 To newRow.Count
strTemp = strTemp & newRow(i) & sep
Next
Else
For Each CL In rng.Cells
If skipEmpty = False Or Len(Trim(CL.Text)) > 0 Then
If CL.Offset(lgCritOffset1, lgCritOffset2) = varCrit1 And CL.Offset(lgCritOffset3, lgCritOffset4) = varCrit2 Then strTemp = strTemp & CL.Text & sep
End If
Next
End If
concatPlusIfs = Left(strTemp, Len(strTemp) - Len(sep))
End Function
代码运行良好。这不是我的,但我调整了别人的代码。问题是它有时会返回少量文本,有时会返回大量文本。我需要行来自动调整高度。在我开始使用新的 concatPlusIfs 公式之前,我在工作表上使用了一个代码来自动调整行高,但这会导致上面的代码和只有上面的代码出现一个奇怪的问题,而且我找不到任何关于此类问题的提及。它适用于我正在使用的所有其他数组或非数组公式。基本上发生的情况是,在几分之一秒内,我可以在单元格中看到正确的输出,然后得到#value!。我不知道是怎么回事。我已经尝试将自动调整行作为宏来代替,它具有相同的效果。如果我手动自动调整行一切都很好,但这不是一个可行的选择。
有谁知道什么会导致这样的问题?或者我该如何解决?
我没有在工作表的任何地方使用任何合并的行。
以下是我尝试过的一些自动调整策略。一个作为宏:
Sub AutoFit()
Worksheets("Sheet1").Range("A2:A" & Rows.Count).Rows.AutoFit
End Sub
也作为工作表上的代码,
Private Sub Worksheet_Change(ByVal Target As Range)
Target.EntireRow.AutoFit
End Sub
还有,
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Me.Rows.AutoFit
'or be specific
Me.Rows("1:33").AutoFit
Application.EnableEvents = True
End Sub
感谢您对此提供的任何帮助。
【问题讨论】:
注释掉On Error Resume Next
有什么错误吗?
我不确定它是否会有所帮助,但您可以尝试将 .Text
替换为 .Value
,因为当值不适合时,.Text
可以返回 ####
将所有 .Text 更改为 .Value 有效。我不明白为什么根据您的推理,因为它没有返回 #### 并且没有自动调整行,但它有效!谢谢。
【参考方案1】:
当您的公式尝试将 ###
从 .Text
属性转换为值时,您很可能会遇到 #VALUE!
错误。这就是为什么您应该改用.Value2
或.Value
。
【讨论】:
以上是关于为啥 Excel 中的自动调整行 VBA 代码不断在我的公式中导致 #value 错误?的主要内容,如果未能解决你的问题,请参考以下文章
excel VBA窗体按钮控件设置enter事件后,为啥会在启动窗体时,自动enter一次?
VBA选择工作表中的所有列并自动调整Excel 2010中的所有列宽度