Ich habe eine Verkettung basierend auf Offset-Array-Code, den ich verwende, um Daten zu kombinieren.Warum verursacht AutoFit-Zeilen-VBA-Code in Excel weiterhin den Fehler #value in meiner Formel?
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
Der Code funktioniert super. Es gehört mir nicht, aber ich habe den Code von jemand anderem optimiert. Das Problem ist, dass es manchmal eine kleine Menge Text und manchmal eine große Menge an Text zurückgibt. Ich brauche die Zeilen, um die Höhe automatisch zu erhöhen. Bevor ich die neue concatPlusIfs-Formel verwendet habe, habe ich einen Code auf dem Arbeitsblatt verwendet, um Zeilenhöhe automatisch zu ändern, aber es verursacht ein seltsames Problem mit dem obigen Code und nur dem obigen Code und ich kann keine Erwähnung dieser Art von Problem finden. Es funktioniert gut mit allen anderen Arrays oder Nicht-Array-Formeln, die ich verwende. Grundsätzlich passiert, dass ich für einen Bruchteil einer Sekunde die korrekte Ausgabe in der Zelle sehen kann und dann bekomme ich #value !. Ich habe keine Ahnung, was los ist. Ich habe versucht, AutoFit-Zeilen stattdessen als Makro und es hatte den gleichen Effekt. Wenn ich die Zeile manuell autofit, ist alles in Ordnung, aber das ist keine praktikable Option.
Versteht jemand, was ein Problem wie dieses verursachen würde? Oder Wie kann ich es reparieren?
Ich verwende keine zusammengefügten Zeilen irgendwo auf dem Blatt.
Hier sind ein paar der Autofit-Strategien, die ich ausprobiert habe. Ein als Makro:
Sub AutoFit()
Worksheets("Sheet1").Range("A2:A" & Rows.Count).Rows.AutoFit
End Sub
Auch als Code auf dem Blatt,
Private Sub Worksheet_Change(ByVal Target As Range)
Target.EntireRow.AutoFit
End Sub
Und
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Me.Rows.AutoFit
'or be specific
Me.Rows("1:33").AutoFit
Application.EnableEvents = True
End Sub
Vielen Dank für jede Hilfe bei diesem.
Jeder Fehler, wenn Sie 'On Error Resume Next' auskommentieren? – Slai
Ich bin mir nicht sicher, ob es hilft, aber Sie können versuchen, '.Text' durch' .Value' zu ersetzen, da '.Text'' '### 'zurückgeben kann, wenn der Wert nicht passt – Slai
Alle Texte in .Wert hat funktioniert. Ich verstehe nicht, warum aufgrund Ihrer Argumentation, weil es nicht #### zurückgegeben und arbeitete ohne die Autofit-Zeile, aber es hat funktioniert! Vielen Dank. – user1497158