【发布时间】:2018-05-22 23:41:56
【问题描述】:
上下文
我正在尝试在特定列中搜索“January”的所有实例,然后引用该行,以便将单元格直接复制到它的左侧。单元格包含公式,所以我实际上是在搜索单元格的值而不是公式。
问题
我一直在尝试测试并确保它引用了正确的单元格地址(特别是行)。对于 1 月的每个实例,它会将“Testing”粘贴到列中所有值的末尾,而不是 FoundCell 本身中。 (例如,如果一月出现了 2 次,它会在列的末尾不断循环“测试”)
Excel 示例
Month Month
January =A2
February =A3
April =A4
April =A5
January =A6
December =A7
当前代码
Dim fnd As String, FirstFound As String
Dim FoundCell As Range, rng As Range
Dim myRange As Range, LastCell As Range
Set myRange = Range("B:B")
Set LastCell = myRange.Cells(myRange.Cells.Count)
Set FoundCell = myRange.Find(what:=January, after:=LastCell, LookIn:=xlValues)
'Test to see if anything was found
If Not FoundCell Is Nothing Then
FirstFound = FoundCell.Address
Do
MsgBox "Found it!"
FoundCell.Value = "Testing"
Set FoundCell = myRange.FindNext(FoundCell)
Loop While Not FoundCell Is Nothing And FoundCell.Address <> FirstFound
Else
MsgBox "Not Found!"
End If
Set rng = FoundCell
Exit Sub
如果你看到任何可以帮助的东西,请告诉我!
【问题讨论】:
-
一月和测试,它们不是变量,您需要将它们用引号引起来。 Find(what:="January"... FoundCell.Value = "Testing"
-
我建议使用
Option Explicit作为模块的第一条语句。这迫使您正确声明 all 变量,您会立即看到此类问题。特别是对于初学者来说,这非常有用。 -
您解释了问题,但我(或其他任何人)(目前)不可能在不进行大量猜测和其他非凡努力来收集一些样本数据的情况下重现问题。那么,您可以编辑问题以包含可以复制此问题的几行数据的示例吗?
-
您提供的代码遇到运行时 91 错误(VBA 不会短路链式布尔表达式,因此您的
Loop While语句有问题。 -
公式的来源是实际日期还是“一月”一词?此外,B 列是否仅包含真实日期或月份名称?另外 - 如果你想在
FoundCell中粘贴“测试”,那么你需要使用FoundCell.Offset(,1) = "Testing"。由于您没有更改正在搜索的值,因此您可以删除Not FoundCell Is Nothing,因为它总是会在循环时找到一些东西。