Unterschiede zwischen VBA 5/6-Befehlen

20/12/2008 - 21:24 von Thomas Wiedmann | Report spam
Hallo,

da ich sowohl auf einem Rechner arbeite, auf dem Office 97 installiert ist,
als auch auf einem Rechner mit Office 2000 (ich weiß - beide Versionen sind
schon etwas àlter - Update im Moment nicht vorgesehen/möglich), wàre es für
die Erstellung von VBA-Prozeduren vorteilhaft, wenn es irgendwo eine
Übersicht darüber gàbe, welche Befehle sich zwischen VBA 5 und 6 geàndert
haben. Leider hab ich bislang eine solche Übersicht gefunden. Kennt jemand
einen Link mit einer guten Vergleichs-Übersicht zwischen VBA 5 und 6?

Thomas Wiedmann
 

Lesen sie die antworten

#1 Lisa
20/12/2008 - 22:38 | Warnen spam
Hallo Thomas,

da ich sowohl auf einem Rechner arbeite, auf dem Office 97 installiert ist,
als auch auf einem Rechner mit Office 2000



so wahnsinnig viele Befehle sind es gar nicht. Für Excel kann ich noch
das hier bieten, vieles trifft auf Word auch zu: http://xlam.ch/pos/vbawinmac.htm

Ich arbeite jedoch auch alternierend zwischen den Versionen und habe
dafür für Word 97 ein eigenes Modul, in dem nur in VBA5 "fehlende"
Funktionen enthalten sind, die bedingt kompiliert werden. Man kann sie
also unter VBA6 ganz normal benutzen, dann wird das Modul nicht
kompiliert. Falls man in Word 97 arbeitet, wird das Modul kompiliert.
Ich kopiere es mal hier ein:

In ein normales Modul:
_____
Option Explicit

#If VBA6 = False Then

Public Function Join(source() As String, Optional sDelim As String
= " ") As String

Dim sOut As String, iC As Integer

On Error GoTo errh:

For iC = LBound(source) To UBound(source) - 1
sOut = sOut & source(iC) & sDelim
Next

sOut = sOut & source(iC)
Join = sOut
Exit Function
errh:
Err.Raise Err.Number

End Function

Public Function Split(ByVal sIn As String, _
Optional sDelim As String, _
Optional nLimit As Long = -1, _
Optional bCompare As Long = 0) As Variant

Dim sRead As String, sOut() As String, nC As Integer

If sDelim = "" Then
Split = sIn
End If
sRead = ReadUntil(sIn, sDelim, bCompare)
Do
ReDim Preserve sOut(nC)
sOut(nC) = sRead
nC = nC + 1
If nLimit <> -1 And nC >= nLimit Then Exit Do
sRead = ReadUntil(sIn, sDelim)
Loop While sRead <> ""
ReDim Preserve sOut(nC)
sOut(nC) = sIn
Split = sOut

End Function

Public Function StrReverse(ByVal sIn As String) As String

Dim nC As Integer, sOut As String

For nC = Len(sIn) To 1 Step -1
sOut = sOut & Mid(sIn, nC, 1)
Next
StrReverse = sOut

End Function

Public Function InStrRev(ByVal sIn As String, _
sFind As String, _
Optional nStart As Long = 1, _
Optional bCompare As Long = 0) As Long

Dim nPos As Long
sIn = StrReverse(sIn)
sFind = StrReverse(sFind)
nPos = InStr(nStart, sIn, sFind, bCompare)
If nPos = 0 Then
InStrRev = 0
Else
InStrRev = Len(sIn) - nPos - Len(sFind) + 2
End If

End Function

Public Function Replace(sIn As String, _
sFind As String, _
sReplace As String, _
Optional nStart As Long = 1, _
Optional nCount As Long = -1, _
Optional bCompare As Long = 0) As String

Dim nC As Long, nPos As Integer, sOut As String

sOut = sIn
nPos = InStr(nStart, sOut, sFind, bCompare)
If nPos = 0 Then GoTo EndFn:
Do
nC = nC + 1
sOut = Left(sOut, nPos - 1) & sReplace & _
Mid(sOut, nPos + Len(sFind))
If nCount <> -1 And nC >= nCount Then Exit Do
nPos = InStr(nStart, sOut, sFind, bCompare)
Loop While nPos > 0
EndFn:
Replace = sOut

End Function
#End If
____

Weiter wird noch benötigt:
____
Public Function ReadUntil(ByRef sIn As String, _
sDelim As String, _
Optional bCompare As Long = 0) As String

Dim nPos As String
nPos = InStr(1, sIn, sDelim, bCompare)
If nPos > 0 Then
ReadUntil = Left(sIn, nPos - 1)
sIn = Mid(sIn, nPos + Len(sDelim))
End If

End Function
_____
Die steht bei mir in einem anderen Modul, weil man sie auch unter VBA6
mal brauchen kann. Natürlich kann sie aber auch in das erste mit
hinein.

Beim versionsübergreifenden Programmieren gibt es auch sonst manchmal
kleine Unterschiede (manchmal willkürliche Konstantenànderungen) oder
eben neue Features. Da hilft nur, in allen Versionen testen und wo
immer nötig, bedingt kompilierten Code. Für manche
Versionsunterschiede ist auch die Abfrage der Word-Version und
Reaktion in Select-Case-Schleifen nötig:
_____
MsgBox Val(Application.Version)
_____

Ach so, Enum gab es in VBA5 noch nicht, ist zwar schön, aber man kommt
auch ohne aus.
Vielleicht kann ja noch jemand ergànzen, ich hab das jetzt so aus dem
Ärmel geschüttelt, bestimmt habe ich noch einiges vergessen.

Gruß
Lisa
_____
http://www.schreibbuero-richter.de/vba.html

Ähnliche fragen