如何在Excel VBA中插入列而不粘贴剪贴板中的内容

时间:2018-10-11 03:39:37

标签: vba excel-vba

1)我从Sheet1复制内容(值= 143)

2)我进入Sheet2

3)我在range(“ B1”)中插入新列

4)excel用143填充了整个新列。我不想要那样。我希望它是一个新的空列。

我知道我可以摆脱application.cutcopymode的束缚,但是当我使用F8行走宏时,它是行不通的。

所以我需要有关如何处理它的建议。

我在论坛上看到过有人在复制前先插入该列的评论,但我不想破坏算法的顺序,因此我正在寻找一种更好的方法来实现这一点。

Sheet1:

123
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160 

Sheet2:

wda    awd
awd    daw
adw    daw
awd    wda
daw    wda
daw    awd
wda    afw
wda    weg
awd    weg
afw    w
weg    rq
weg    qrq
w      qefqw
rq     e
qrq    he
qefqw  rgw
e      rq
he     3qg
rgw    q3
rq     tq
3qg    ga

和宏:

Sub testing()

Application.CutCopyMode = False

Worksheets("Sheet1").Activate
Range("A4").Copy

Worksheets("Sheet2").Activate
Range("B1").EntireColumn.Insert
Range("b1").PasteSpecial Paste:=xlPasteValues

End Sub

2 个答案:

答案 0 :(得分:0)

当您这样做:

Worksheets("Sheet1").Activate
Range("A4").Copy

Range("A4")是指您的宏存储在工作表的范围,不一定是Sheet1

除非您确实要激活工作表,否则不要使用“激活”。改为这样做:

Worksheets("Sheet1").Range("A4").Copy

With Worksheets("Sheet2").Range("B1")
    .EntireColumn.Insert
    .PasteSpecial Paste:=xlPasteValues
End With

答案 1 :(得分:0)

使用Value对象的Range属性仅粘贴范围内容

Sub testing()

    With Worksheets("Sheet2")
        .Range("B1").EntireColumn.Insert
        Intersect(.UsedRange, .Columns(2)).Value = Worksheets("Sheet1").Range("A4").Value
    End With

End Sub

通知我使用Intersect(.UsedRange, .Columns(2)).Value = ...来限制粘贴到B列单元格的值,该单元格的相邻列都填充有值

如果您真的需要填写整个列,则只需使用.Columns(2).Value = ...