我在运行32位Microsoft Office的64位计算机(Windows 7)上构建了一个应用程序。客户端机器是64位窗口和64位办公室。
我最初遇到comdlg32.dll问题,但包含了PtrSafe关键字。下一个问题是我在客户端计算机上安装了缺少的IPCONFIG.dll。
我现在编译好了,但我正在尝试使用文件保存对话框(Ken Getz的代码)。它似乎跳过了打开实际的对话框并直接运行到运行时错误2522(需要文件名)。任何帮助赞赏。这是我正在使用的代码(返回Ken Getz的函数):
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
答案 0 :(得分:2)
我发现此代码适用于MS Access 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)
答案 1 :(得分: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