为什么 Excel 中的自动调整行 VBA 代码一直在我的公式中导致 #value 错误?

Why does autofit row VBA code in Excel keep causing #value error in my formula?

我有一个基于偏移数组代码的连接,用于合并数据。

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

代码运行良好。这不是我的,但我调整了别人的代码。问题是它有时会 return 少量文本,有时会出现大量文本。我需要行来自动调整高度。在我开始使用新的 concatPlusIfs 公式之前,我在 worksheet 上使用了一个代码来自动调整行高,但是它会导致上面的代码出现一个奇怪的问题,而且只有上面的代码我找不到任何提及这类问题。它适用于我正在使用的所有其他数组或非数组公式。基本上发生的事情是,在几分之一秒内我可以在单元格中看到正确的输出,然后我得到#value!。我不知道是怎么回事。我已经尝试将自动调整行作为宏来代替,它具有相同的效果。如果我手动自动调整该行,一切都很好,但这不是一个可行的选择。

有人知道什么会导致这样的问题吗?或者我该如何解决?

我没有在 sheet 上的任何地方使用任何合并行。

以下是我尝试过的一些自动调整策略。一个作为宏:

Sub AutoFit()

Worksheets("Sheet1").Range("A2:A" & Rows.Count).Rows.AutoFit

End Sub

也作为代码放在sheet、

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

感谢您对此的任何帮助。

当您的公式尝试将 ###.Text 属性 转换为值时,您很可能会遇到 #VALUE! 错误。这就是为什么您应该改用 .Value2.Value