我可以使用宏来增加单元格地址吗? 我正在实现excel cell颜色匹配功能。
实施例: 当我将单元格“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
答案 0 :(得分:2)
改变这个:
100 * SUM(order_lines.accounting_total) /
(SELECT SUM(accounting_total) FROM order_lists) AS Order_Percentage
到此
Sheet1.Range(c.Address + 3 )
虽然我不知道你为什么需要Sheet1.Range(c.Address).offset(0,3)
而不仅仅是c,但是c是一个范围吗?如果是这样,你可以Sheet1.Range(c.Address)
答案 1 :(得分:0)
我真的希望,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
(与来自Sixthsense的sPrev
一样重要,因为更改选择,不会返回&#34; old&#34;选择。如果您选择A1
并更改颜色,则不会激活触发器,因此我们将使用Worksheet_SelectionChange
。在更改之后,我们选择D19
并且没有任何内容会告诉我们A1
已被更改。但是,我们也不希望每次选择更改时都运行所有更改。出于这个原因,&#34;最后&#34;选择将存储在rngHolder
。
我跳过了一些部分并直接推送选定的范围,这些范围穿过我们需要在变量中查看的单元格(如果没有找到交叉则没有任何内容)。
如果rngHolder
在我们选择不同的单元格时不为空,它将运行rngHolder
中的所有单元格,将所需单元格的背景颜色更改为右侧3列。 (这种方式也可以同时更改多个单元格)并且还可以在rngHolder
中推送新的相交。
我正在抱怨Sixthsense的解决方案:
如果您执行的第一个选择是......请说X7
...然后选择A3
会将AA7
的背景颜色更改为与X7
相同的背景颜色。由于条件格式和类似的东西,这可能不会被注意到。错误&#34;突出显示&#34;然而,以后可能会导致用户错误(你也可能会注意到它已经被大量的单元格改变了)
然而,问题只是针对&#34; Offset&#34; -function已经以正确的方式回答;)
答案 2 :(得分:-1)
用以下代码替换当前代码。
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