VBA最佳实践 - 从另一个工作表格式工作表

问题描述 投票:-1回答:1

我在找Excel的VBA代码位最佳实践的建议。我有内置在Excel中的报告,与位于前部的控制片,其中用户从下拉框中选择了多个变量和数据是基于通过SQL通过VBA的选择编译。

我的代码是非常简单,它的数据复制到工作表,并将其格式化。但是建立这个工作得很好,因为我是通过张步进纸张时,确保代码在做什么我想要的。现在,它已完成我想执行的代码,但没有它周围的工作表上跳下来。它看起来因此,如果它停留在控制表上,直到代码完成好得多。

不过,我似乎无法不引用多数民众赞成被格式化的纸张执行相同的任务?

下面是一个使用工作表中复制数据和格式的代码。它的工作原理,直到我需要它来选择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语句,但没有喜悦。

任何帮助将非常感激。

提前致谢!

excel vba
1个回答
1
投票

使用您的代码为例

   '  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
© www.soinside.com 2019 - 2024. All rights reserved.