| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | |  | InnovationForum Medizintechnik, eine Veranstaltung am 23.10.2025
|
Autor
|
Thema: 2013 ..muss für die Verwendung auf 64-Bit-System .. (18762 mal gelesen)
|
Branscheid-GmbH Mitglied Konstrukteur

 Beiträge: 19 Registriert: 18.06.2007 SolidWorks 2013 SP1.0
|
erstellt am: 21. Dez. 2012 15:08 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ein "altes" Makro läuft seit SW2013 nicht mehr, da : "der Code in diesem Projekt muss für die Verwendung auf 64-Bit-Systemen aktualisiert werden. Überarbeiten und aktualisieren Sie Declare-Anweisungen, und markieren Sie sie mit dem PtrSafe-Attribut". Kann mir jemand bitte sagen was ich da eintragen muss ?! Folgende Zeilen sind "rot" markiert, weil ... ========================================================== 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 Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long ========================================================== Es wäre sehr nett, wenn mir jemand dabei helfen könnte !! Ansonsten wünsche ich frohe Festtage ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
  
 Beiträge: 824 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 21. Dez. 2012 15:36 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
Hallo Eigendlich sollte es reichen wenn du nach "Declare" "PtrSafe" reinschreibst. Näheres dazu findes du hier https://forum.solidworks.com/docs/DOC-2141 Andererseits sollte der Code um ein MakroFenster in den Vordergrund zu bringen in SWX2013 64bit nicht mehr nötig sein, da die mit VBA7 laufen. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Branscheid-GmbH Mitglied Konstrukteur

 Beiträge: 19 Registriert: 18.06.2007 SolidWorks 2013 SP1.0
|
erstellt am: 21. Dez. 2012 15:48 <-- editieren / zitieren --> Unities abgeben:         
|
HenryV Mitglied Konstrukteur, Engineering
  
 Beiträge: 824 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 21. Dez. 2012 16:13 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
Vieleicht so... Code: #If VBA7 Then Declare PtrSafe Function SetWindowPos Lib "user32" _ (ByVal hwnd As LongPtr, ByVal hWndInsertAfter As LongPtr, ByVal x As Long, _ ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long #Else 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 Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long #End If
------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Branscheid-GmbH Mitglied Konstrukteur

 Beiträge: 19 Registriert: 18.06.2007 SolidWorks 2013 SP1.0
|
erstellt am: 21. Dez. 2012 16:54 <-- editieren / zitieren --> Unities abgeben:         
TOP !!!! Vielen herzlichen Dank - auch im Namen meiner Kollegen, die jetzt wieder schneller die Schriftfelder ausfüllen können. Bin froh, dass es solch eine Anlaufstelle mit vielen kompetenten + hilfsbereiten Menschen gibt !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nase81 Mitglied
 Beiträge: 1 Registriert: 13.11.2017
|
erstellt am: 13. Nov. 2017 10:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
Hallo, ich habe ein ähnliches Problem. Ich habe vor Jahren mal ein Makro zum speichern unserer unserer e-mails geschrieben/zusammenkopiert. Haben jetzt auf das 64bit Office umgestellt und ich bekomme das ding nicht mehr zum laufen. Habe das makro analog oben angepasst, bin mir aber nicht sicher welche Variablen-Deklarationen ich von Long auf LongPtr umstellen muss?: Kann mir da jemand weiterhelfen? Code:
Private Const EXM_OPT_FILENAME_BUILD As String = "em_<DATE>_<SUBJECT>" Private Const EXM_OPT_CLEANSUBJECT_REGEX As String = "RE:\s|Re:\s|AW:\s|FW:\s|WG:\s|SV:\s|Antwort:\s" Private Const EXM_OPT_FILENAME_DATEFORMAT As String = "mmdd" Private Const MAX_PATH = 260Private Type OpenFilename lStructSize As Long hWndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String Flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type Private Const OFN_ALLOWMULTISELECT = &H200 Private Const OFN_CREATEPROMPT = &H2000 Private Const OFN_ENABLEHOOK = &H20 Private Const OFN_ENABLETEMPLATE = &H40 Private Const OFN_ENABLETEMPLATEHANDLE = &H80 Private Const OFN_EXPLORER = &H80000 Private Const OFN_EXTENSIONDIFFERENT = &H400& Private Const OFN_FILEMUSTEXIST = &H1000 Private Const OFN_HIDEREADONLY = &H4& Private Const OFN_LONGNAMES = &H200000 Private Const OFN_NOCHANGEDIR = &H8& Private Const OFN_NODEREFERENCELINKS = &H100000 Private Const OFN_NOLONGNAMES = &H40000 Private Const OFN_NONETWORKBUTTON = &H20000 Private Const OFN_NOTESTFILECREATE = &H10000 Private Const OFN_OVERWRITEPROMPT = &H2& Private Const OFN_PATHMUSTEXIST = &H800 Private Const OFN_READONLY = &H1 Private Const OFN_SHAREAWARE = &H4000 Private Const OFN_SHAREFALLTHROUGH = 2 Private Const OFN_SHAREWARN = 0 Private Const OFN_SHARENOWARN = 1 Private Const OFN_SHOWHELP = &H10 Private Const OFS_MAXPATHNAME = 128 #If VBA7 Then Private Declare PtrSafe Function GetSaveFileName Lib "comdlg32" _ Alias "GetSaveFileNameA" ( _ lpOpenfilename As OpenFilename) As Long Private Declare PtrSafe Function CommDlgExtendedError Lib "comdlg32" () As Integer Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As Long #Else Private Declare Function GetSaveFileName Lib "comdlg32" _ Alias "GetSaveFileNameA" ( _ lpOpenfilename As OpenFilename) As Long Private Declare Function CommDlgExtendedError Lib "comdlg32" () As Integer Private Declare Function GetActiveWindow Lib "user32" () As Long #End If Public Sub Speichern_unter_EIN(MainPath As String) Dim myExplorer As Outlook.Explorer Dim myfolder As Outlook.MAPIFolder Set myExplorer = Application.ActiveExplorer Set myfolder = myExplorer.CurrentFolder End Sub Public Sub Speichern_unter(MainPath As String) Dim myExplorer As Outlook.Explorer Dim myfolder As Outlook.MAPIFolder Dim myItem As Object Dim olSelection As Selection Dim myMailItem As MailItem Dim strDate As String Dim strSender As String Dim strReceiver As String Dim strSubject As String Dim strFinalFileName As String Dim strFullPath As String Set myExplorer = Application.ActiveExplorer Set myfolder = myExplorer.CurrentFolder If myfolder Is Nothing Then Error 5001 If Not myfolder.DefaultItemType = olMailItem Then GoTo ExitScript If myExplorer.Selection.Count > 1 Then MsgBox "Bitte nur eine E-Mail auswehlen" GoTo ExitScript End If If myExplorer.Selection.Count = 0 Then MsgBox "Bitte eine E-Mail auswehlen" GoTo ExitScript End If Set olSelection = myExplorer.Selection For Each myItem In olSelection If TypeOf myItem Is MailItem Then Set myMailItem = myItem strDate = Format(myMailItem.ReceivedTime, EXM_OPT_FILENAME_DATEFORMAT) strSender = myMailItem.SenderName strReceiver = myMailItem.To If InStr(strReceiver, ";") > 0 Then strReceiver = Left(strReceiver, InStr(strReceiver, ";") - 1) strSubject = myMailItem.Subject strFinalFileName = EXM_OPT_FILENAME_BUILD strFinalFileName = Replace(strFinalFileName, "<DATE>", strDate) strFinalFileName = Replace(strFinalFileName, "<SENDER>", strSender) strFinalFileName = Replace(strFinalFileName, "<RECEIVER>", strReceiver) strFinalFileName = Replace(strFinalFileName, "<SUBJECT>", strSubject) strFinalFileName = CleanString(strFinalFileName) If Left(strFinalFileName, 15) = "ERROR_OCCURRED:" Then strErrorMsg = Mid(strFinalFileName, 16, 9999) Error 1003 End If strFinalFileName = IIf(Len(strFinalFileName) > 251, Left(strFinalFileName, 251), strFinalFileName) Flt$ = "Outlook Nachrichtenformat (.msg)|*.msg|" FName$ = GetSaveName(Flt$, "msg", MainPath, strFinalFileName) If FName$ = "" Then GoTo ExitScript Else myMailItem.SaveAs FName$, olMSG End If myMailItem.Categories = "gespeichert" myMailItem.Save Next ExitScript: End Sub Private Function CleanString(strData As String) As String Const PROCNAME As String = "CleanString" On Error GoTo ErrorHandler Dim objRegExp As Object Set objRegExp = CreateObject("VBScript.RegExp") objRegExp.Global = True objRegExp.Pattern = EXM_OPT_CLEANSUBJECT_REGEX strData = objRegExp.Replace(strData, "") strData = Replace(strData, Chr(9), "_") strData = Replace(strData, Chr(10), "_") strData = Replace(strData, Chr(13), "_") objRegExp.Pattern = "[/\\*]" strData = objRegExp.Replace(strData, "-") objRegExp.Pattern = "[""]" strData = objRegExp.Replace(strData, "'") objRegExp.Pattern = "[:?<>\|]" strData = objRegExp.Replace(strData, "") objRegExp.Pattern = "\s+" strData = objRegExp.Replace(strData, " ") objRegExp.Pattern = "_+" strData = objRegExp.Replace(strData, "_") objRegExp.Pattern = "-+" strData = objRegExp.Replace(strData, "-") objRegExp.Pattern = "'+" strData = objRegExp.Replace(strData, "'") strData = Trim(strData) CleanString = strData ExitScript: Exit Function ErrorHandler: CleanString = "ERROR_OCCURRED:" & "Error #" & Err & ": " & Error$ & " (Procedure: " & PROCNAME & ")" Resume ExitScript End Function Private Function PrepareFilter(Flt$) As String Const O$ = "|" Dim Temp$ Dim i As Integer Temp$ = Flt$ i = 1 Do While InStr(i, Flt$, O$) <> 0 PrepareFilter = PrepareFilter + _ Mid(Temp$, i, InStr(i, Temp$, O$) - i) + vbNullChar i = InStr(i, Temp$, O$) + Len(O$) Loop PrepareFilter = PrepareFilter + _ Right(Temp$, Len(Temp$) - i + 1) + vbNullChar End Function Public Function GetSaveName(ByVal Filter$, ByVal DefExt$, ByVal InitialDir$, ByVal InitialName$) As String Dim OFN As OpenFilename Dim Temp$ Dim n As Integer With OFN .lStructSize = Len(OFN) .hWndOwner = GetActiveWindow() .lpstrFilter = PrepareFilter(Filter$) .lpstrFile = InitialName$ & String$(700, vbNullChar) .nMaxFile = 700 .lpstrFileTitle = String$(MAX_PATH, vbNullChar) .nMaxFileTitle = MAX_PATH .lpstrInitialDir = InitialDir$ .lpstrTitle = "Speichern unter" .Flags = OFN_EXTENSIONDIFFERENT Or _ OFN_NOCHANGEDIR Or OFN_OVERWRITEPROMPT _ Or OFN_HIDEREADONLY .lpstrDefExt = DefExt$ End With If GetSaveFileName(OFN) Then Temp$ = OFN.lpstrFile n = InStr(Temp$, vbNullChar) If n > 1 Then GetSaveName = Left$(Temp$, n - 1) Else GetSaveName = "" End If Else GetSaveName = "" End If End Function
[Diese Nachricht wurde von Nase81 am 13. Nov. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 14. Nov. 2017 08:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
|
picat Mitglied IT-Supporter
 Beiträge: 2 Registriert: 26.04.2019
|
erstellt am: 26. Apr. 2019 08:19 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
Hallo zusammen, ich habe die Anpassungen gemacht für die 64bit Systeme, nun stehe ich aber an mit einem Syntaxfehler. Da ich absoluter Anfänger bin in VBA, wäre ich dankbar wenn mir jemand aus der Patsche helfen kann. Herzlichen Dank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3374 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 26. Apr. 2019 11:38 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
|
picat Mitglied IT-Supporter
 Beiträge: 2 Registriert: 26.04.2019
|
erstellt am: 26. Apr. 2019 13:39 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
|
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3374 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 26. Apr. 2019 16:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
Schau noch mal auf die Declaration (im anderen Screenshot sichtbar) anscheinend erwartet die Funktion nur byVal lpString as Long vielleicht ist das schon nicht richtig. Den Sinn verstehe ich auch noch nicht ganz. - liefert in vba len() nicht das gleiche? - was soll TrimNull machen? Den Linken Teil in voller Länge wiedergeben? ich hab mal den aktiven Benutzernamen so geholt: MyUserName = Environ$("username") (einfach so … ) Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2632 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 26. Apr. 2019 16:25 <-- editieren / zitieren --> Unities abgeben:          Nur für Branscheid-GmbH
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |