可以使用宏增加单元格地址吗?我正在实现 excel 单元格颜色匹配功能。
例:当我将单元格"A1"更改为红色时,单元格"D1"将变为红色。如果将"C1"更改为红色,则"F1"也将更改为红色。都需要增加3列。
现在我只需要将"c.Address"修改为 + 3,这样单元格就会执行 D1。我尝试使用 c.Address + 3,但它不起作用。任何帮助将不胜感激!
谢谢!
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each c In Worksheets("Sheet1").Range("A1:C1").Cells
If c.Interior.Color = 255 Then
Sheet1.Range(c.Address + 3 ).Interior.Color = 255 <<-- Can't work
Else
Sheet1.Range(c.Address + 3 ).Interior.Color = white <<-- Can't work
End If
Next c
End Sub
更改以下内容:
Sheet1.Range(c.Address + 3 )
对此
Sheet1.Range(c.Address).offset(0,3)
虽然我不知道为什么你需要Sheet1.Range(c.Address)
而不仅仅是c,c是一个范围吗?如果是这样,你可以做c.offset(0,3)
我真的希望,Sixthsense会编辑他的答案,这样我就可以给他+1,但看起来不会发生这种情况:(
仍然知道他试图实现的目标,我至少会展示一些工作代码并对其进行一些解释。所以首先要做的是:代码:
Option Explicit
Dim rngHolder As Range
Private Sub Worksheet_Activate()
If rngHolder Is Nothing Then Set rngHolder = Intersect(Selection, Range("A1:C1"))
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not rngHolder Is Nothing Then
Dim rngRunner As Variant
For Each rngRunner In rngHolder.Cells
rngRunner.Offset(0, 3).Interior.Color = IIf(rngRunner.Interior.Color = 255, 255, xlNone)
Next
End If
Set rngHolder = Intersect(Target, Range("A1:C1"))
End Sub
rngHolder
(如《第六感》中的sPrev
)很重要,因为更改选择不会返回"旧"选择。如果您选择A1
并更改颜色,则不会激活任何触发器,因此我们将采用 Worksheet_SelectionChange
.现在,更改后,我们选择D19
,没有任何内容会告诉我们A1
已更改。但我们也不希望每次选择更改时都运行所有更改。因此,"最后一个"选择将存储在 rngHolder
.
我跳过了一些部分,直接推动了与我们需要在变量中查看的单元格交叉的选定范围(如果没有找到相交,则什么也不推)。
如果下次我们选择其他单元格时rngHolder
不为空,它将运行rngHolder
中的所有单元格,以更改所需单元格的背景颜色 3 列向右。(这种方式也可以一次更改多个单元格)并在rngHolder
中推动新的相交。
以至于我在抱怨第六感的解决方案:
如果您所做的第一个选择是...让我们说X7
...然后选择A3
会将AA7
的背景颜色更改为与X7
相同的颜色。由于条件格式和类似的东西,这可能不会被注意到。然而,错误的"突出显示"可能会在以后导致用户错误(您也可能注意到它,许多单元格都已更改)
但是,问题只是针对"偏移"函数,该函数已经以正确的方式回答;)
将当前代码替换为以下代码。
Dim sPrev As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If sPrev = "" Then sPrev = Target.Address
If Target.Cells.Count = 1 Then
If Target.Column = Range("A:A").Column Then
With Range(sPrev)
.Offset(, 3).Interior.Color = .Interior.Color
End With
sPrev = Target.Address
End If
End If
End Sub