我正在创建一个包含多个介绍性工作表的工作簿,然后是十个数据表,标记为“'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创建并且运行良好 - 但遗憾的是我在添加此最终功能时遇到了问题。
答案 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")
}
}
,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
递增3(因为i
而有2个因为=+
而再增加一个。你最好这样做:
Next
答案 1 :(得分:1)
我知道这是一篇过时的文章,但是无论您是否手动编辑代码,这都是一种更简单的方法。
录制宏时,从另一个选项卡开始。您要做的第一件事是切换选项卡,它将添加以下行:
Sheets("Sheet Name").Select
您可以保持切换工作表的状态,并且它将自动按顺序将更改应用于每个工作表,而不必完全限定名称,并且在特定工作表上没有运行宏的情况下,用户恰好处于打开状态。
类似地,如果您想编写代码,则可以在代码内所需的任何位置上方手动输入命令。