我是 VBA 的新手,并且本周花了一些时间试图找出一个宏,它会每天自动将几个文件导入自己创建的银行数据库。
大部分宏都在运行,但每天文件的日期都会改变,我想找出一种方法让弹出日历在导入文件之前询问日期。
截至目前,我已经让宏工作了一个硬编码值,但我需要每天手动更改它。
我已经创建了一个弹出式日历表单,但无法弄清楚如何让选择的结果创建一个昏暗的值,以便在宏的其他地方使用
没有日历的示例位于
之下Function Copy_Of_Import_Macro_TEST()
On Error GoTo Copy_Of_Import_Macro_TEST_Err
Dim bankDt As String
bankDt = "20150818" 'August 18, 2015 formatted as YYYYMMDD
'insert this into string including quote marks " & bankDt & "
Dim filePath As String
filePath = "C:\myFolder\"
DoCmd.TransferText acImportDelim, "Import_spec", "BankFile", "" & filePath & "" & bankDt & "filename.csv", True, ""
Copy_Of_Import_Macro_TEST_Exit:
Exit Function
Copy_Of_Import_Macro_TEST_Err:
MsgBox Error.Description
Resume Copy_Of_Import_Macro_TEST_Exit
End Function
答案 0 :(得分:1)
我已经创建了下面屏幕截图中显示的模型表单,其中有一个名为txtBankDate
的文本字段和一个名为cmdExportCsv
的命令按钮。
在表单的设计视图中,我设置了txtBankDate
,使其处于“短日期”格式...
...这样做意味着当表单切换到表单视图时,单击txtBankDate
可以选择使用内置日期选择器:
使用日期选择器选择日期会将该日期放入文本框中:
但是,您的功能需要能够在txtBankDate
调用日期,然后根据您的需要将其从“dd / mm / yyyy”格式更改为“yyyymmdd”你的文件名。这意味着您的功能需要以下内容:
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
参数传递的内容:
然后,您需要决定从哪个事件运行此函数调用(某些事情需要触发此调用)。在我的模型中,我创建了一个命令按钮,并在该命令按钮的点击事件上运行上述函数调用:
这可以通过进入表单的设计视图,选择命令按钮,转到属性表的“事件”选项卡,单击“单击”事件的[...]按钮,然后选择“代码生成器”来完成。 “打开VBA编辑器。
Private Sub cmdExportCsv_Click()
Copy_Of_Import_Macro_TEST Me.txtBankDate
End Sub
将要发生的事情的顺序是:
txtBankDate
文本框这将触发按钮的点击事件上的任何代码,即:
Copy_Of_Import_Macro_TEST Me.txtBankDate
调用函数Copy_Of_Import_Macro_TEST
,将来自txtBankDate
的数据作为参数进行调用。
txtBankDate
的数据,使其显示为“yyyymmdd”而不是“dd / mm / yyyy”filename
方法的DoCmd.TransferText
参数中,以便您的文件名显示如下:C:\ myFolder \ 20150821 - filename.csv
希望这能更好地解释它。
其他评论
我已将MsgBox Error$
行更改为MsgBox Err.Description
,因为我认为Error$
已被弃用。
严格地说Copy_Of_Import_Macro_TEST
应该是一个子程序而不是一个函数(函数应该返回一个值,而子程序则不是)。
您可能还想考虑txtBankDate
字段上的一些验证,该字段首先检查在运行函数之前是否已输入日期,否则文件名将不会显示日期。