Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
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
Inhaltsverzeichnis

VBA: String == führt zu Fehler 1004

VBA: String == führt zu Fehler 1004
12.08.2015 12:52:30
Marcel
Hallo zusammen,
grade in die Situation gekommen, dass ein VBA-Code, welcher schon seit Monaten fehlerfrei seinen Dienst verrichtet, plötzlich mit Fehler 1004 (Anwendungs- oder objektdefinierter Fehler) abbricht.
Ein Datenquader aus einem Intranet-Tool wird umformatiert und um zusätzliche Spalten ergänzt, deren Inhalt sich hauptsächlich aus Formeln ergeben. Abschließend werden die Ergebnisse als Text eingefügt, damit sich die Ergebnisse nicht mehr ändern können.
tbl_2.UsedRange = tbl_2.UsedRange.Value
Seit heute führt diese Zeile zu einem Laufzeitfehler 1004. Also habe ich den Fehler schrittweise eingegrenzt. Mit Range die betroffene Spalte identifiziert und letztlich auch die Zelle, die das Problem hervorruft.
Ergebnis:
Eins der Felder aus dem Ursprungs-Datenquader ist ein frei beschreibbares Textfeld. Durch Zufall sorgt ein Eintrag seit heute dafür, dass in einer Zelle als Formelergebnis der String == ausgegeben wird.
Und genau dieser String sorgt für den Laufzeitfehler 1004. Der Fehler ist auch reproduzierbar (siehe angehängte Datei).
https://www.herber.de/bbs/user/99508.xlsm
Meine Frage ist nun, ob dieser Fehler einerseits bekannt ist und vielleicht irgendwann mal gepatcht wird (oder in neueren Excel-Versionen bereits gepatcht wurde, auch wenn mir das nicht helfen würde, da die Firma vor noch nicht allzu langer Zeit grad erst den Schritt von 2003 zu 2007 gemacht hat), und zum anderen interessiert es mich jetzt sehr, ob ich mich auf weitere derartige Überraschungen einstellen sollte?
Gibt es weitere Strings, die VBA aus dem Tritt bringen können?

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: String == führt zu Fehler 1004
12.08.2015 14:18:13
Michael
Hi Marcel,
alles, was mit = (oder + oder -) anfängt, wird in Excel als Formel angesehen und läßt sich nicht ohne Weiteres mit .value zuweisen. Grundsätzlich würde ich aber auch auf der linken Seite .Value angeben. Das ändert zwar nix am Fehler, könnte aber einen Ticken schneller arbeiten.
Als einzige Abhilfe fällt mir ein, den Quellbereich zunächst daraufhin zu untersuchen, ob ein String mit einem der kritischen Zeichen anfängt und dem dann eine "'" voranzustellen - das ist Excels Indikator für einen Text, und das ' wird weder angezeigt (außer Du editierst die Zelle bzw. in der Bearbeitungsleiste) noch gedruckt.
Eine weitere Möglichkeit ist, die Zelle zuvor als TEXT zu formatieren: mit B41 als Text läuft Dein Makro durch!
So oder so wirst Du nicht drumherum kommen, jeden einzelnen Wert anzusehen.
Die von Dir verwendete Anweisung
  ActiveSheet.Range("b:b").Value = ActiveSheet.Range("a:a").Value

ist sowieso ein technisches Prachtstück von MS, denn so eine Anweisung wird z.B. in LO Calc nicht ausgeführt; da muß man das mit Schleifen lösen.
Was Anderes macht Excel im Grunde intern ja auch nicht, denn die Werte werden ja bis zum Fehler geschrieben.
Lösungsvorschlag:
Private Sub cmd_Beispiel_Click()
Dim a As Variant
Dim von&, bis&, i&
Dim t1#, t2#
von = 1: bis = 105
ActiveSheet.Range("b" & von & ":b" & bis).Clear
t1 = Timer
a = ActiveSheet.Range("a" & von & ":a" & bis).Value
For i = 1 To bis - von + 1
If Mid(a(i, 1), 1, 1) = "=" Then a(i, 1) = "'" & a(i, 1)
Next
ActiveSheet.Range("b" & von & ":b" & bis) = a
t2 = Timer
MsgBox (t2 - t1) * 1000 & " ms"
End Sub

Das geht sauschnell, und Du solltest es mit VBA gut selbst an Deine Bedürfnisse anpassen können.
Happy Exceling,
Michael

Anzeige
AW: VBA: String == führt zu Fehler 1004
12.08.2015 14:25:54
Rudi
Hallo,
da reicht eigentlich
  With Range("b:b")
.ClearContents
.NumberFormat = "@"
.Value = Range("A:A").Value
End With

Gruß
Rudi

AW: VBA: String == führt zu Fehler 1004
12.08.2015 14:26:49
Mullit
Hallo,
zu 'nem Patch kann ich Dir leider nichts sagen, aber da der Fehler reproduzierbar ist, kannst Du ihn ja z.B. mit der .Find-Methode eliminieren:
Option Explicit
Private Sub cmd_Beispiel_Click()
Dim objCell As Range
With ActiveSheet
.Range("b:b") = ""
With .Cells(1, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 1)
Set objCell = .Find(What:="==", LookIn:=xlValues, _
LookAt:=xlWhole, MatchCase:=False)
While Not objCell Is Nothing
objCell.ClearContents
Set objCell = .FindNext(After:=objCell)
Wend
End With
.Cells(1, 2).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 1).Value = _
.Cells(1, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 1).Value
End With
End Sub

Gruß, Mullit

Anzeige
AW: VBA: String == führt zu Fehler 1004
12.08.2015 14:29:06
Pit
Hi,
bei funzt auch:
Sub TT_1()
Dim letzteZeile As Long
letzteZeile = Range("A" & Rows.Count).End(xlUp).Row
With Worksheets("Tabelle1")
Worksheets("Tabelle1").Range("A1:A" & letzteZeile).Copy _
Destination:=Worksheets("Tabelle1").Range("B1")
End With
End Sub
Gruß Pit

AW: VBA: String == führt zu Fehler 1004
12.08.2015 16:45:07
Herbert
Hallo Pit,
wenn Du schreibst:
With Worksheets("Tabelle1")...
dann kannst Du Dir die weiteren "Worksheets("Tabelle1")" sparen:
With Worksheets("Tabelle1")
.Range("A1:A" & letzteZeile).Copy Destination:=.Range("B1")
End With
Servus
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige