【发布时间】:2017-07-12 22:32:37
【问题描述】:
我想要做的是在我的每个动态范围下添加一些单元格格式。我想我可以使用Find 和FindNext,但我提出的代码仅适用于第一个动态范围。我认为让我感到悲伤的问题是我用于Find/FindNext 的常数位于我的动态范围的顶部。然后我使用End(xlDown).Offset() 来访问我想要格式化的单元格。
这是我开始使用电子表格的示例。一些常量是每个部分上方 B 列中的“材料”一词,第一个实例将始终位于单元格 B13 中,并且数据永远不会扩展到 H 列之外。每个部分中的行数将发生变化,并且的部分将改变。
这是我设法整理的代码。
Option Explicit
Sub findMaterials()
Dim cRange As Range, cFound As Range
Dim firstAddress As String
Application.ScreenUpdating = False
Set cRange = Cells.Find(What:="Materials", LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection _
:=xlNext, MatchCase:=False, SearchFormat:=False) _
.End(xlDown).Offset(1, 1)
For Each cFound In cRange
If cFound = cRange Then
Do
firstAddress = cRange.Address
With Range(cRange, cRange.Offset(0, 5))
.Interior.Color = RGB(149, 179, 215)
.Font.Color = vbWhite
.Font.Bold = True
.Font.Size = 11
End With
With Range(cRange, cRange.Offset(0, 4))
.MergeCells = True
.HorizontalAlignment = xlRight
End With
Set cFound = Cells.FindNext(cFound.End(xlDown).Offset(1, 1))
Loop While Not cFound Is Nothing And cRange.Address <> firstAddress
End If
Next cFound
End Sub
我尝试了多种我在网上找到的变体,例如在Set cRange 上方以For i = 12 to lRow 开头,但这似乎也不起作用。到目前为止,我只获得了找到“材料”的第一个实例并在第一部分下方应用格式的代码。每个部分在“材料”一词上方都有一个标题,我也希望它出现在小计行中。我想我可以用一个数组来做到这一点,但还没有那么远,如果我必须在这里和那里做一些手动输入,我完全可以接受!感谢您的帮助!
【问题讨论】:
标签: excel find range offset vba