2016-09-14 140 views
0

我正在处理记录的宏,它将对许多类似的工作表执行相同的操作。但是,如果我为工作表整齐地工作,当我在其他工作簿上尝试时,它不起作用。 这里是一块代码,基本上复制了第一列,在新的工作表粘贴,删除重复和获得的第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

你是什么意思的“它不工作”?我没有看到任何特定的表格。但是,您应该减少/删除选择。 [here](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9292/avoid-using-select-or-activate)是一些提示。 – arcadeprecinct

回答

0

由于使用了.Select,这可能是因为best practice to avoid而导致结果不一致。

我已经创建了两个变量来存储您的工作表,并执行上面的操作,但没有.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 
+0

谢谢,我会试试看。最后一条命令删除第一列(使用我从另一张纸上粘贴的数据)并包括一个空格(奇数,但必要)。我想要的数据仍保留在列B中,因为我使用左边的公式来提取我需要的值。 – Serveira

+0

@Serveira - 好吧,我刚刚编辑了最后一行,以清除A列的内容。*请*注意我不确定什么表应该是“粘贴TO”表格,而不是数据源,因此您可以必须调整代码中的工作表。 – BruceWayne

+0

完美的作品,谢谢。我会尝试将其适用于我的其他代码。 – Serveira