MS Access HOMEPATH 保存的导出

Posted

技术标签:

【中文标题】MS Access HOMEPATH 保存的导出【英文标题】:MS Access HOMEPATH saved exports 【发布时间】:2011-05-17 14:52:34 【问题描述】:

我目前正在使用 Microsoft access 2007,并且我在程序上创建了几个保存的导出,然后我将它们设置为按钮以供使用。该数据库必须在几台不同的计算机上使用,并且由于我的用户名在其他计算机上不足以作为将保存导出的目录的一部分,因此我一直在尝试使用 Windows 中的 %homepath% 变量来替换Managed Data Tasks 窗口中的路径,但没有运气,有没有人遇到过这个问题,或者有另一种方法来处理这个问题,文件必须导出到任何 Windows 系统上的我的文档文件夹中,而不是 xp

【问题讨论】:

您是如何导出数据的? 【参考方案1】:

您可以将它们导出到共享驱动器吗?

【讨论】:

很遗憾,它是一个分布式软件,所以它在几台不同的机器上运行,输出各自版本的数据。 另一种便宜的解决方案是使用来自 c:\ 的硬编码路径,或者,如果您可以使用 .mdb 引用目录,则将其导出【参考方案2】:

将以下代码复制并粘贴到标准代码模块中。调用如下:

Debug.Print SpecFolder(CSIDL_PERSONAL)

'----- Special Folder declarations -------------------------------------------'
'"Identify the Location of Special Folders with API Calls" article in MSDN    '
'See http://msdn.microsoft.com/en-us/library/aa140088(office.10).aspx for more info'
''
'Declaration section for APIs needed to get the path to My Documents:'
Private Declare Function SHGetSpecialFolderLocation _
                          Lib "Shell32" _
                              (ByVal hWnd As Long, ByVal nFolder As Long, ppidl As Long) As Long

Private Declare Function SHGetPathFromIDList _
                          Lib "Shell32" Alias "SHGetPathFromIDListA" _
                              (ByVal Pidl As Long, ByVal pszPath As String) As Long

Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal pvoid As Long)

Private Const MAX_PATH = 260
Private Const NOERROR = 0

Public Enum CSIDL
    CSIDL_PERSONAL = &H5             'Current user My Documents'
    CSIDL_DESKTOPDIRECTORY = &H10    'Current user Desktop'
    CSIDL_MYPICTURES = 39            'Current user My Pictures'
End Enum
'================================================================='

Function SpecFolder(ByVal Folder As CSIDL) As String
Dim PidlFound As Long, FolderFound As Long
Dim Pidl As Long, strPath As String

    'Create buffer to hold path'
    strPath = Space(MAX_PATH)
    'Find Pointer to item ID List (PIDL)'
    PidlFound = SHGetSpecialFolderLocation(0, Folder, Pidl)
    If PidlFound = NOERROR Then
        'Look up path to special folder using the PIDL we found above'
        FolderFound = SHGetPathFromIDList(Pidl, strPath)
        If FolderFound Then
            'Return only the portion of the string buffer we want'
            '  (everything up to the null terminating character)'
            SpecFolder = Left$(strPath, _
                               InStr(1, strPath, vbNullChar) - 1)
        End If
    End If
    'When an API function creates a PIDL, memory is automatically allocated to storing it'
    '   CoTaskMemFree frees that allocated memory'
    CoTaskMemFree Pidl
End Function

【讨论】:

哇,你的代码真的很好,但我不相信它会在这种情况下帮助我,我正在尝试从保存的导出中打印,在托管数据任务框中,我正在使用这里有一些代码 Function Complete_Email_List_Macro() On Error GoTo Complete_Email_List_Macro_Err DoCmd.RunSavedImportExport "Export-CompleteEmailList" Complete_Email_List_Macro_Exit: Exit Function Complete_Email_List_Macro_Err: MsgBox Error$ Resume Complete_Email_List_Macro_Exit End Function 我的问题是保存的导出保存到的目录,因为它不是对所有机器都足够全局 我明白了。一种选择可能是重构您的代码以使用DoCmd.Transfer 方法之一(例如,TransferText、TransferDatabase 等)。这将使您能够以编程方式控制导出目的地。

以上是关于MS Access HOMEPATH 保存的导出的主要内容,如果未能解决你的问题,请参考以下文章

MS Access - 使用子表单过滤时禁止保存提示

将 MS SQL Server 查询结果导出到 MS Access

VBA Excel - 从 MS Access 将列名保存到电子表格

使用 MS Access VBA 更改标签的默认标题

MS-Access 平面文件导出错误

通过中间处理从 MS Excel 导出到 MS Access