Rocky Smolin
rockysmolin at bchacc.com
Fri Jan 14 10:31:19 CST 2011
So you think it's the ActiveX control? Couple days ago there was a solution to this, I think, from Stuart replacing the ComDialog with API calls. Posted below. Rocky > I've been using the ComDialog control to choose folders and such but > it doesn't work with Vista/Windows 7. > > Any suggestions to replace it? Windows API calls. Here ya go. It's what I always use instead of the control. First one for File selection, second for Folder selection.\: '----------------------------------- 'For files: '-------------------------------------- Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _ "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long 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 Function GetFileName(Directory As String) As String Dim OpenFile As OPENFILENAME Dim lReturn As Long Dim sFilter As String OpenFile.lStructSize = Len(OpenFile) OpenFile.hwndOwner = 0 OpenFile.hInstance = 0 sFilter = "" & Chr(0) OpenFile.lpstrFilter = sFilter OpenFile.nFilterIndex = 0 OpenFile.lpstrFile = String(257, 0) OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1 OpenFile.lpstrFileTitle = OpenFile.lpstrFile OpenFile.nMaxFileTitle = OpenFile.nMaxFile OpenFile.lpstrInitialDir = Directory OpenFile.lpstrTitle = "Select File" OpenFile.flags = 0 lReturn = GetOpenFileName(OpenFile) GetFileName = Left$(OpenFile.lpstrFile, InStr(OpenFile.lpstrFile, Chr$(0)) - 1) End Function '---------------------------------- 'For Folders '---------------------------------- Option Compare Database Option Explicit Public Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long Public Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, _ ByVal pszPath As String) As Long Public Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long) Public Type BROWSEINFO 'BI hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type Function GetFolder() As String Dim pidl As Long Dim BI As BROWSEINFO Dim sPath As String Dim pos As Integer 'Fill BROWSEINFO structure data With BI .hOwner = 0 .pidlRoot = 0 .lpszTitle = "Browsing" .ulFlags = 1 .pszDisplayName = Space$(260) End With 'show dialog returning pidl to selected item pidl = SHBrowseForFolder(BI) 'if pidl is valid, parse & return the user's selection sPath = Space$(260) If SHGetPathFromIDList(ByVal pidl, ByVal sPath) Then 'SHGetPathFromIDList returns the absolute 'path to the selected item. No path is returned for virtual folders. pos = InStr(sPath, Chr$(0)) If pos Then GetFolder = Left(sPath, pos - 1) Else: GetFolder = "" End If 'free the pidl Call CoTaskMemFree(pidl) End Function -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Tony Septav Sent: Friday, January 14, 2011 6:37 AM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Windows 7 Hey Rocky No a test bed is not an option at the moment. I could get them to set the compatability mode for Access2003 or rewrite the code for the commondialog and not use an activex control. But I am just wondering how this is going to affect other standalone applications I have designed in Access2003 for other clients. Rocky Smolin wrote: >I put W7 on my backup box so I don't do much Access over there. But >what I have done - so far no problems. Do you have a spare box you >could put W7 on and use for a test bed? > >Rocky > > >-----Original Message----- >From: accessd-bounces at databaseadvisors.com >[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Tony Septav >Sent: Friday, January 14, 2011 6:11 AM >To: Access Developers discussion and problem solving >Subject: [AccessD] Windows 7 > >Hey All >I have an Access2003 program (MDE) used by a client, they have upgraded >their machines to Windows 7 and now they get the dreaded "The >OpenForm action was cancelled" when they click the button on the main >menu for one option (the others all work fine). The only thing this >form has that the others don't is a CommonDialog control. I haven't as >yet had them check for missing references (the office doesn't open >until 8AM, I may have to send them the MDB to check). They startup the >program with their version of Access2003. In trying to research the >cause of this problem, I am seeing that Access2003 can develop some problems when running under Windows 7. >Have any of you run into other problems? > >Thanks >Tony > >-- >AccessD mailing list >AccessD at databaseadvisors.com >http://databaseadvisors.com/mailman/listinfo/accessd >Website: http://www.databaseadvisors.com > > > -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com