使用用户在宏中的表单中输入的信息

时间:2012-02-28 06:21:47

标签: vba ms-access access-vba

(这是在Access 2003中。) 我正在编写一个宏,打开一个表单,允许用户输入他们想要导入的文件的路径和名称。然后它关闭表单,并导入指定文件中的数据。我有代码打开表单和用户输入正确。一旦得到路径和文件名,我也有代码执行数据的导入/操作。

我的问题是:在表单关闭后如何使用表单中输入的信息?

这是我的表单代码的简单版本(“输入导入信息”):

Option Compare Database
Option Explicit

Sub RunButton_Click()

    FilePathTextBox.SetFocus
    DataPath = FilePathTextBox.Text
    FileNameTextBox.SetFocus
    DataName = FileNameTextBox.Text

    DoCmd.Close

End Sub

这是我的宏尝试的简单版本(失败):

Option Compare Database
Option Explicit
Option Base 1

Public DataPath As String
Public DataName As String
Public CompleteName As String

Function StartImport()

    'Open form to let user enter import file info
    DoCmd.OpenForm "Enter Import Info", acNormal, , , , acDialog

    'Get complete file path/name. I think this is where the problem is.
    CompleteName = DataPath & "\" & DataName

    'Import
    ImportData

    'Data clean up
    DataCleanup
End Function


Function ImportData()

    'Import CompleteName
    'The import code here works fine when CompleteName has the right info

End Function

Sub DataCleanup()

    'cleans up the data as needed (using DoCmd.RunSQL). Works fine.

End Sub

我花了两个多小时在互联网上寻找解决方案,但找不到一个。一位朋友建议创建一个临时表,将表单中输入的值存储为字符串(表示该表只有1个字段和1个记录)。但我不知道如何将它作为一个字符串从表中检索出来。

很抱歉很长的帖子 - 我希望尽可能清楚。 感谢您的帮助!!

==============编辑(附加信息)

表单中的原始代码要求用户手动键入路径和文件名。整个代码当时正在运作。

但是,我想通过使用FileDialog来确定路径和名称来避免错误/错误,因此我创建了在单击文本框时调用的subs(FileNameTextBox_Click和FilePathTextBox_Click)。可以在此处找到FileNameTextBox_Click()的代码:FileDialog doesn't work

这会影响什么吗?

1 个答案:

答案 0 :(得分:0)

我发表评论说我无法让你的代码失败。然后我想我应该像你一样做所有事情。我不明白为什么改变一些名字会有所不同,但确实如此。

使用您的姓名和代码,我将路径和文件名传递回模块,并进行了以下更改:

<强> RunButton_Click

Debug.Print "Form " & DataPath              ) Check values are stored
Debug.Print "Form " & DataName              )

' Close form and nothing else.
DoCmd.Close objecttype:=acForm, objectname:="Enter Import Info"

<强>模块1

DoCmd.OpenForm "Enter Import Info", acNormal, , , , acDialog之后

Debug.Print "Module " & DataPath            )  Check have values
Debug.Print "Module " & DataName            )