excelstring比较问题
所以我正在尝试创build一个非常简单的macros,它通过一个特定的行循环寻找一个在另一个表单中标识的值。 一旦find该值,它就开始在结果列中查找文本string。 如果find了文本string,它会抓取同一行内的值,但会将一些列的值写入到具有用户定义的查找值的表单中。 我的问题是,由于某种原因,当我试图比较string时,我的条件if语句没有实现,这意味着写入最终值的部分永远不会被评估。这里是代码和预先感谢。
Private Sub valchange() Dim keycells As Range Set keycells = Worksheets("Dashboard").Range("B1") Dim k As Integer k = 5 For I = 1 To 50 If Worksheets("Rework List").Cells(3, I).Value = keycells.Value Then For j = 14 To 50 If UCase(Worksheets("Rework List").Cells(j, I)) = "*PENDING*" Then Cells(j, 3).Value = Worksheets("Dashboard").Range("F" & k) k = k + 1 End If Next j End If Next I End Sub
像VBA中的string比较中不能使用小丑字符。
而是使用Instr()函数来search另一个string中的string。
If instr(1,Worksheets("Rework List").Cells(j, I),"pending",vbTextCompare)>0 Then
如果可以在第二个string中findsearchstring,instr将返回第一个字符的位置。 如果找不到,它返回一个0.所以如果instr()> 0,这意味着string在那里。
vbTextCompare确保shell(大写/小写)被忽略。 开头的1表示search的起始位置。
请注意,这不是世界上最快的事情…
除了@vacip已经告诉你的,我会指出以下内容
你写了:
它会抓取同一行内的值,但会将一些列写入到具有用户定义的查找值的表单中
那我想:
Cells(j, 3).Value = Worksheets("Dashboard").Range("F" & k)
会做相反的事情(假设macros启动时的活动表是“返工列表”)!
而且它的“更好:
-
从
Long
types声明行索引variables尽pipe在你的特定情况下它不是必须的(它们的范围最大为50,这是由一个
Integer
types来处理),这是很常见的,你最终会面对一些33k +行,这就是Long
typesvariables必须进入场景的地方 -
存储关键字值而不是其范围,并避免随后使用
keycells.Value
所有访问 -
至less应始终采用完全合格的范围参考,直到工作表对象(如果不是工作簿对象)
所以你可以试试这个:
Option Explicit Private Sub valchange() Dim keyVal As String Dim k As Long, i As Long, j As Long keyVal = CStr(Worksheets("Dashboard").Range("B1").Value) k = 5 With Worksheets("Rework List") For i = 1 To 50 If .Cells(3, i).Value = keyVal Then For j = 14 To 50 If InStr(.Cells(j, i), "pending", vbTextCompare) > 0 Then Worksheets("Dashboard").Range("F" & k) = .Cells(j, 3).Value k = k + 1 End If Next j End If Next i End With End Sub