【发布时间】:2017-02-03 14:47:28
【问题描述】:
我已将工作簿分配给变量。 然后我正在做一些事情并保存文件并关闭工作簿:
如果我想在循环中使用此代码,将工作簿设置为 Nothing 是个好主意吗?
For i = 1 To UBound(a_ven_lst1)
Set wb_input1 = Application.Workbooks.Add
Set ws_input1 = wb_input1.Sheets(1)
.Rows(1).Copy ws_input1.Rows(1)
.Rows(d_fst_ven_row & ":" & d_lst_ven_row).Copy ws_input1.Rows(2)
s_save_path = f_str_file_name(ws_input1.Cells(2, i_ven_col_cnt).Value)
s_file_path = s_path & "\" & s_save_path & ".xlsx"
a_ven_lst1(i, 2) = s_file_path
wb_input1.SaveAs Filename:=s_file_path
wb_input1.Close True
Set wb_input1 = Nothing
Next i
我是否以适当的方式杀死了这个变量? 在粉碎代码后,我看到一些对象仍然存在于 VBA 编辑器中,但远远超出了这一点。
【问题讨论】:
-
IMO,最好的方法是将变量
Dim设置为所需的最小范围。在这种情况下,我会在循环内声明wb_input1。这样您就不必取消设置了。 -
由于您在循环中重复使用它,您实际上不需要在循环中将其设置为空。实际上,只要它的作用域是 sub 的本地范围,那么默认情况下它就会被清除。
-
@A.S.H VBA 中最小的范围是过程级;循环没有自己的范围。我会将循环体提取到它自己的过程中并声明变量 there.
-
@Mat'sMug 你是对的,很好的建议。我总是像在 C++ 中一样,尽可能深入地研究范围,但忘记了它在 VBA 中没有什么区别 :)
-
@A.S.H IMO 这仍然是一个好习惯——你声明的东西接近它们的使用位置,而不是在程序顶部的声明墙上的某个地方;太赞了!