当我在VBA中使用range.offset时,由于synatx错误,我得到了错误代码1004应用定义对象或对象定义错误。

问题描述 投票:0回答:1

我正在尝试使用偏移功能,但无法找出我的synatx的问题。

我从这个网站上另一个关于偏移的问题中复制了这段代码。

我想在X列中寻找一个字符串(总是从X9开始),如果存在的话,我想知道超过两列并且在同一行的单元格的值。

我想在同一代码的附加部分中使用偏移值,所以需要把它命名为一个变量,但我决定先看看能否让VBA至少读取我想要的信息,因此才有了这个消息框。

下面是代码。

Private Sub CommandButton3_Click()
Dim LeftStrike As Range
Dim FrameLeftStrike As Range
Dim lastRow As Long

lastRow = Range("X" & Rows.Count).End(xlUp).Row
Set LeftStrike = Range("X9:X" & lastRow)
Set FrameLeftStrike = Range("LeftStrike").Offset(0, 4).Value
For Each FrameLeftStrike In LeftStrike
    If InStr(1, LeftStrike.Value, "Foot Strike") > 0 Then
        MsgBox FrameLeftStrike
    End If
Next FrameLeftStrike
End Sub

变量 "FrameLeftStrike "是个问题。

我收到的是

应用程序定义或对象定义错误

我尝试了不同的迭代。

如果我把这行代码改为

Set FrameLeftStrike = Sheet4.Range("LeftStrike").Offset(0, 4).Value

我得到同样的错误。

如果我把它改成

Set FrameLeftStrike = LeftStrike.Offset(0, 4).Value

我得到

运行时错误'424' Object required.

我想只在活动表中使用这段代码,但活动表的名称会改变,因为它会被复制为其他项目的模板。

vba variables range offset
1个回答
0
投票
  1. 循环浏览每个单元格(my_cell)的X栏(my_range)
  2. 单独检查单元格是否包含 Foot Strike
  3. 如果是这样,就把值返回到右边2个单元格,在一个 MsgBox

Sub test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update

Dim my_range As Range, my_cell As Range
Dim lr As Long

lr = ws.Range("X" & ws.Rows.Count).End(xlUp).Row
Set my_range = ws.Range("X9:X" & lr)

For Each my_cell In my_range
    If InStr(my_cell, "Foot Strike") Then
        MsgBox my_cell.Offset(0, 2)
    End If
Next my_cell


End Sub
© www.soinside.com 2019 - 2024. All rights reserved.