2012-09-24 111 views
1

我在运行32位Microsoft Office的64位计算机(Windows 7)上构建了一个应用程序。客户端机器是64位Windows和64位办公室。从32位到64位的VBA代码 - Ms Access

我最初有comdlg32.dll问题,但包含PtrSafe关键字。接下来的问题是我安装到客户端机器中的IPCONFIG.dll丢失。

我现在编译好了,但我试图使用文件保存对话框(由肯Getz代码)。它似乎在跳过打开实际对话框并直接运行到运行时错误2522(需要文件名)。任何帮助赞赏。这是我使用的代码(回指向肯·盖茨的功能):

Function exportData_Click() 


Dim strFilter As String 
Dim strSaveFileName As String 
Dim The_Year As Variant 

Dim ctlCurrentControl As Control 
Dim queryName As String 



'Get the name of the control button clicked (corresponds to query name to be run) 
Set ctlCurrentControl = Screen.ActiveControl 
queryName = ctlCurrentControl.Name 



'Get combobox value and assign relavent values to The_Year 
The_Year = Forms![Extract Data]!Extract_Year.value 


'Change the year from a variant to what we need in the SQL 

If The_Year Like "20*" Then 
    The_Year = CInt(The_Year) 
    'MsgBox The_Year & "Data Type = " & VarType(The_Year) 
Else: The_Year = "*" 
'MsgBox The_Year & "Data Type = " & VarType(The_Year) 
End If 

'Set queryYear variable 
setYear (The_Year) 


'Check the variable is correct 
'MsgBox getYear() 

'Open the Save as Dialog to choose location of query save 

strFilter = ahtAddFilterItem("Excel Files (*.xlsx)", "*.xlsx") 

strSaveFileName = ahtCommonFileOpenSave(_ 
           openFile:=False, _ 
           Filter:=strFilter, _ 
       Flags:=ahtOFN_OVERWRITEPROMPT Or ahtOFN_READONLY) 

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, queryName, strSaveFileName 

End Function 

调试点,这条线:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, queryName, strSaveFileName 

回答

2

我发现这个代码将与MS访问64工作:

Function GetFile(strStartIn As String, strFilter As String) As String 
Dim f As Object 

    Set f = Application.FileDialog(3) 
    f.AllowMultiSelect = False 
    f.InitialFileName = strStartIn & strFilter 
    f.Show 

    GetFile = f.SelectedItems(1) 
End Function 

它不像Ken Getz的代码那么整洁,但应该适合选择一个文件来保存或打开。您可以参考了Microsoft Office库使用内置的常量如:

msoFileDialogOpen (1) 
msoFileDialogSaveAs (2) 
msoFileDialogFilePicker (3) 
msoFileDialogFolderPicker (4) 

http://msdn.microsoft.com/en-us/library/office/aa190813(v=office.10).aspx#ofobjFileDialogFilters

+0

感谢remou。它不会用Return =语句进行编译。我已经评论过,对话框正在出现。但是,saveAs仍然没有保存任何内容。 –

+0

全部排序。我只是用一个字符串(strSaveFileName)= f.SelectedItems(1) 非常感谢remou! –

2

,对于我的应用行之有效的另一种方法是检查VBA的版本:

#if Vba7 then 
' Code is running in the new VBA7 editor 
    #if Win64 then 
    ' Code is running in 64-bit version of Microsoft Office 
    #else 
    ' Code is running in 32-bit version of Microsoft Office 
    #end if 
#else 
' Code is running in VBA version 6 or earlier 
#end if 

#If Vba7 Then 
Declare PtrSafe Sub... 
#Else 
Declare Sub... 
#EndIf 

http://msdn.microsoft.com/en-us/library/office/gg264421.aspx