为什么 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
。
我有一个基于偏移数组代码的连接,用于合并数据。
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
。