【问题标题】:VBA move selected range up / down (with offset?)VBA向上/向下移动选定范围(有偏移?)
【发布时间】:2016-12-31 14:05:47
【问题描述】:

我正在构建一个工具,用户选择的单元格内容可以用箭头形状移动。

下面的代码非常适合向下移动一组或多组相邻单元格。 但是,反转代码似乎很棘手(偏移量 +1 不起作用:-?)

有什么想法吗? 谢谢, 奥古斯丁

Sub Move_Up()
    Selection.Cut
    Selection.Offset(-1, 0).Select
    Selection.Insert Shift:=xlDown
End Sub

【问题讨论】:

  • 您是打算只拖动单元格还是需要移动覆盖的单元格?
  • 使用1,而不是+1 - .Offset 需要一个数字而不是操作描述。
  • @Comintern,这并不是说:+1 会在 VBA IDE 中立即转换为 1,问题仍然存在。如果奥古斯丁回答我的问题,就有可能找到出路

标签: excel vba range move offset


【解决方案1】:

假设要移动单元格,而被覆盖的单元格只是移动到曾经移动过的单元格,代码可能如下:

Sub MoveUp()
    Selection.Rows(Selection.Rows.count + 1).Insert Shift:=xlDown
    Selection.Rows(1).Offset(-1).Cut Selection.Rows(Selection.Rows.count + 1)
    Selection.Rows(1).Offset(-1).Delete Shift:=xlUp
    Selection.Offset(-1).Select
End Sub

Sub MoveDown()
    Selection.Rows(1).Insert Shift:=xlDown
    Selection.Rows(Selection.Rows.count).Offset(2).Cut Selection.Rows(1)
    Selection.Rows(Selection.Rows.count).Offset(2).Delete Shift:=xlUp
    Selection.Offset(1).Select
End Sub

【讨论】:

    【解决方案2】:

    如果您想将Selected 单元格块向上移动一行,则:

    Sub ShiftBlockUp()
        Dim r As Range
        Set r = Selection
        Intersect(r(1).EntireRow, r).Offset(-1, 0).Delete Shift:=xlUp
    End Sub
    

    如果您想将Selected 单元格块向下移动一行,则:

    Sub ShiftBlockDown()
        Dim r As Range
        Set r = Selection
        Intersect(r(1).EntireRow, r).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    End Sub
    

    【讨论】:

    • ShiftBlockDown() 的所有功能都将由Selection.Rows(1).Insert Shift:=xlDown 提供
    猜你喜欢
    • 2012-11-09
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多