我正在 Excel 中编写一个 VBA 宏,该宏应该打开“fileB.xls”,然后在打开后立即关闭。由于我们将讨论 3 个 Excel 文件,因此我将第一个文件命名为 fileA。
文件 A 用户窗体上按钮的代码如下所示。
Private Sub CommandButton2_Click()
'Code for Button in FileA '
Workbooks.Open Filename:="File Path/fileB.xls"
ThisWorkbook.Close
End Sub
Run Code Online (Sandbox Code Playgroud)
“fileB.xls”打开后,它会启动一个表单来收集一些用户信息。
但是,打开“fileB.xls”后原始文件不会关闭。
Sub Workbook_Open()
'Code in FileB '
'Display a form to obtain information from the user. '
frmOpenFile.Show
End Sub
Run Code Online (Sandbox Code Playgroud)
值得注意的是,fileB 打开第三个也是最后一个 Excel 文件 (FileC)。FileB 中使用了与 FileA 的代码类似的代码,并且在启动 FileC 时工作正常(FileB 关闭正常)。
这个想法是有一个“主”文件,您可以在其中选择需要填写的表格。然后,该主文件会自行关闭并让用户填写表单,并根据用户输入打开最终的 Excel 文件。
因此,只是重申一下问题,FileA 打开,启动用户窗体,用户单击按钮,File B 启动,FileA 没有在应该关闭的时候关闭。
我将不胜感激任何帮助!
编辑:我应该注意,如果重写 FileA 以直接打开 FileC,FileA 将正确关闭。FileB 中的用户表单能否阻止文件 A 关闭?
我是C#的新手,所以它很可能有一个相当简单的解决方案,但我没有找到任何我认为优雅的东西.如果您需要任何其他信息或对我提出的任何问题感到困惑,请告诉我,我会尽快回复您.
目前创建验证规则的方式(当有人提交表单时),如下所示:
new ValidationRuleInstance<DetailsPresenter>(
new IsValidDateRule<DetailsPresenter>(m => m.StartDate, "StartDate"),
new ValidationRuleInterpretation(Severity.Failure, "StartDateMustBeValid", "Must enter valid start date (dd/mm/yyyy)")
),
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是创建一个验证规则来检查我给出的日期是否发生在过去.我厌倦了这个:
new ValidationRuleInstance<DetailsPresenter>(
new FailIfTrueRule<DetailsPresenter>(m => (DateTime.Parse(m.StartDate).AddDays(1) < DateTime.Now) ,"StartDate"),
new ValidationRuleInterpretation(Severity.Failure, "StartDateCannotBeInThePast", "Your start date cannot be in the past")
),
Run Code Online (Sandbox Code Playgroud)
这是有效的...大部分时间(PS我加了一天,所以输入当前日期不会产生错误).
问题是如果有人提交了一个无法解析为日期时间对象的String(例如725/2011而不是7/25/2011),整个事情就会爆发.
我尝试过使用TryParse,但是返回一个布尔值而不是Time-Date对象.
我是否必须编写自己的方法来解析String并始终返回DateTime对象?我可以捕获异常并忽略它吗?(已经有一个单独的规则来检查字符串是否有效)