Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wo, verdammt liegt hier der Fehler ?

Wo, verdammt liegt hier der Fehler ?
05.06.2008 09:46:30
christian
Ich habe folgenden Code:

Dim vArr(), lRow As Long, lCol As Long   'Trennzeichen der definierten Spalten ändern
vArr = Range("P3:Q8644")
For lRow = 1 To UBound(vArr, 1)
For lCol = 1 To UBound(vArr, 2)
vArr(lRow, lCol) = Replace(vArr(lRow, lCol), ",", ".")
If lCol = UBound(vArr, 2) Then
 vArr(lRow, lCol) = vArr(lRow, lCol) / 1000
End If
Next lCol
Next lRow
ActiveSheet.Range("P3:Q8644") = vArr


Mit der von mir fett markierten Zeile scheint er nicht zufrieden zu sein, er bringt immer:
Laufzeitfehler 13, Typen unverträglich
Diese Zeile muss mit rein, denn erkennt den Punkt in dieser Spalte als tausender-Trennzeichen, was er nicht ist.
Was ist bloß falsch daran?
christian

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wo, verdammt liegt hier der Fehler ?
05.06.2008 09:51:39
Rudi
Hallo,
vArr(lRow, lCol) ist anscheinend ein String.
Gruß
Rudi

AW: Wo, verdammt liegt hier der Fehler ?
05.06.2008 09:54:00
christian
hallo Rudi,
was sollte ich demnach verändern?
christian

AW: Wo, verdammt liegt hier der Fehler ?
05.06.2008 09:58:00
Rudi
Hallo,
was weiß ich! Bin ich Gott?
Ich kenne deine Daten nicht.
Gruß
Rudi

AW: Wo, verdammt liegt hier der Fehler ?
05.06.2008 10:22:00
Werner
Hallo Christian,
evtl. so:?


Dim vArr(), lRow As Long, lCol As Long
   With Range("P3:Q8644")                   ' anpassen
      vArr = .Value
      For lRow = 1 To UBound(vArr, 1)
         For lCol = 1 To UBound(vArr, 2)
            vArr(lRow, lCol) = Replace(vArr(lRow, lCol), ".", ",")
         Next lCol
      Next lRow
      .NumberFormat = "General"     ' oder "0.000"
      .Value = vArr
 End With


Gruß
Werner

Anzeige
AW: Wo, verdammt liegt hier der Fehler ?
05.06.2008 10:31:00
Werner
sorry...
habe etwas vergessen, evtl. geht es ja so?


Dim vArr(), lRow As Long, lCol As Long
   With Range("P3:Q8644")
      vArr = .Value
      For lRow = 1 To UBound(vArr, 1)
         For lCol = 1 To UBound(vArr, 2)
            vArr(lRow, lCol) = Replace(vArr(lRow, lCol), ".", ",")
         Next lCol
         If lCol = UBound(vArr, 2) Then
            vArr(lRow, lCol) = Val(vArr(lRow, lCol)) / 1000
         End If
      Next lRow
      .NumberFormat = "0.000"
      .Value = vArr
 End With


Gruß
Werner

Anzeige
AW: Wo, verdammt liegt hier der Fehler ?
05.06.2008 11:05:44
christian
Hallo Werner,
so bringt er keine Fehlermeldung, es läuft also.
Einziges Problem, dass was vorher z.b. 123.456 war und 123,456 (geschrieben 123,46) sein sollte macht er zu 123456,000. er scheint also den punkt hier als tausender-trennzeichen anzusehen und ersetzt dieses nicht.

AW: Wo, verdammt liegt hier der Fehler ?
05.06.2008 11:24:00
Werner
Hallo Christian,
ich bin davon ausgegangen dass Du die "Werte" als Text aus einem anderen System eingelesen hast.
Dann müsste das Makro funtionieren.
Als Zahl formatiert steht der Punkt ja nicht als solches da, sondern wird lediglich als Trennung dargestellt.
Bsp.:
https://www.herber.de/bbs/user/52831.xls
Gruß
Werner

Anzeige
habs gelöst,...
05.06.2008 11:39:01
christian
.... ich habe das hier weggelassen:

.NumberFormat = "General"     ' oder "0.000"
.Value = vArr


warum das so geht weiß ich nicht.
Praxis ist wenn alles funktioniert und keiner weiß warum.
Danke nochmal für deine Hilfe!
christian

AW: Wo, verdammt liegt hier der Fehler ?
05.06.2008 10:32:50
Luschi
Hallo Christian,
der eigentliche Fehler 13 tritt hier auf: vArr = ActiveSheet.Range("P3:Q8644")
Der kommt durch die falsche Deklaration 'Dim vArr()' zustande. Mit 'Dim vArr' (also ohne Klammern) klappt
dann auch die Zuweisung. Der Austausch von Komma gegen Punkt ist überflüssig, da Excel im Innersten rein amerikanischer Natur ist und die deutschen Double-Werte mit Komma nur oberflächenmäßig
so zu sehen sind. Mit dem Austausch machst Du die Zahlen dann zu Text.
Hier der funtionierende Vba-Code:

Dim vArr, lRow As Long, lCol As Long
vArr = ActiveSheet.Range("P3:Q8644")
For lRow = 1 To UBound(vArr, 1)
For lCol = 1 To UBound(vArr, 2)
''diese Zeile ist überflüssig
''vArr(lRow, lCol) = Replace(vArr(lRow, lCol), ",", ".")
''warum diese Bedingung
''Damit wird nur in der letzten Spalte gerechnet
If lCol = UBound(vArr, 2) Then
vArr(lRow, lCol) = vArr(lRow, lCol) / 1000
End If
Next lCol
Next lRow
ActiveSheet.Range("P3:Q8644") = vArr

Gruß von Luschi
aus klein-Paris

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige