Microsoft Excel

Herbers Excel/VBA-Archiv

function liefert Laufzeitfehler 6

Betrifft: function liefert Laufzeitfehler 6 von: Stefan Brundert
Geschrieben am: 06.10.2020 16:28:53

Moin Forumsgemeinde...


ich weiß mal wieder nicht weiter.


die nachfolgende Function liefert mir aus einem String die darin enthaltenen Zahlen


Function hausnummer(rngzelle As Range) As String

Dim lngZ As Long
Application.Volatile

For lngZ = 1 To Len(rngzelle)
  Select Case Mid(rngzelle, lngZ, 1)
    Case 0 To 9
      hausnummer = hausnummer & Mid(rngzelle, lngZ, 1)
    
    Case Else
    
  End Select

Next lngZ

If hausnummer = "" Then hausnummer = "0"

End Function


Aufgerufen wird sie mit dieser Befehlszeile aus einem Makro:

hausnr = CInt(hausnummer(.Range("E" & z)))



Leider liefert sie nicht immer, sondern meldet bei manchen übegebenen Zellinhalten Laufzeitfehler 6: Überlauf


Beispielweise bei dem folgenden Inhalt:


Papenstraße 123-125



Ich kann dezidiert mittels Einzelschritten verfolgen wie die Function nacheinander die Ziffern 123125 fehlerlos extrahiert, in hausnummer steht dann der string "123125" und sobald die Befehlszeile End
Function aufgerufen wird (also offensichtlich bei der Rückgabe des strings an das aufrufende _
Makro), kommt der Fehler.

irgendeine Idee, was da die Ursache ist ???

Betrifft: AW: function liefert Laufzeitfehler 6
von: ChrisL
Geschrieben am: 06.10.2020 16:38:03

Hi

Datentyp Integer = Ganzzahlen -32.768 bis 32.767

Die Zahl 123125 ist zu gross für diesen Datentyp, weshalb der Fehler "Überlauf" angezeigt wird.

Mittels Datentyp Long (CLng anstelle CInt) sollte es funktionieren.

cu
Chris

Betrifft: AW: function liefert Laufzeitfehler 6
von: ChrisL
Geschrieben am: 06.10.2020 19:23:11

Hi

Der Einwand von Daniel hat was.

Regex oder Formel, z.B.
https://www.herber.de/forum/archiv/952to956/955440_Hausnummern_von_Adressen_trennen.html
https://www.herber.de/excelformeln/pages/Straenname_und_HausNr_trennen.html

cu
Chris

Betrifft: AW: function liefert Laufzeitfehler 6
von: Nepumuk
Geschrieben am: 06.10.2020 16:38:04

Hallo Stefan,

ein Interger kann nur Zahlen von -32.768 bis 32.767 aufnehmen. Deine Zahl ist 123.125 also außerhabl des Bereichs. Dimensioniere hausnr As Long und dann so:

hausnr = CLng(hausnummer(.Range("E" & z)))

Gruß
Nepumuk

Betrifft: AW: function liefert Laufzeitfehler 6
von: Daniel
Geschrieben am: 06.10.2020 18:20:26

Hi
welchen Sinn macht es, aus einer Hausnummer eine Zahl (CInt) zu erzeugen?
willst du damit rechnen?

neben der vorhandenen von-bis-Angabe gibt's ja auch noch reguläre Buchstabenerweiterungen (1A, 2B), dh ein sinnvolles Ergebnis bekommst du damit zwar häufig, aber nicht immer.

wäre es auch für deinen fall nicht besser, aus "123-125" als Zahl nur die 123 zu machen anstatt der 123125?
dann hättest du zumindest was halbwegs passendes, und nicht einen kompletten Unfug.

Gruß Daniel