VBA 2003 vs. VBA 2010 Portierungsproblem
Bernd
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