2012-02-28 89 views
1

(这是在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 

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

对不起,很长的文章 - 我想尽可能清楚。 谢谢您的帮助!

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

原始代码的形式请求用户在路径和文件名手动键入。当时整个代码都在工作。然而,我想通过使用FileDialog来确定路径和名称来避免错误/错误,所以我创建了在单击文本框时调用的子文件(FileNameTextBox_Click和FilePathTextBox_Click)。 FileNameTextBox_Click()的代码可以在这里找到:FileDialog doesn't work

这会影响到什么吗?

+1

我与托尼在此。这对我来说可以。你确定你还没有在其他地方宣布Datapath和Dataname吗?顺便说一下,不要使用控制器的文本属性,然后你不必设置焦点,这会在某个阶段导致悲伤。只要说'DataPath = Me.FilePathTextBox' - 我对避免名称混淆很重要。如果你必须有一个属性,使用'.value'即使在控件没有焦点时也是可用的。 – Fionnuala 2012-02-28 11:01:04

回答

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   ) 
+0

我运行提供的代码使用值的唯一变化而不是文本属性,它为我工作。 'CompleteName'包含完整路径。 – Fionnuala 2012-02-28 12:13:23

+0

我在问题文章中添加了一些信息,不确定这是否会影响任何内容,但如果您或@Remou可以看一看,会很感激!另外,我在这几行中添加并尝试运行宏,但它一直给出“检测到不明确名称:DataPath”的编译错误,并突出显示了RunButton_Click中的DataPath。 – Emily 2012-02-28 15:16:22

+0

不明确的名称表示DataPath已被多次声明。在VB编辑器中,单击“Ctrl + F”访问查找。在当前项目中搜索DataPath。您应该期望在'RunButton_Click()'的作用域内找到两个或更多的声明。 – 2012-02-28 17:31:29

相关问题