VBA |如何制作特定的宏表

时间:2017-06-06 16:24:46

标签: excel vba

我正在创建一个包含多个介绍性工作表的工作簿,然后是十个数据表,标记为“'1'”,“'2'”等。宏意味着对每个页面执行相同的操作,但变量[A0]可能会更改每个数据表(值范围从5到7)。我想特定的宏页面,以便我可以创建一个按钮(在一个名为“输入”的单独选项卡上),该按钮将处理宏而无需用户访问选项卡“'2'”。

(多个按钮的目的是允许用户在需要时仅使用3个选项卡,因为我为工作簿的其余部分创建的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创建并且运行良好 - 但遗憾的是我在添加此最终功能时遇到了问题。

2 个答案:

答案 0 :(得分:2)

完全限定所有/<\?xml version/ { lint(fn) fn = "" } match($0,/file="([^-]+)-[^"]+\.XML"/,a) { fn = a[1]".xml" $0 = prev2 ORS prev1 ORS $0 print fn } { if ( fn != "" ) { print > fn } prev2 = prev1 prev1 = $0 } END { lint(fn) } function lint(fn) { if (fn != "") { close(fn) system("xmllint --debug --dtdvalid refcase.dtd \047" fn "\047 > \047" fn ".rpt\047") } } CellsColumnsRows个引用。在一个小程序上执行此操作的最简单方法是将其包装在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递增3(因为i而有2个因为=+而再增加一个。你最好这样做:

Next

答案 1 :(得分:1)

我知道这是一篇过时的文章,但是无论您是否手动编辑代码,这都是一种更简单的方法。

录制宏时,从另一个选项卡开始。您要做的第一件事是切换选项卡,它将添加以下行:

Sheets("Sheet Name").Select

您可以保持切换工作表的状态,并且它将自动按顺序将更改应用于每个工作表,而不必完全限定名称,并且在特定工作表上没有运行宏的情况下,用户恰好处于打开状态。

类似地,如果您想编写代码,则可以在代码内所需的任何位置上方手动输入命令。