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时遇到了麻烦。
完全限定您所有的Cells
, Columns
, Rows
, Range
引用。 在一个小程序上做到这一点的最简单的方法是将其包装在一个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