2017-07-04 2 views
0

Ich habe ein Makro, das ein Ausgabeblatt erzeugt, um in eine spezielle (in C#) Anwendung für die Verarbeitung von Blättern dieses Typs fallen.VBA/Excel - Zellen nicht als leer erkannt, bis ich auswählen und drücken Sie die Eingabetaste

Im Wesentlichen kopiert der Code eines der Blätter aus dem Masterblatt und speichert es dann mithilfe einer benutzerdefinierten Referenz. Anschließend kopiert und fügt es alle Zellen im Arbeitsblatt als Werte ein.

Sehr frustrierend, in zwei der Spalten in den Ausgabeblättern sind die Zellen mit Zahlen in ihnen angeblich nicht leere Zellen eingestreut, die keine Zeichen oder Leerzeichen enthalten (und als "allgemein" formatiert sind). Wenn ich eine "IsBlank" -Formel verwende, geben diese "FALSE" zurück. Wenn ich jedoch manuell auf die fraglichen Zellen klicke und auf "Enter" drücke, geben diese plötzlich einen "TRUE" -Wert zurück.

Ich erwäge, das Makro zu erhalten, um jede Zelle in diesen Spalten einzeln auszuwählen, um dies zu beheben, aber das scheint kriminell ineffizient zu sein.

Gibt es eine bessere Lösung für dieses Problem?

Antwort

0

Wenn ISBLANK Formel „FALSCH“ Rückkehr, aber schlägt F2 + Enter Rückkehr die gleichen wie „TRUE“, dann prüfen, ob Formeln => Arbeitsmappe Berechnung als „Manuell“ gesetzt ist.

Außerdem können Daten, die von einer externen Quelle kopiert werden, einen geschützten Bereich enthalten, mit dem Excel häufig Probleme hat.

Wenn die Zelle klicken das einzige ist, das funktioniert, können Sie ein kleines Stück Code-Block wie folgt hinzu, which'll den gewählten Bereich aufzufrischen:

Sub refresh() 
    Dim r1 As Range, r2 As Range 
    Set r2 = Selection 
    For Each r1 In r2 
     r1.Select 
     Application.SendKeys "{f2}{enter}" 
     DoEvents 
    Next 
End Sub 
0

Was Sie sind Null-Länge erleben könnte Saiten.
Es könnte das Ergebnis einer Formel sein, die "" (z. B. = "") auswertet und dann als Werte kopiert und eingefügt wird.

Wie ich verstehe, verwenden Sie Makro. Wenn dies der Fall ist, verwenden Sie AutoFilter Methode Bereich Objekt, um alle nicht leere Zellen zu erhalten. Etwas wie:

Dim r as Range 
Set r = Sheet1.Range("Your Range") '/* from your master sheet */ 

'/* Filter all non-blanks */ 
'/* First argument 1 depends on the column you want filtered */ 
'/* For this example it is column 1 of your range */ 
r.AutoFilter 1, "<>" 
r.SpecialCells(xlCellTypeVisible).Copy 
Sheet2.Range("Your Destination").PasteSpecial xlPasteValues 

Hoffe das hilft.

Verwandte Themen