Excel 正在尝试使此vba在当前工作簿中的所有工作表中循环。它贯穿第一个
此循环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
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放在其中。我会尽量减少多余的,并把它清理干净。谢谢这真的很干净…谢谢你的帮助!我修复了行/列引用和错位的范围。非常快速和高效的脚本现在!