VBA最佳实践-从其他工作表格式化工作表



我正在寻找一些关于Excel VBA代码的最佳实践建议。我有一个在Excel中构建的报告,前面有一个控制表,用户可以从下拉框中选择一些变量,并根据选择通过VBA通过SQL编译数据。

我的代码非常简单,它将数据复制到工作表中并格式化。然而,在构建工作表时,这很好,因为我正在遍历工作表,以确保代码符合我的要求。现在它已经完成了,我想执行代码,但不要在工作表上跳来跳去。如果它一直呆在控制表上直到代码完成,它看起来会更好。

但是,如果不引用正在格式化的工作表,我似乎就无法执行相同的任务?

以下是一个工作表中用于复制数据和格式的代码。它一直工作,直到我需要它选择Range("B5:K5").Select,然后它在我的控制表上执行此操作。

On Error Resume Next
Sheets("Account Details").ShowAllData
Sheets("Account Details").Range("B5:K7500").Cells.ClearContents
Sheets("Account Details").Range("B5:K7500").Borders.LineStyle = xlNone
Sheets("Account Details").Range("B5").CopyFromRecordset rst2
Sheets("Account Details").Range("B5:K5").Select
Sheets("Account Details").Range(Selection, Selection.End(xlDown)).Select
Sheets("Account Details").Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Sheets("Account Details").Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Sheets("Account Details").Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous
Sheets("Account Details").Selection.Borders(xlEdgeRight).LineStyle = xlContinuous
Sheets("Account Details").Selection.Borders(xlEdgeTop).LineStyle = xlContinuous
Sheets("Account Details").Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous
Sheets("Account Details").Selection.Borders(xlInsideVertical).LineStyle = xlContinuous
Sheets("Account Details").Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous
Sheets("Account Details").Range("A1").Select

我想问的第二部分是VBA最佳实践。我不知道该怎么做,但我忍不住想,不断引用工作表有点乱,根本不需要。我试过几次With语句,但都不高兴。

任何帮助都将不胜感激。

提前感谢!

使用您的代码作为示例

'  On Error Resume Next  'NO - never use this, it doesn't deal with errors, just hides them - it will bite you eventually
With Sheets("Account Details")
IF .Autofiltermode Then .ShowAllData
with .Range("B5:K7500")  'note dot at beginning
.Cells.ClearContents
.Borders.LineStyle = xlNone
End With
Dim r as range
set r = .range("b5")
r.CopyFromRecordset rst2  'this is the first cell in b5:k7500

Set r = .Range(r, r.End(xlDown).end(xltoright))  'redefine r to point to area
with r
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
End With  'end of with r
End With  'end if with sheet
'Sheets("Account Details").Range("A1").Select 'unnecessary

相关内容