Kompilierungsfehler auf alter Excel Version

Bild

Betrifft: Kompilierungsfehler auf alter Excel Version von: Helge
Geschrieben am: 17.02.2005 09:53:37

Hallo allerseit!

Ich verwende die Funktionen InStrRev, die Excel 8 nicht kennt, möchte den Code aber trotzdem unter Excel 8 laufen lassen. Dafür frage ich die Version ab um gegebenenfalls die Funktion nicht aufzurufen (intExcelVers ist eine globale Variable, die beim Start gesetzt wird):

If intExcelVers < 9 Then
Zeilenumbruch = 1
Exit Function
End If.

Trotztdem will Excel den Code kompilieren und gibt dann natürlich eine Fehlermeldung aus. Hat jemand eine Idee, wie ich das verhindern kann?

Vielen Dank schon mal,
Helge

Die gesamte Funktion sieht so aus:

Public


Function Zeilenumbruch(ByRef strText() As String, ByVal intZeichenProZeile As Integer) As Integer
'*************************************************************************
'* Zeilenumbruch -- Teilt einen String in Zeilen auf,                    *
'*   wobei an Leerzeichen getrennt wird. Die Leerzeichen                 *
'*   werden dabei entfernt.                                              *
'*   Enhält der String keine passenden Leerzeichen,                      *
'*   wird später oder gar nicht getrennt                                 *
'*                                                                       *
'* ACHTUNG: bei Excel 97 und tiefer wird nichts bearbeitet und           *
'*   der 1 zurückgewgeben, da diese Versionen InStrRev nicht kennen!     *
'*                                                                       *
'* Parameter                                                             *
'*   strText() -- der zu berabeitende String                             *
'*     ACHTUNG1: muss in strText(1) stehn                                *
'*     ACHTUNG2: muss ein DYNAMISCHER array sein, s. Rückgabe            *
'*                                                                       *
'*   intZeichenProZeile -- maximale Anzahl pro Zeile                     *
'*                                                                       *
'* Rückgabe                                                              *
'*   Anzahl der Zeilen                                                   *
'*   Die einzelnen Zeilen werden ind den array strText() geschrieben.    *
'*     Er wird also über ReDim entsprechend der Zeilenanzahl erweitert.  *
'*     Zusätzlich enthält er immer das leere Element strText(0).         *
'*                                                                       *
'* 01.02.2005 Helge                                                      *
'*************************************************************************
Dim intZeile As Integer
Dim intZeilenumbruchPos As Integer
intZeile = 1
If intExcelVers < 9 Then
  Zeilenumbruch = 1
  Exit Function
End If
Do While Len(strText(intZeile)) > intZeichenProZeile
  ' +1, weil das Leerzeichen ja noch abgeschnitten wird
  intZeilenumbruchPos = InStrRev(strText(intZeile), " ", intZeichenProZeile + 1)
  'Falls kein Lerzeichen inerhalb der max. Länge vorhanden ist, _
    wird weiter nach hinten gesucht
  If intZeilenumbruchPos = 0 Then
    intZeilenumbruchPos = InStr(intZeichenProZeile, strText(intZeile), " ")
  End If
  If intZeilenumbruchPos = 0 Then
    Exit Do
  End If
  
  ReDim Preserve strText(intZeile + 1)
  strText(intZeile + 1) = Right(strText(intZeile), Len(strText(intZeile)) - intZeilenumbruchPos)
  strText(intZeile) = Left(strText(intZeile), intZeilenumbruchPos - 1)
  intZeile = intZeile + 1
Loop
Zeilenumbruch = intZeile
        
End Function
Bild


Betrifft: AW: Kompilierungsfehler auf alter Excel Version von: EtoPHG
Geschrieben am: 17.02.2005 11:35:47

Hallo Helge,

Ich würde Dir vorschlagen auf die InStrRev Funktion zu verzichten.
Eine solche Funktion ist schliesslich relativ simpel selbst zu schreiben, z.B. so:

Public

Function InStrRevX(sInp As String, sSea As String, Optional lStart As Long) As Long
    Dim lx As Long
    If lStart = 0 Then lStart = Len(sInp)
    For lx = lStart To 1 Step -1
        If Mid(sInp, lx, Len(sSea)) = sSea Then
            InStrRevX = lx
            Exit Function
        End If
    Next lx
End Function


Damit kannst Du die Funktion InStrRevX in allen Versionen benutzen.

Gruss Hansueli


Bild


Betrifft: AW: Kompilierungsfehler auf alter Excel Version von: Helge
Geschrieben am: 17.02.2005 13:07:24

Hallo Hansueli,

vielen Dank! Läuft hervorragend!

Helge


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Kompilierungsfehler auf alter Excel Version"