use*_*821 5 string excel each vba for-loop
这里对VBA真的很新......我环顾四周,试图拼凑一些代码以满足我的需求.认为它几乎就在那里,但我得到的错误可能很容易克服,但我不知道如何.
代码查看当前工作表(STOCK),并从单元格A2中获取"目标"文本值.然后它在另一个工作表'Other'中搜索命名范围.如果它确定Other中的一个单元格('cand')等于目标值,那么值"True"将应用于原始目标的同一行上的STOCK表中的G列.
希望这是有道理的.我已经复制了代码,这可能会对事情有所了解.
Dim target As String
Dim cand As String
Dim currentrow As Integer
Sub search_named_range()
' This range is hard coded; we can try A:A if hard code version works '
For Each target In Worksheets("STOCK").Range("A2:A1000")
' retrieve the row of the current range, for use when setting target values '
currentrow = Range(target).Row
' FOR loop to search range of part numbers in Mojave '
For Each cand In Worksheets("Other").Range("N9:N150")
If StrConv(cand.Value, 2) = StrConv(target, 2) Then
Worksheets("STOCK").Range("G" + currentrow) = "True"
GoTo FORend
End If
Next cand
' If part is not found, do nothing and return to find next target '
FORend: Next target
End Sub
目前我收到错误'For Each control variable必须是Variant或Object',但无法找到解释原因的地方.我敢肯定这很明显,但引导人员会非常感激.
谢谢.
Dic*_*ika 12
您不能在For Each中使用String变量.您在For Each循环中使用tartget和cand作为控制变量,但您已将它们定义为字符串.它们需要是一个对象,特别是一个包含您正在迭代的对象集合的对象.您正在迭代范围,这是范围的集合,因此您的控制变量需要是Range对象.
Sub search_named_range()
Dim rCell As Range
Dim rCand As Range
For Each rCell In Worksheets("STOCK").Range("A2:A1000").Cells
For Each rCand In Worksheets("Other").Range("N9:N150").Cells
If StrComp(rCand.Value, rCell.Value, vbTextCompare) = 0 Then
rCell.Offset(0, 6).Value = "True"
Exit For 'exits the rCand For, but no the rCell one
End If
Next rCand
Next rCell
End Sub
Run Code Online (Sandbox Code Playgroud)
其他未纠正错误的更改:
我不确定你为什么在sub之外声明你的变量,但我把它们放在里面.
您不需要.Cells在For Each行的末尾定义,但我喜欢.你可以遍历.Rows或.Columns或.Areas有范围(尽管.Cells是默认值).
StrConvert没有任何问题,但您也可以使用LCase()或者像我一样使用StrComp.
由于我已经有一个对当前行(rCell)上的单元格的引用,我使用它和Offset来填充我想要的列.
| 归档时间: |
|
| 查看次数: |
13385 次 |
| 最近记录: |