1

32 ビット Microsoft Office を実行している 64 ビット マシン (Windows 7) でアプリケーションを構築しました。クライアント マシンは 64 ビット Windows と 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
4

2 に答える 2

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

于 2013-11-20T05:13:21.490 に答える
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 )

于 2012-09-24T23:35:06.717 に答える