我正在处理一个录制的宏,它会对很多类似的工作表执行相同的操作。如果我把它记录下来的工作表整齐地工作,但是,当我在其他工作簿上试用它时它不起作用。 这是代码的一部分,基本上它复制第一列,粘贴在新工作表上,删除重复项并获取前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
我知道它看起来不太好,我还在学习。如果它看起来那么简单,我不明白为什么它不适用于其他工作表。
答案 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