2016-09-14 88 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

相關問題