2.5k Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (926 Punkte)
Hallo Helfer,
die Zellen mit Zahlen in den Exporten aus einem Buchhaltungsprogramm nach Excel, werden durch die Fehlerüberprüfung im Hintergrund" mit kleinen grünen Dreiecken in der linken obern Ecke der Zelle markiert. Nach klick auf solch eine Zelle erscheint ein Warnrechteck neben der Zelle, beim zeigen darauf erscheint dieser Text "Die Zahl in dieser Zelle ist als Text formatiert oder.....". Im Warnhinweis läßt sich ein Kontextmenue öffnen, durch klick auf "in eine Zahl umwandeln" wird dies gemacht. Wenn alle entsprechenden Zellen markiert sind und eine davon aktiviert ist, wird dies auch für alle diese Zellen durchgeführt.
Das oben genannte habe ich versucht per Makrorecorder aufzuzeichnen, es wird aber nicht aufgezeichnet.

Sub Fehlerüberprüfung()

Application.ErrorCheckingOptions.BackgroundChecking = True

Was muss hier rein damit das genannte ausgeführt wird?

Application.ErrorCheckingOptions.BackgroundChecking = False

End Sub

Braucht es für eine Lösung eine Beispieldatei? Wenn ja wo stelle ich die ein?

Vielen Dank im Voraus
mfg
Wolfgang

7 Antworten

0 Punkte
Beantwortet von jfe Einsteiger_in (73 Punkte)
Hallo Wolfgang,

ich bin kein VBA Profi, habe aber glaube ich eine Laienlösung mit der du eventuell arbeiten kannst.

Das Einzige, was du dazu brauchst ist ein Feld in welchem die Zahl 2 steht.
Bei mir war das F16.

Ich gehe mal der Einfachheit halber davon aus, dass deine Werte in der Spalte A stehen.

Folgendes kannst du als Makro aufzeichnen:

Spalte A markieren.
Kopieren.
Inhalte einfügen (in die selbe Spalte) und "Addieren" auswählen.
Jetzt die Zelle F16 auswählen.
Kopieren.
Spalte A markieren.
Inhalte einfügen und "Dividieren" auswählen.

Sieht in VBA so aus:

Columns("A:A").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Range("F16").Select
Application.CutCopyMode = False
Selection.Copy
Columns("A:A").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _
:=False, Transpose:=False
Application.Left = -3.5
Application.Top = 46.75
Application.WindowState = xlNormal
Application.CutCopyMode = False

End Sub

Hoffe das hilft.

Gruß
Folkert
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Wolfgang,

eine Möglichkeit ware nachfolgendes Makro das Dir alle importierten Zahlen, in richtige Zahlen umwandelt.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche.
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.


Option Explicit

Sub Wandeln()
Dim rngBereich As Range
Dim lngLastRow As Long
Dim lngLastColumn As Long

lngLastRow = ActiveSheet.UsedRange.Rows.Count
lngLastColumn = ActiveSheet.UsedRange.Columns.Count

For Each rngBereich In Range(Cells(1, 1), Cells(lngLastRow, lngLastColumn))
If rngBereich <> 0 And IsNumeric(rngBereich) Then _
rngBereich = CDbl(rngBereich)
Next

End Sub
MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von Mitglied (926 Punkte)
Hallo Folkert,
erstmal vielen Dank für dein bemühen. Ich verstehe zu wenig von Makros um zu erkennen inwiefern dein Makro eine Lösung zu meiner Frage sein soll.


Hallo Oliver,
vielen Dank für das Makro, es erfüllt die gewünschte Aufgabe. Ich hoffe du hast nicht deswegen Nachtschicht gemacht.

If rngBereich <> 0 And IsNumeric(rngBereich) Then _

Aus obiger Spalte habe ich versucht "<> 0 and" zu löschen,
oder die "0" durch "0,001" zu ersetzen,
beides führte zur Fehlermeldung:
"Fehler beim kompilieren,
erwartet Then oder goTo"
Beides verstehe ich nicht. Jetzt habe ich die "0" durch """" ersetzt, nun werden auch die "0,00" zu Zahlen.
Was bedeutet "CDbl"?
Hast du in irgend einem Excelforum mal gesehen, das auf die "Fehlerüberprüfung" näher eingegangen wird?
mfg
Wolfgang
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Wolfgang,

wenn auch 0-Werte umgewandelt werden sollen, dann tausche in der Zeile

If rngBereich <> 0 And IsNumeric(rngBereich) Then _in der Passage

rngBereich <> 0 And die 0 gegen 2 Anführungsstriche ( "" ) aus. Die Zeile müsste dann wie folgt lauten:

If rngBereich <> "" And IsNumeric(rngBereich) Then _
MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von Mitglied (926 Punkte)
Hallo Oliver,

ich hatte in Antwort 3 eigentlich schon beschrieben, das ich deine Ergänzung aus Antwort 4 bereits selbst vorgenommen hatte. Optisch ist das nicht gut dargestellt.

Was ich nicht verstehe ist: Warum führt das löschen der ersten Bedingung zur Fehlermeldung? Oder anders herum: Warum genügt nicht die Bedingung "IsNumeric"?

Und einfach für mein Verständnis: Was bedeutet "CDbl"? Und wo könnte ich solche Code-Teile in VBA evtl. selbst finden. Die Hilfe sagt dazu nichts.

mfg
Wolfgang
0 Punkte
Beantwortet von
Hi,

Wenn Du es testen möchtest: Es "genügt" auch nur eine Bedingung. Nur musst Du dann die andere Bedingung auch komplett entfernen. z.B.
If IsNumeric(rngBereich) Then _
So Du dies an einer TEST-Datei ausprobierst, siehst Du auch, warum Coros die zweite Bedingung eingefügt hat. (Zumindest wenn in UsedRange auch LEERE Zellen vorhanden sind.)

Dein Vorhaben die 0 durch 0,001 zu ersetzen musste auch scheitern, da Zahlen in der VBE den . (Punkt) als Dezimaltrenner verwenden, und nicht das Komma, welches in der VBE verwendet wird um z.B. Parameter voneinander zu trennen (Etwa wie das ; (Semikolon) in Formeln). Um Zahlen in der VBE zu verwenden, schreibe statt dessen dann z.B. 0.001.

CDbl: Wenn Du dies im Code markierst und dann die Taste [F1] drückst, sollte die Hilfe Dir eigentlich Auskunft zu dieser und evtl. auch anderen Typumwandlungsfunktionen geben. (Funktioniert das bei Dir nicht?)
Mit einfachen Worten: CDbl(Ausdruck) wandelt den übergebenen Ausdruck, wenn möglich, in eine Zahl um. Ist eine Umwandlung nicht möglich, dann gibt es eine Fehlermeldung "LZF13: Typen unverträglich". Daher auch zuvor die Prüfung auf ISNUMERIC(Ausdruck).

So Deine Hilfe nicht wie gewünscht funktioniert kannst Du das auch mal hier bei OfficeOnline nachlesen. (Ist zwar für Access2007, da ich es auf die Schnelle unter Excel nicht finden konnte, sollte aber soweit passen.)

bye
malSchauen
0 Punkte
Beantwortet von Mitglied (926 Punkte)
Hallo malSchauen,
Vielen Dank.
da habe ich wieder ein klein wenig dazu gelernt.
Das mit Punkt / Komma wusste ich nicht.
Und die Hilfe habe ich immer nur benutzt, indem ich etwas in das Hilfe-Fenster eingetragen habe. Markieren und F1 kannte ich bisher nicht, habe ich gerade ausprobiert, es funktioniert und wird mir in Zukunft hoffentlich viele Rätsel lösen helfen.

mfg

Wolfgang
...