我创建了如下截图所示的模型表单,其中有一个名为 txtBankDate 的文本字段和一个名为 cmdExportCsv 的命令按钮。
在表单的设计视图中,我设置了txtBankDate,使其采用“短日期”格式...
...这样做意味着当表单切换到表单视图时,点击txtBankDate 可以让您选择使用内置日期选择器:
使用日期选择器选择日期会将该日期放入文本框中:
不过,您的函数需要能够在调用它时采用 txtBankDate 中的日期,然后根据您想要的文件名将其从“dd/mm/yyyy”格式更改为“yyyymmdd” .这意味着您的函数需要以下内容:
- 一个允许您引用文本框的参数,因为您需要能够在函数中使用该数据(将其视为一个小漏斗,以便在调用函数时将必要的数据输入函数)李>
- 一旦您设置了漏斗(参数)以允许文本框中的数据进入您的函数,您将需要您的函数将日期格式化为“yyyymmdd”而不是“dd/mm/yyyy”;这是使用
format() 函数完成的。
下面我重新编写了你的函数,以便它完成这两件事:
Function Copy_Of_Import_Macro_TEST(bankDate As Variant)
On Error GoTo Copy_Of_Import_Macro_TEST_Err
Dim filePath As String
Dim fmtBankDate As String
filePath = "C:\myFolder\"
fmtBankDate = Format(bankDate, "yyyymmdd")
DoCmd.TransferText acImportDelim, "Import_spec", "BankFile", "" & filePath & "" & fmtBankDate & " - filename.csv", True, ""
Copy_Of_Import_Macro_TEST_Exit:
Exit Function
Copy_Of_Import_Macro_TEST_Err:
MsgBox Err.Description
Resume Copy_Of_Import_Macro_TEST_Exit
End Function
以下是我们在上述函数中设置的一些注释:
上面的函数只是在数据真正通过之前构造数据通道;它仍然必须通过调用函数启动 -- 和 -- 因为我们已经声明了一个参数 (bankDate),我们必须说明什么数据将传递给该参数所在空间中的函数。在我们的例子中,数据将转到txtBankDate 中当前的任何日期。
所以函数需要这样调用:
Copy_Of_Import_Macro_TEST Me.txtBankDate
所以为了说明什么是函数以及作为该函数的bankDate 参数传入的内容:
然后你需要决定你将从哪个事件运行这个函数调用(需要一些东西来触发这个调用)。在我的模型中,我创建了一个命令按钮并在该命令按钮的点击事件上运行上述函数调用:
这可以通过进入表单的设计视图,选择命令按钮,进入属性表的事件选项卡,单击 On Click 事件的 [...] 按钮,然后选择“代码生成器”来完成" 打开 VBA 编辑器。
Private Sub cmdExportCsv_Click()
Copy_Of_Import_Macro_TEST Me.txtBankDate
End Sub
发生的顺序是:
-
您将使用日历选择器选择日期
-
日期将进入txtBankDate文本框
-
您将单击导出到 csv 命令按钮
-
这将触发按钮的点击事件上的任何代码,即:
Copy_Of_Import_Macro_TEST Me.txtBankDate
-
函数Copy_Of_Import_Macro_TEST 以txtBankDate 中的数据作为参数调用。
-
该函数将重新格式化从txtBankDate 导入的数据,使其读取为“yyyymmdd”而不是“dd/mm/yyyy”
-
然后,这个重新格式化的日期将被添加到 DoCmd.TransferText 方法的 filename 参数中,以便您的文件名如下所示:
C:\myFolder\20150821 - 文件名.csv
希望这能更好地解释它。
其他评论
我已将您的 MsgBox Error$ 行更改为 MsgBox Err.Description,因为我认为 Error$ 已被弃用。
严格来说Copy_Of_Import_Macro_TEST 应该是一个子程序而不是一个函数(函数应该返回一个值,而子程序没有)。
您可能还需要考虑对 txtBankDate 字段进行一些验证,在运行函数之前首先检查是否输入了日期,否则文件名将不会显示日期。