【问题标题】:How to dynamically get Active cell address and find out range in EXCEL VBA macro如何在 EXCEL VBA 宏中动态获取活动单元格地址并找出范围
【发布时间】:2018-08-06 15:07:09
【问题描述】:

在 Excel 宏中,我想实现这一点: 在“A”列中可以有多行数据。 当用户选择“A”列中的任何单元格并单击按钮时,将在所选行下方插入 6 行,并将所选单元格中的数据复制到这 6 行。我录制了一个宏,这就是我所拥有的:

Sub MacroTest()
'
' MacroTest Macro
'

    Rows("5:5").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A4").Select
    Selection.AutoFill Destination:=Range("A4:A10"), Type:=xlFillDefault
End Sub

我想知道的是如何用 Active cell 替换 A4, 以及范围 A4:A10 和活动单元格地址 + 6。请告知!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    这是我的看法。这样,如果您改变主意,您可以轻松调整要在活动单元格之后复制的单元格数量,并且它摆脱了冗长的代码:)

    Sub MacroTest()
    
        If ActiveCell.Column = 1 Then
    
            Dim numCopies As Long
            numCopies = 6
    
            Dim i As Long
            For i = 1 To numCopies
                Rows(ActiveCell.row + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Next i
    
            ActiveCell.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(numCopies, 0)), Type:=xlFillDefault
    
        End If
    
    End Sub
    

    【讨论】:

    • 可能声明Dim i As Long并使用Option Explicit
    • 效果很好!我们如何确保 ActiveCell 仅在“A”列中?
    • @Marcucciboy2,还有一个小问题 - 电子表格具有从 A 列到 E 的颜色格式。现在,当我运行宏时,只有 col A 格式适用于创建的新行,其余列是搞砸了
    • @SilverFish 这可能是因为我们只对第一列进行自动填充
    • @Marcucciboy2,我明白这一点。没有办法复制/粘贴第一个 col 的数据,而是复制/粘贴整行或 Col A - Col E 的格式?还是有另一个 For /Next 循环?
    【解决方案2】:

    录制宏是在 中开始编程的最佳方式之一,恭喜。这是ActiveCellOffset() 的操作方法:

    Sub MacroTest()
        Rows("5:5").Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        'Range("A4").Select
        ActiveCell.Select
        Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(6, 0)), Type:=xlFillDefault
    End Sub
    

    如果您想对代码进行一些改进,请考虑将其放入https://codereview.stackexchange.com,会弹出一些好主意。

    例如,不在 Excel 中使用 Selecti - How to avoid using Select in Excel VBA

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      相关资源
      最近更新 更多