Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1248to1252
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA 2003 vs. VBA 2010 Portierungsproblem

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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA 2003 vs. VBA 2010 Portierungsproblem
16.02.2012 11:13:37
Christian
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
AW: VBA 2010 ist rückwärtskompatibel...
16.02.2012 22:54:22
Franz
Hallo,
... also speichere ich einige Dateien im Excel 97 - 2003 .xls Format ab, auch mit Makros.
Eine Alternative?
Tschüss
Franz D.
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige