Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Probleme bei Replace

Betrifft: Probleme bei Replace von: Heiti
Geschrieben am: 13.08.2014 16:07:09

Moin,

ich habe mir folgenden Code gebastelt:

        nummer = ExcelWkb.Sheets("Anweisungstexte").Cells(i, 1).Text
        neu = ExcelWkb.Sheets("Anweisungstexte").Cells(i, 3).Text & vbCrLf & ExcelWkb.Sheets(" _
Anweisungstexte").Cells(i, 4).Text
        If nummer <> "" Then
            Selection.Replace What:=nummer, Replacement:=neu, LookAt:= _
                xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
        End If
dabei bricht er leider unregelmäßig mit dieser Meldung ab:
Laufzeitfehler '13': Typen unverträglich

Kann mir da jemand bei helfen? Kann es sein, dass er mit einigen Zeichen nicht zurecht kommt? Oder gibt es eine maximale Länge die er einhalten muss?

Ein Beispiel für einen langen Text:
"Bereich X (Z1)
Meldung des Alarms an eine ständig besetzte Stelle und Veranlassung nochfolgender

Handlungen:

Innerhalb der Geschäftszeiten:

- Ereignis auslösen

- Benachrichtigung Person XY

- Benachrichtigung Person ZV

Außerhalb der Geschäftzeiten:

- Ereignis auslösen

- Benachrichtigung Person XY telefonisch

- Benachrichtigung Person ZV per E-Mail"

Vielen Dank

LG Heiti

  

Betrifft: AW: Probleme bei Replace von: Adis
Geschrieben am: 13.08.2014 20:08:33

Hallo

mir ist im Text etwas aufgefallen bei der Zeile:
- Ereignis auslösen (das vorgestelle -Zeichen)

Ich erinnere mich das es Probleme gibt wenn als 1. Zeichen ein - oder = Zeichen steht.
Dann denkt Excel es waere eine Formel und kommt mit der Meldung Typen unvertraeglich.
In solchen Faellen prüfe ich es mit einer Msgbox nach, dann weiss ich ob es der Fehler ist.
Ich aendere dann den Original Wert von neu durch vorstellen von ' in ein Textformat um.

If Left(neu,1) = "-" Or Left(neu,1) = "=" Then MsgBox " ' " & neu
If Left(neu,1) = "-" Or Left(neu,1) = "=" Then neu = " ' " & neu

Gruss Adis


  

Betrifft: AW: Probleme bei Replace von: Heiti
Geschrieben am: 14.08.2014 07:30:36

Moin,

danke aber das wird es nicht sein. Der Text den ich einfüge ist alles in den Anführungsstrichen. Also inklusive Zeilenumbrüche etc. Des Weiteren, habe ich Testweise mal ein ' an den Anfang gesetzt in der Hoffnung es würde helfen.

LG


  

Betrifft: AW: Probleme bei Replace von: Adis
Geschrieben am: 14.08.2014 15:43:42

Hallo

normalerweise könnte ich schreiben ich bin raus. Wenn mich aber etwas aergert bin ich ein verbissenes Kerlchen das wissen will was da falsch ablaeuft. Dann werde ich sehr sehr grüdlich und überlege wie man dem Phaenomen auf die Spur kommen kann.

Sollte es im Programm eine On Error Anweisung geben bitte mal rausnehmen damit Excel direkt im Editor anzeigt in weicher Befehlszeile der Fehler auftritt. Ob sie bei Selection.Replace liegt, oder vorher beim laden der Variablen?

Ein weiterer Trick von mir ist: On Error Goto Fehler
Mit einer Fehler Routine vor (End Sub). Dazu muss man das normale Programm vor der Fehlermeldung mit (Exit Sub) beenden.

Dann schreibe ich mir in zwei Nachbarzellen die frei ist den Wert von nummer und neu
Meistens nur von 1-2 Ereignissen und unterbreche das Programm mit (Exit Sub) zum prüfen.
Dann schaue ich mir in Ruhe an ob mir in den Werten etwas auffaellt. z.B. Sonderzeichen die Excel nicht verrbeiten kann.
Im Zweifel mal eine ganze Fehlerliste erstellen und drüberschauen. Irgendwann faellt einem der Fehler auf.

Fehler: f=f+1
'Prüfroutine mit Zaehler f+1
Range(freiZelle)=nummer
Range(freiZelle2)=neu
İf f = 2 Then Exit Sub
Resume Next
End Sub


  

Betrifft: AW: Probleme bei Replace von: Heiti
Geschrieben am: 15.08.2014 07:20:45

Moin,

ich hab es gefunden.
Microsoft hat hier scheinbar eine Länge von 255 Zeichen als Grenze gesetzt.

Hier mein Quellcode mit dem es läuft:

        nummer = ExcelWkb.Sheets("Anweisungstexte").Cells(i, 1).Text
        neu = ExcelWkb.Sheets("Anweisungstexte").Cells(i, 2).Text & vbCrLf & ExcelWkb.Sheets(" _
Anweisungstexte").Cells(i, 3).Text
        Laenge = Len(neu)
        If nummer <> "" Then
            If Laenge > 510 Then
                neu1 = Left(neu, 253) & "§$"
                neu2 = Right(neu, Laenge - 253)
                neu2 = Left(neu2, 253) & "§$"
                neu3 = Right(neu, Laenge - 506)

                Selection.Replace What:=nummer, Replacement:=neu1, LookAt:= _
                    xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False
                Selection.Replace What:="§$", Replacement:=neu2, LookAt:= _
                    xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False
                Selection.Replace What:="§$", Replacement:=neu3, LookAt:= _
                    xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False
            ElseIf Laenge > 255 Then
                neu1 = Left(neu, 253) & "§$"
                neu2 = Right(neu, Laenge - 253)
                Selection.Replace What:=nummer, Replacement:=neu1, LookAt:= _
                    xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False
                Selection.Replace What:="§$", Replacement:=neu2, LookAt:= _
                    xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False
            Else
                Selection.Replace What:=nummer, Replacement:=neu, LookAt:= _
                    xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False
            End If
        End If
Vielen Dank trotzdem für die Hilfe


  

Betrifft: AW: Probleme bei Replace von: Adis
Geschrieben am: 15.08.2014 19:29:08

Raffiniert, Hut ab .... Ideen muss man haben.

Computer sind gutmütig und lassen sich austricksen. Hauptsache es funktioniert

Gruss Adis