录制的宏不适用于其他工作表

时间:2016-09-14 14:29:45

标签: excel vba macros

我正在处理一个录制的宏,它会对很多类似的工作表执行相同的操作。如果我把它记录下来的工作表整齐地工作,但是,当我在其他工作簿上试用它时它不起作用。 这是代码的一部分,基本上它复制第一列,粘贴在新工作表上,删除重复项并获取前6个数字:

Sub Macro2()

    ActiveSheet.Select
    Columns("A:A").Select
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count).Select
    Columns("A:A").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.UnMerge
    ActiveSheet.Range("$A:$A").RemoveDuplicates Columns:=1, Header:=xlNo
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],6)"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B14")
    Range("B2:B14").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("A:A").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Selection.Insert Shift:=xlToRight
    Range("D8").Select
End Sub

我知道它看起来不太好,我还在学习。如果它看起来那么简单,我不明白为什么它不适用于其他工作表。

1 个答案:

答案 0 :(得分:0)

由于使用了.Select .Select,您可能会收到不一致的结果。

我创建了两个变量来存储您的工作表,并执行上面的操作,但没有.Insert Shift:=xlToRight。唯一的问题是,最后一列Sub macro2a() Dim mainWS As Worksheet, newWS As Worksheet Set mainWS = Worksheets("Sheet1") ' I assume this is the sheet name of your main worksheet. Set newWS = Sheets.Add(after:=Sheets(Sheets.Count)) newWS.Columns("A:A").Value = mainWS.Columns("A:A").Value ' instead of copy/paste, you can set ranges equal if you just need values. With newWS .Columns("A:A").UnMerge .Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo .Range("B2").FormulaR1C1 = "=Left(RC[-1],6)" .Range("B2").AutoFill Destination:=.Range("B2:B14") .Range("B2:B14").Value = .Range("B2:B14").Value ' instead of copy/paste special, just set values equal to remove formulas With .Columns("A:A") .ClearContents ' .Insert shift:=xlToRight ' What's this line to do? End With '.Columns("A:A") End With 'newWS newWS.range("D8").Select ' This is okay since it's the end, and we're just using .Select to get to the cell. End Sub 应该做什么?

multipart/related