VBA学习代码,查找单词,考虑下一列,如果是这样



我正在尝试自己学习 VBA,所以我正在做一些基本的事情来弄乱它。我现在要做的是在 A 列中查找单词"总计",在找到单词后考虑下一列的值,然后使用 If then 语句判断 B 列上的数字是否>然后 1,然后在 C1 上键入"是"或 B1"否">

Sub try5()
Set cell = Columns("A:A").Select
Selection.Find(What:="Total", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(columnOffset:=1).Activate.Select
If cell > 1 Then
Range("C1").Value = "yes"
Else
Range("C1").Value = "no"
End If
End Sub

代码的第一部分,如果我自己运行它,但 VBA 给我一个弹出窗口说:"需要对象",而如果我使用 IF THEN 语句运行,它说"类型不匹配"。

对不起,如果这是菜鸟问题。

试试这样的事情。

  1. 设置要在其中搜索值的范围
  2. 将搜索区域中的Found单元格设置为范围
  3. 在尝试分析之前确定是否找到匹配项(其他明智的Found=Nothing并且逻辑测试Nothing > 1没有意义。
  4. 使用
  5. Offset(r, c)导航r行并c列与找到的单元格的距离(这里我们想查看 1 列,所以我们使用Offset(0,1)=Offset(,1).然后,我们想查看 Col C(距离 A 2 列(,所以我们使用Offset(,2)来编写yes/no

Sub try5()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim SearchRange As Range, Found As Range
Set SearchRange = ws.Range("A:A")
Set Found = SearchRange.Find(What:="Total", LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Found Is Nothing Then 'If a match is NOT found
MsgBox "'Total' Not Found in Range " & SearchRange.Address(False, False)
Else 'If a match is found
If Found.Offset(, 1) > 1 Then
Found.Offset(, 2) = "yes"
Else
Found.Offset(, 2) = "no"
End If
End If
End Sub

我也不建议使用.Select.你应该总是尝试找到一种方法来明确说明你想要修改的WorkbookSheetRangeCell。 这些对象都不必ActiveSelected即可更改、删除、移动、复制等。

最新更新