2015-11-18 32 views
0

我有一组具有类似名称的工作表的并希望所有这些工作表的执行动作的工作表执行动作(例如,表名称为1C2C3C等) 。我试着下面的代码,但我发现运行时错误424“对于下一步”循环来基于具有类似名称

Sub InsertURLType() 

Dim ws As Worksheet 
Dim LastCol As Integer 

For Each ws In Activebook.Sheets 

If ws.Name Like "?1" Then 

    With ActiveSheet 
     LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    End With 

    LastRow = Range("A1").End(xlDown).Row 

    Columns(LastCol).Select 
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
    ActiveCell.Select 
    ActiveCell.FormulaR1C1 = "URL Type" 
    ActiveCell.Offset(1).Select 
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],URLs!C1:C2,2,FALSE)" 
    ActiveCell.AutoFill Range(ActiveCell.Address, Cells(LastRow, ActiveCell.Column)) 

End If 

Next ws 

End Sub 
+1

没有我知道的“Activebook”。按照[ActiveWorkbook属性](https://msdn.microsoft.com/en-us/library/office/ff821871.aspx)中的方法尝试“ActiveWorkbook”。 – Jeeped

+0

不好意思。您的工作表名称是(1C,2C,3C)或(C1,C2,C3)?你可以使用''C'+ right(ws.name)'或'left(ws.name)+“C”'作为条件检查'if ws.name'。 –

回答

1

没有Activebook我知道。尝试使用ActiveWorkbook,如ActiveWorkbook property

此外,您应该处理ws工作表类型变量,该变量设置为For Each ... Next循环。 A With ... End With statement将允许所有进一步的操作将其引用为工作表以执行工作。

Sub InsertURLType() 

    Dim ws As Worksheet 
    Dim LastRow As Long, LastCol As Long 

    For Each ws In ActiveWorkbook.Sheets 
     With ws 

      If .Name Like "?1" Then '<~~ this doesn't appear to pattern match the WS names you described in your narrative 

       LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
       LastRow = .Range("A" & Rows.Count).End(xlUp).Row '<~~ look from the bottom up 

       .Columns(LastCol).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
       .Cells(1, LastCol) = "URL Type" 
       .Cells(2, LastCol).Resize(LastRow - 1, 1).FormulaR1C1 = _ 
        "=VLOOKUP(RC[-1], URLs!C1:C2, 2, FALSE)" 

      End If 
     End With 
    Next ws 

End Sub 

您正在使用If .Name Like "?1" Then母鹿没有出现与您在您的叙述提供的工作表名的面具。如果这不起作用,请提供所有工作表名称的列表以及您想要处理的部分工作表名称。

这个简短的小组将检查您的工作表名称。

Sub Check_WS_Names() 

    Dim ws As Worksheet, strWSs As String 

    strWSs = " 1C 2C 3C 4C 5C 6C 7C 8C 9C 10C 11C 12C 13C" & _ 
      " 1O 2O 3O 4O 5O 6O 7O 8O 9O 10O 11O 12O 13O" & _ 
      " 1S 2S 3S 4S 5S 6S 7S 8S 9S 10S 11S 12S 13S " 

    For Each ws In ActiveWorkbook.Sheets 
     With ws 
      If CBool(InStr(1, strWSs, Chr(32) & .Name & Chr(32), vbTextCompare)) Then 
       Debug.Print "found: " & .Name 
      End If 
     End With 
    Next ws 

End Sub 

运行后检查VBE的立即窗口(Ctrl + G)结果。

+0

对不起,我不小心写了ws名字掩码错误。它在vba中是C而不是“?1”。你给我的代码很不幸没用。当我使用过你的代码,并且在以前修改我的代码时,For Next语句不会在任何工作表中找到。 – Tanzie81

+0

我还应该提到,我尝试了第一张工作表“1C”的确切名称,代码没有找到工作表,只是保持循环遍历For ... Next语句。 – Tanzie81

+0

关于工作表名称,此工作簿中有42个工作表。我需要插入公式的表格被命名为“1C,2C,3C ....到13C”。还有另外两组具有类似命名结构“1O,2O,3O ...至13O”的片和另一组命名为“1S,2S ...等”的片。除了这些还有一些用于分析的工作表(用于图表和查找表等) – Tanzie81