Microsoft Excel

Herbers Excel/VBA-Archiv

VBA 2003 vs. VBA 2010 Portierungsproblem | Herbers Excel-Forum


Betrifft: VBA 2003 vs. VBA 2010 Portierungsproblem von: Bernd Lonsdorfer
Geschrieben am: 16.02.2012 10:35:44

Hallo,

berufsbedingt muß ich auf Office 2010 x64 umsteigen und fange nun an meine bisherigen in 2003 geschriebenen Projekte nach 2010 rüber zu holen. Gleich beim 1. Projekt gibt es Probleme. 2010 ist für mich absolutes Neuland. Scheinbar funktioniert hier VBA anders als in 2003.

Problem. 2010 sagt:
Fehler beim compilieren.

Der Code in diesem Projekt muss für die Verwendung auf
64 Bit-Systeme aktualisiert werde. Überarbeiten und
aktualisieren Sie Declare-Anweisungen, markieren Sie sie
mit dem PtrSave-Attribut.

?????

11Direckt in der ersten Anweisung wird "Function" als Fehler markiert. Bisherige I-Netsuche haben für mich nicht den gewünschten Erfolg gebracht. Ich stelle hier mal den gesamten Code rein, falls noch an anderer Stelle was geändert werden muss.

Declare



Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" _
    (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, _
    ByVal lpReturnedString As String, ByVal nSize As Long) As Long

---



Function GetDefaultPrinter() As String
Dim TempName As String
Dim DeviceNr As Long
TempName = String(1024, 0)
DeviceNr = GetProfileString("windows", "device", 0&, TempName, 1024)
GetDefaultPrinter = Application.Dialogs(xlDialogPrinterSetup).Show
If GetDefaultPrinter = False Then Exit Function
End Function

---
Sub Drucken_Stundenzettel()
    Druckbereich_Stundenzettel
    ActiveWindow.SelectedSheets.PrintOut , ActivePrinter:=GetDefaultPrinter
End Sub

---
Sub Drucken_alles()
    Druckbereich_gesamt
    ActiveWindow.SelectedSheets.PrintOut , ActivePrinter:=GetDefaultPrinter
End Sub

---
Sub Druckbereich_gesamt()
    
    Range("A1:V69").Select
    ActiveSheet.PageSetup.PrintArea = "$A$1:$V$69"
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0.5)
        .TopMargin = Application.InchesToPoints(0.5)
        .RightMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .Orientation = xlPortrait
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    Range("A1").Select
End Sub

---
Sub Druckbereich_Stundenzettel()
    
    Range("C1:t38").Select
    ActiveSheet.PageSetup.PrintArea = "$C$1:$t$38"
    With ActiveSheet.PageSetup
        .TopMargin = Application.InchesToPoints(0.5)
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .CenterHorizontally = True
        .Orientation = xlLandscape
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    Range("A1").Select
End Sub

---
Sub auto_open()
'Menuleiste für Tabellenblatt, Achtung:
'Menüleiste für Diagramm heißt: "Chart Menu Bar"
    Set cb = Application.CommandBars("Worksheet Menu Bar")
'Menüpunkt 'Drucken' löschen, falls schon vorhanden:
    Set cb1 = cb.FindControl(Tag:="Drucken")
    If Not cb1 Is Nothing Then cb1.Delete
'Menüpunkt 'Sortierung' einfügen:
    Set cb1 = cb.Controls.Add(Type:=msoControlPopup, _
                              before:=cb.Controls.Count, _
                              Temporary:=True)
    With cb1
        .Caption = "&Drucken"
        .Tag = "Drucken"
        End With
'Untermenüpunkte einfügen:
    With cb1.CommandBar.Controls.Add(Type:=msoControlButton)
        .Caption = "&Stundenzettel drucken"
        .OnAction = "Drucken_Stundenzettel"
    End With
    With cb1.CommandBar.Controls.Add(Type:=msoControlButton)
        .Caption = "&alles drucken"
        .OnAction = "Drucken_alles"
    End With

End Sub

Nicht dass ich mich mit der neuen Oberfläche rumschlagen muss, nun schießt VBA auch noch quer.

Ich bedanke mich auch schon mal recht herzlich für die kommende Hilfe.

Gruß
Bernd

  

Betrifft: AW: VBA 2003 vs. VBA 2010 Portierungsproblem von: Christian
Geschrieben am: 16.02.2012 11:13:37

Hallo Bernd,
schau mal in der VBA Hilfe unter "64-Bit-Visual Basic für Applikationen – Überblick"
Da ist die bedingte Kompilierung für VBA7 beschrieben.

Also:

If #VBA7 Then
    Declare PtrSafe Function GetProfileString Lib "kernel32" ....
#Else
    Declare Function Function GetProfileString Lib "kernel32" ....
#End If
Des weiteren wirst du mit den CommandBars Probleme kriegen. Diese gibt es in XL2010 ja nicht mehr. Wie man das Ribbon anpassen kannst findest du hier im Archiv

Grüße
Christian


  

Betrifft: AW: VBA 2010 ist rückwärtskompatibel... von: Franz D.
Geschrieben am: 16.02.2012 22:54:22

Hallo,
... also speichere ich einige Dateien im Excel 97 - 2003 .xls Format ab, auch mit Makros.
Eine Alternative?
Tschüss
Franz D.