我试图从第4个选项卡开始循环浏览工作簿中的所有工作表。这就是我所拥有的,但是由于某种原因,它仅在第4个选项卡上有效,其余部分不再继续。有什么想法吗?
Sub Step13()
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
If sheet.Index > 3 Then
'my code here
Columns("A").Replace "^", vbNullString, xlPart, xlByRows, True
Range("AA1").Value = "Function"
Dim LastRowColumnA As Long
LastRowColumnA = Cells(Rows.Count, 1).End(xlUp).Row
Range("AA2:AA" & LastRowColumnA).FormulaR1C1 = "=ISNUMBER(MATCH(RC[-26],EarningsDates!C[-26],0))"
Columns(27).Value = Columns(27).Value
End If
Next
End Sub
答案 0 :(得分:0)
下面是更正的代码。完美运行。
Sub Step13()
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
If sheet.Index > 3 Then
sheet.Activate
'my code here
ActiveSheet.Columns("A").Replace "^", vbNullString, xlPart, xlByRows, True
ActiveSheet.Range("AA1").Value = "Function"
Dim LastRowColumnA As Long
LastRowColumnA = Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet.Range("AA2:AA" & LastRowColumnA).FormulaR1C1 = "=ISNUMBER(MATCH(RC[-26],EarningsDates!C[-26],0))"
ActiveSheet.Columns(27).Value = Columns(27).Value
End If
Next
End Sub
答案 1 :(得分:0)
我认为您会发现以下代码可增强例程的性能,其原因有两个:
它直接与所需对象一起使用。 (并且不会每次都激活每个工作表,这是不必要的
它仅特别适用于具有数据的单元格(而不是整个列,大多数行都是不必要的。
代码:
Option Explicit
Sub Step13()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Index > 3 Then
With ws
Dim LastRowColumnA As Long
LastRowColumnA = .Cells(.Rows.Count, 1).End(xlUp).Row
'my code here
.Range("A1:A" & LastRowColumnA).Replace "^", vbNullString, xlPart, xlByRows, True
.Range("AA1").Value = "Function"
With .Range("AA2:AA" & LastRowColumnA)
.FormulaR1C1 = "=ISNUMBER(MATCH(RC[-26],EarningsDates!C[-26],0))"
.Value = .Value
End With
End With
End If
Next
End Sub
答案 2 :(得分:0)
出现问题的原因是您没有完全限定范围,并且代码仅在活动工作表上有效。问题的答案是完全限定对某个范围的引用,以确保代码正确理解您所指的是哪个单元格,范围,工作表或工作簿。
下面是Gilty纠正的代码,以消除不良的编程习惯。未经测试。
Option Explicit ' <-- always include this at the top of modules.
' Proper indenting helps make code readable and maintainable.
Sub Step13()
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
If sheet.Index > 3 Then
' Do not use .Select or .Activate unless you want the user to see something.
' Fully qualify all ranges.
sheet.Columns("A").Replace "^", vbNullString, xlPart, xlByRows, True
sheet.Range("AA1").Value = "Function"
Dim LastRowColumnA As Long
LastRowColumnA = sheet.Cells(sheet.Rows.Count, 1).End(xlUp).Row '<-- Fully qualify ALL references to ranges.
sheet.Range("AA2:AA" & LastRowColumnA).FormulaR1C1 = "=ISNUMBER(MATCH(RC[-26],EarningsDates!C[-26],0))"
sheet.Columns(27).Value = sheet.Columns(27).Value '<-- Fully qualify ALL references to ranges.
End If
Next
End Sub
现在使用With
可以使它更整洁。
Option Explicit
Sub Step13()
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
With sheet
If .Index > 3 Then
.Columns("A").Replace "^", vbNullString, xlPart, xlByRows, True
.Range("AA1").Value = "Function"
Dim LastRowColumnA As Long
LastRowColumnA = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("AA2:AA" & LastRowColumnA).FormulaR1C1 = "=ISNUMBER(MATCH(RC[-26],EarningsDates!C[-26],0))"
.Columns(27).Value = .Columns(27).Value
End If
End With
Next
End Sub