Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1308to1312
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
Windows 32 und 64bit
06.05.2013 09:28:38
Mark
Hallo zusammen,
ich habe ein Excel-Dokument das zentral auf einem Server liegt. Mehrere Nutzer können das Dokument öffnen und bearbeiten, speichern, usw..
Leider haben die Nutzer verschiedene Excel Versionen (2003-2010) und jetzt auch verschiedene Bit-Systeme (32+64bit).
Für das Programm habe ich ein VBA-Code von Hajo benutzt. Dieser basiert scheinbar auf einem 32bit Programmiercode. Wenn ich die Datei mit einem 64bit Rechner öffnen möchte, erscheint eine Fehlermeldung (siehe unten).
Gibt es eine Möglichkeit, dass die Datei von 32 und 64 bit Systemen geöffnet werden kann?
Zum besseren Verständnis - hier die Fehlermeldung:
Userbild
... und hier der Code:
Option Explicit ' Variablendefinition erforderlich
Option Private Module ' damit Makros nich von Hand gestartet werden können
'**************************************************
'* H. Ziplies *
'* 12.08.10 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/
*
'* abgeändert von Nepumuk 23.05.2004 *
'* Userform immer im Vordergrund *
'**************************************************
Public Declare

Function FindWindow Lib "User32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare 

Function SetWindowPos Lib "User32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare 

Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Public Enum Parameter
HWND_TOPMOST = -1
SWP_NOSIZE = &H1
SWP_NOMOVE = &H2
SWP_NOACTIVATE = &H10
SWP_SHOWWINDOW = &H40
End Enum
Public DaEt As Date                         ' Prüfzeit für Eingabe in der Tabelle
Public DaET1 As Date                        ' Prüfzeit für Reaktion in Userform
Public DaET2 As Date                        ' Zeit zum Wechsel der Anzeige
Public BoZu As Boolean                      ' Variable Zustand
Public Const DaZeit As Date = "00:00:40"    ' Zeitabstand prüfen, Eingabe Tabelle
Public Const DaZeit1 As Date = "00:00:30"   ' Zeitabstand prüfen, Userform
Public Const DaZeit2 As Date = "00:00:01"   ' Zeitabstand für Restzeit
Public BoEnde As Boolean                    ' Variable Beenden

Sub Zeitmakro()                             ' Zeitmakro Eingabe Tabelle
BoZu = False
' Fehlerbehandlung ausschalten
On Error Resume Next
' Makro anhalten
Application.OnTime EarliestTime:=DaET1, Procedure:="Zeitmakro", Schedule:=False
' Fehlerbehandlung einschalten
On Error GoTo 0
' neue Startzeit setzen
DaEt = Now + DaZeit
' Makro zum festgelegten Zeitpunkt starten
Application.OnTime DaEt, "Start"
End Sub

Sub Start() ' Zeitmakro Anzeige Userform
DaET1 = Now + DaZeit1 ' Zeit für das schließen der Datei festlegen
Application.OnTime DaET1, "Schließen" ' Makro zum festgelegten Zeitpunkt starten
SetActiveWindow FindWindow("xlMain", vbNullString)
frm_Abfrage.Show ' UserForm starten
End Sub

Sub Schließen()
'Unload UserForm1
If BoZu = False Then
ThisWorkbook.Save ' Datei speichern
' falls nur eine Datei auf Excel schließen
' ess erfolgt eine Abfrage zum speichern
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End If
End Sub

Sub Zeitabstand() ' Makro für laufende Zeit in UserForm
With frm_Abfrage
' neue Zeit auf das Label schreiben
.LbL_Zeit.Caption = "Restzeit: " & CDate(CDate(Right(.LbL_Zeit.Caption, 8)) _
- DaZeit2)
' Prüfen ob Zeit abgelaufen ist
If CDate(Right(.LbL_Zeit.Caption, 8)) > 0 Then
' neue Startzeit setzen
DaET2 = Now + DaZeit2
' Makro zum festgelegten Zeitpunkt starten
Application.OnTime DaET2, "Zeitabstand"
End If
End With
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Windows 32 und 64bit
06.05.2013 09:44:58
EtoPHG
Hallo Mark,
In diesem Thread wurde das Thema vor Kurzem behandelt. Ich hoffe, das hilft dir weiter.
Gruess Hansueli

AW: Windows 32 und 64bit
06.05.2013 10:25:28
Mark
Hallo Hansueli,
ich habe den Beitrag gelesen, kann aber damit nicht viel anfangen.
Ich benutze eigentlich nur Commandbutton und Checkboxen. Diese zählen hoffentlich nicht zu den ActiveX-Steuerelementen. Wenn ich den Beitrag richtig verstanden habe, lassen ActiveX-Steuerelemente nicht von 32 und 64bit Systemen öffnen - also entweder 32 oder 64!
Für meinen Fall müsste es dann aber eigentlich funktionieren.Da mein VBA eher nicht so gut ist, habe ich hier das Dokument nochmal hochgeladen.
https://www.herber.de/bbs/user/85205.zip

Anzeige
AW: Windows 32 und 64bit
06.05.2013 11:00:44
Rudi
Hallo,
Ändere mal:
#If win64 Then
Public Declare ptrsafe Function FindWindow Lib "User32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As ptrLong
Public Declare ptrsafe Function SetWindowPos Lib "User32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As ptrLong, ByVal X As ptrLong, ByVal Y As ptrLong, _
ByVal cx As ptrLong, ByVal cy As ptrLong, ByVal wFlags As ptrLong) As ptrLong
Declare ptrsafe Function  SetActiveWindow Lib "user32.dll" (ByVal hwnd As ptrLong) As ptrLong
#Else
Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetWindowPos Lib "User32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
#End If

Stör dich nicht am Debugger.
Gruß
Rudi

Anzeige
AW: Windows 32 und 64bit
06.05.2013 11:33:22
Mark
Den Code habe ich ausprobiert.
Er funktioniert leider nicht, oder ich habe was falsch gemacht.
Habe auch "vba7" statt "win64" ausprobiert!

Was genau heisst: Er funktioniert nicht? (owT)
06.05.2013 11:34:44
EtoPHG

AW: Was genau heisst: Er funktioniert nicht? (owT)
06.05.2013 11:53:02
Mark
Auf meinem Win32 Rechner mit Excel 32bit funktioniert der Code.
Auf einem 64bit Rechner mit Excel 64bit bleibt der Code hier hängen...
Userbild
...oder muss hier "User64" und "user64.dll" stehen?
Gruß
-Mark-

Das kann so nicht funtkioneren!
06.05.2013 12:17:56
EtoPHG
Hallo Mark,
Zitat:
Auf einem 64bit Rechner mit Excel 64bit bleibt der Code hier hängen...
Wenn du nochmals alles genau durchliest (inkl. und v.a. dem verlinkten Thread!) und du hast wirklich ein 64Bit Excel, dann musst dir doch klar sein: 64Bit-Excel kann nicht mit 32Bit-Steuerelementen arbeiten!
Es ist selbst von Microsoft empfohlen 64Bit-Office nur dann zu installieren/benutzen, wenn es durch unabdingbar ist, siehe Auswählen der 32-Bit- oder 64-Bit-Version von Office
Du musst in deinem Fall 2 verschiedene Versionen deiner Arbeitsmappen haben:
1x 32Bit-Steuerelemente und 32Bit API-Calls für EXCEL-32Bit unter WINDOWS-32Bit oder WINDOWS-64Bit
1x 64Bit-Steuerelemente und 32/64Bit API-Calls für EXCEL-64Bit unter WINDOWS-64Bit
Ist jetzt alles klar?
Gruess Hansueli

Anzeige
AW: Das kann so nicht funtkioneren!
06.05.2013 12:26:17
Mark
Ja, vielen dank!
Gruß
-Mark-

AW: Windows 32 und 64bit
06.05.2013 11:01:43
EtoPHG
Hallo Mark,
Du benutzt ActiveX-Steuerelemente (auch deine Commandbutton und CheckBoxen gehören dazu!) und API-Calls.
Für die ActiveX-Steuerelemente in deiner Mappe gilt:
Diese können nur auf einem EXCEL-32Bit unter Windows-32Bit oder Windows-64Bit laufen. Sie können nicht auf einem Office-64Bit verwendet werden! Es kommt für die Steuerelemente primär auf die EXCEL-Version und Bitbreite an, nicht auf die des Betriebssystems.
Für eine API-Calls (z.B. den Code von Hajo) gilt:
Die Functions müssen gemäss der Codestruktur deklariert werden, wie sie in diesem Microsoft Artikel erwähnt wird.
Gruess Hansueli

Anzeige
AW: Windows 32 und 64bit
06.05.2013 11:41:12
Mark
Den Microsoft Artikel habe ich auch versucht einzubauen. Das ist scheinbar auch das was Rudi Maintaire geschrieben hat. Nur irgendwas mache ich dabei wohl falsch!
Möglicherweise sollte ich das Programm wohl ganz umstrichen, so dass man es von allen möglichen Versionen nutzen kann. Da muss ich aber nochmal drüber nachdenken.
Vielen Dank erstmal für die Unterstützung!
Gruß
-Mark-

29 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige