为什么在Excel中自动调整行VBA代码不断在我的公式中造成#value错误?

我有一个连接基于偏移量数组代码,我正在使用它来组合数据。

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 

代码很好。 这不是我的,但我调整了别人的代码。 问题是,它有时会返回less量的文本,其他时候会返回大量的文本。 我需要行来自动调整高度。 在我开始使用新的concatPlusIfs公式之前,我在工作表上使用了一个代码来自动调整行的高度,但是对于上面的代码和上面的代码会导致一个奇怪的问题,我找不到任何提到这种types的问题。 它适用于我使用的所有其他数组或非数组公式。 基本上发生的是,只要几分之一秒,我可以在单元格中看到正确的输出,然后得到#value !. 我不知道发生了什么事。 我已经尝试将自动调整行作为macros而不是它具有相同的效果。 如果我手动自动安装该行一切都很好,但这不是一个可行的select。

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

我没有在表格的任何地方使用任何合并的行。

以下是我尝试过的一些自动适应策略。 一个作为macros观:

 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 

感谢您的帮助。

你最有可能获得#VALUE! 您的公式尝试将###.Text属性转换为值时发生错误。 这就是为什么你应该使用.Value2.Value