2016-07-14 10 views
1

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.

+1

Jeder Fehler, wenn Sie 'On Error Resume Next' auskommentieren? – Slai

+1

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

+0

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

Antwort

1

Sie erhalten am wahrscheinlichsten #VALUE! Fehler, wenn Ihre Formel versucht, die ### aus der .Text Eigenschaft in Wert zu konvertieren. Deshalb sollten Sie stattdessen .Value2 oder .Value verwenden.