如何创建仅在所选单元格上运行的宏?

时间:2019-07-04 15:45:04

标签: excel vba

到目前为止,我对宏和VBA的经验仅限于创建一个用于在单元格中进行着色的按钮,因此,如果可能的话,您将不得不为此辩解。

我有一个模板工作表,每周将粘贴有标头和任务的数据-我希望只过滤标头,然后格式化这些行并取消过滤,并使用宏将其自动化。

我已经记录了以下内容:-

    ActiveSheet.Range("$A$4:$H$413").AutoFilter Field:=2, Criteria1:="="
    ActiveWindow.SmallScroll Down:=-9
    Range("A5:L168").Select
    Range("A168").Activate
    Selection.SpecialCells(xlCellTypeVisible).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 3394611
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Selection.Font.Bold = True
    Range("I5:L168").Select
    Range("L168").Activate
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.ClearContents
    Range("C5:H168").Select
    With Selection.Font
        .Color = -13382605
        .TintAndShade = 0
    End With
    ActiveSheet.Range("$A$4:$H$413").AutoFilter Field:=2
    Range("A4").Select

但是,每次运行宏时,它都会格式化相同的行,因此,当将不同的数据粘贴到模板中(在不同位置包含标头)时,宏驱动的格式就不会选择标头行。

是否有任何方法可以调整范围,以便仅将宏应用于用户选择的某些单元格(例如,当我过滤数据时剩余的可见行)?

1 个答案:

答案 0 :(得分:1)

选择要更改的单元格。它们不需要是连续的。

此代码循环遍历所选单元格,并将背景色更改为蓝色:

df$ARR_HR1 = as.POSIXct(as.character(df$ARR_HR), format = "%H")

transform(df,
   AM_pick = as.integer(ARR_HR1 >= as.POSIXct("08:00", format = "%H:%M") & 
                        ARR_HR1 <= as.POSIXct("09:59", format = "%H:%M")),
   PM_pick =  as.integer(ARR_HR1 >= as.POSIXct("16:00", format = "%H:%M") & 
                        ARR_HR1 <= as.POSIXct("17:59", format = "%H:%M")), 
   midday =  as.integer(ARR_HR1 >= as.POSIXct("10:00", format = "%H:%M") & 
                        ARR_HR1 <= as.POSIXct("15:59", format = "%H:%M")))