VBA | 我怎样才能做一个特定的macros表

我正在创build一个工作手册,其中有几个介绍性的工作表,后面跟着十个数据表,标有“1”,“2”等等。macros是为每个页面做同样的事情,但是variables[A0]每个数据表(数值范围从5到7)。 我想使macros的页面特定,以便我可以创build一个button(在称为“input”的单独的选项卡),将处理macros而无需用户访问标签“'2”“。

(多个button的目的是让用户只需要使用3个选项卡,因为我为该工作簿的其余部分创build的excel程序可能需要大约5分钟才能执行。)

Sub InsertCells() Dim lastColCell As Range Set lastColCell = Cells(1, Columns.Count).End(xlToLeft) Dim ws as Worksheet Dim i As Long, k As Long, A0 As Long k = 0 'A0 = Flowback Constant A0 = Sheets("Wells").Cells(2, 20) For i = 6 To lastColCell.Column Range(Cells(3, i), Cells(7 + k, i + 2)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove k = k + A0 'Each A0 should correspond to a different cell if user has different flowback delays i = i + 2 Next i End Sub 

这个代码是由用户@BryceWayne创build的,工作得很好 – 但不幸的是我添加这个最后的function时遇到了麻烦。

完全限定您所有的CellsColumnsRowsRange引用。 在一个小程序上做到这一点的最简单的方法是将其包装在一个With块中:

 Sub InsertCells Dim lastColCell As Range Dim ws as Worksheet Dim i As Long, k As Long, A0 As Long A0 = Sheets("Wells").Cells(2, 20) ' Flowback Constant With ActiveWorkbook.Worksheets(1) 'Modify as needed Set lastColCell = .Cells(1, .Columns.Count).End(xlToLeft) k = 0 For i = 6 To lastColCell.Column .Range(.Cells(3, i), .Cells(7 + k, i + 2)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove k = k + A0 'Each A0 should correspond to a different cell if user has different flowback delays i = i + 2 Next i End With End Sub 

有一点不清楚,为什么你这样做For i = 6 to lastColCell.Column ,然后增加i=i+2在该循环。 这似乎是有效地增加了i在每次迭代3(2因为=+ ,然后再因为下Next ,你会更好地做:

  For i = 6 To lastColCell.Column Step 3 .Range(.Cells(3, i), .Cells(7 + k, i + 2)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove k = k + A0 'Each A0 should correspond to a different cell if user has different flowback delays Next i