Herbers Excel-Forum - das Archiv

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
Excel-Beispiele zum Thema "Kompilierungsfehler auf alter Excel Version"
Makro in Abhängigkeit der Excel-Version verzweigen Programmversion eines beliebigen Programms feststellen