我有一维的单元格地址数组(单元格可能不相邻)。 我想选择所有这些单元格以改变内部颜色。数组中的单元格表示工作簿中自上一版本工作表以来已更改的所有单元格,我需要突出显示它们才能查看更改。
我尝试将数组转换为字符串,然后使用以下代码选择它们:
For index = 1 To UBound(RTemp)
RTempStr = RTempStr & CStr(RTemp(index))
Next
RTempStr = Left(RTempStr, Len(RTempStr) - 1)
Worksheets("R1").Select
Union(RTempStr).Select
Selection.Interior = vbRed
RTemp
是我的单元格地址数组
Union函数返回Type不匹配错误
有任何建议如何解决这个问题?或者选择细胞的其他方法?
答案 0 :(得分:1)
声明一个范围对象并为其指定不连续的范围。然后,您可以直接更改内部颜色。见这个例子。
Sub sample()
Dim rng As Range
Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1:A2,C4:C7,D11:D12")
rng.Interior.ColorIndex = 3
End Sub
我很难编码"A1:A2,C4:C7,D11:D12"
如果你有一个数组中的单元格地址,那么你可以构造该字符串并将其传递给范围对象。例如
Sub sample()
Dim Ar(1 To 3) As String
Dim rng As Range
Dim strAddress As String
Dim i As Long
Ar(1) = "A1:A2"
Ar(2) = "C4:C7"
Ar(3) = "D11:D12"
For i = 1 To 3
If strAddress = "" Then
strAddress = Ar(i)
Else
strAddress = strAddress & "," & Ar(i)
End If
Next
Set rng = ThisWorkbook.Sheets("Sheet1").Range(strAddress)
rng.Interior.ColorIndex = 3
End Sub
通过评论进行跟进
如果数组说Cell(4,5)
,则使用我在下面创建的函数。
Option Explicit
Sub Sample()
Dim Ar(1 To 5) As String
Dim rng As Range
Dim strAddress As String
Dim i As Long
Ar(1) = "Cells(4,5)"
Ar(2) = "Cells(6,6)"
Ar(3) = "Cells(7,7)"
Ar(4) = "Cells(8,12)"
Ar(5) = "Cells(9,12)"
strAddress = Join(Ar, "#") '<~~ `Join` Courtsey Gary's Student
strAddress = GetAddress(strAddress)
Debug.Print strAddress
Set rng = ThisWorkbook.Sheets("Sheet1").Range(strAddress)
rng.Interior.ColorIndex = 3
End Sub
Function GetAddress(sAddr As String) As String
Dim MyAr
Dim sTemp As String, sAddrs As Range
Dim Rw As Long, Col As Long, i As Long
MyAr = Split(sAddr, "#")
For i = 0 To UBound(MyAr)
sTemp = Replace(Replace(MyAr(i), "Cells(", ""), ")", "")
Rw = Val(Trim(Split(sTemp, ",")(0)))
Col = Val(Trim(Split(sTemp, ",")(1)))
If sAddrs Is Nothing Then
Set sAddrs = ThisWorkbook.Sheets(1).Cells(Rw, Col)
Else
Set sAddrs = Union(sAddrs, ThisWorkbook.Sheets(1).Cells(Rw, Col))
End If
Next i
GetAddress = sAddrs.Address
End Function
答案 1 :(得分:1)
只需通过加入创建地址:
Sub jumble()
Dim ary(1 To 3) As String
Dim s As String
Dim r As Range
ary(1) = "A1"
ary(2) = "B9"
ary(3) = "C11"
s = Join(ary, ",")
Set r = Range(s)
r.Select
End Sub