Excel 正在尝试使此vba在当前工作簿中的所有工作表中循环。它贯穿第一个

Excel 正在尝试使此vba在当前工作簿中的所有工作表中循环。它贯穿第一个,excel,vba,loops,xlsx,xls,Excel,Vba,Loops,Xlsx,Xls,此循环VBA脚本在完成活动工作簿中的第一个工作表后停止,但需要它在所有工作表中循环。有人能帮我理解我遗漏了什么,让循环在所有工作表中连续移动吗 Sub forEachws() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Call Music_Connect_Albums(ws) Next End Sub Sub Music_Connect_Albums(ws As Worksheet) With ws

此循环VBA脚本在完成活动工作簿中的第一个工作表后停止,但需要它在所有工作表中循环。有人能帮我理解我遗漏了什么,让循环在所有工作表中连续移动吗

Sub forEachws()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
  Call Music_Connect_Albums(ws)
  Next
End Sub

Sub Music_Connect_Albums(ws As Worksheet)
    With ws
    .Columns("B:H").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    .Range("A13").Select
    ActiveCell.FormulaR1C1 = "Artist"
    .Range("B13").Select
    ActiveCell.FormulaR1C1 = "Title"
    .Range("C13").Select
    ActiveCell.FormulaR1C1 = "Release"
    .Range("D13").Select
    ActiveCell.FormulaR1C1 = "Label"
    .Range("E13").Select
    ActiveCell.FormulaR1C1 = "Age"
    .Range("F13").Select
    ActiveCell.FormulaR1C1 = "Yr"
    .Range("G13").Select
    ActiveCell.FormulaR1C1 = "Wk"
    .Range("H13").Select
    ActiveCell.FormulaR1C1 = "Wk-End"
    .Range("A14").Select
    ActiveCell.FormulaR1C1 = "=R2C10"
    .Range("B14").Select
    ActiveCell.FormulaR1C1 = "=R3C10"
    .Range("C14").Select
    ActiveCell.FormulaR1C1 = "=R4C10"
    .Range("D14").Select
    ActiveCell.FormulaR1C1 = "=R5C10"
    .Range("E14").Select
    ActiveCell.FormulaR1C1 = "=R9C10"
    .Range("F14").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(R8C10,4)"
    .Range("G14").Select
    ActiveCell.FormulaR1C1 = "=MID(R13C10,6,2)"
    .Range("G14").Select
    ActiveCell.FormulaR1C1 = "=MID(R13C13,6,2)"
    .Range("H14").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(R8C10,10)"
    .Range("A14:H14").Select
    Selection.AutoFill Destination:=Range("A14:H35")
    .Range("A14:H35").Select
    .Columns("A:H").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    .Rows("1:13").Select
    .Range("A12").Activate
    .Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    .Columns("I").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End With
End Sub

这里是一个快速重写您的代码没有。选择或。激活

Option Explicit

Sub forEachws()
    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        Call Music_Connect_Albums(ws)
    Next
End Sub

Sub Music_Connect_Albums(ws As Worksheet)
    With ws
        .Columns("B:H").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("A13:H13").Value = Array("Artist", "Title", "Release", "Label", _
                                        "Age", "Yr", "Wk", "Wk-End")
        .Range("A14:H14").FormulaR1C1 = Array("=R2C10", "=R3C10", "=R4C10", "=R5C10", "=R9C10", _
                                               "=RIGHT(R8C10,4)", "=MID(R13C10,6,2)", "=MID(R13C13,6,2)", _
                                               "=RIGHT(R8C10,10)")
        With .Range("A14:H35")
            .FillDown
            'uncomment the next line after you have examined the formulas
            '.Value = .Value
        End With
        .Range("A12").Delete Shift:=xlUp
        On Error Resume Next
        .Columns("I").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        On Error GoTo 0
    End With
End Sub

两个关切领域。首先,我相信您设计的公式具有绝对行和列引用,这些引用在填充时不会正确更改。在恢复到计算值之前,应先查看公式。其次,
.Range(“A12”).Delete Shift:=xlUp
似乎不合适,而且该操作似乎没有改善工作表;您应该对此进行研究。

按预期修改1个工作表后的结果:VBA运行时错误“1004”:范围类的Select方法失败您需要清除所有
。选择
选择。
请参阅此处以获取信息:。^^^^^是最好的方法,但如果您激活工作表,这是一种糟糕的编码,它应该会起作用
。使用ws在
之后立即激活
。不能在非活动图纸上选择范围。但要认真摆脱激活和选择。这将使代码更快更可靠。谢谢你的提示。Excel的Record宏将所有ActiveCell和Select放在其中。我会尽量减少多余的,并把它清理干净。谢谢这真的很干净…谢谢你的帮助!我修复了行/列引用和错位的范围。非常快速和高效的脚本现在!