Vba 可变范围和持续获取;对象的方法范围“工作表失败”;

Vba 可变范围和持续获取;对象的方法范围“工作表失败”;,vba,excel,Vba,Excel,我是VBA新手,我知道有人问过类似的问题,但我似乎找不到答案。我只想有一个变量范围,允许宏逐个遍历列表中的所有值,但它总是给我相同的错误。另外,我想比较某个范围内的所有数字,然后选择第一个大于另一个值的值(都在同一行中)。我不知道我是否做对了,代码如下: Option Explicit Private Sub CommandButton1_Click() Dim buysignal As Variant Dim OHLC As Variant Dim ffdhigh As Variant D

我是VBA新手,我知道有人问过类似的问题,但我似乎找不到答案。我只想有一个变量范围,允许宏逐个遍历列表中的所有值,但它总是给我相同的错误。另外,我想比较某个范围内的所有数字,然后选择第一个大于另一个值的值(都在同一行中)。我不知道我是否做对了,代码如下:

Option Explicit

Private Sub CommandButton1_Click()

Dim buysignal As Variant
Dim OHLC As Variant
Dim ffdhigh As Variant
Dim i As Long

Sheets("sheet2").Activate
Set buysignal = Range("M" & i).Value
OHLC = Range("B" & i & ":" & "E" & i).Value
ffdhigh = Range("I" & i).Value

For i = 63 To 150
If OHLC > ffdhigh Then
buysignal = "buy"
Else: buysignal = ""

End If
Next i

End Sub
错误消息:运行时错误“1004”:对象“\u工作表”的方法“范围”失败


谢谢各位,任何输入都将非常感谢。

您的变量
i
还没有值,您正在使用它设置
buysignal
范围。因此,将
i
设置为一个值

接下来,同一行将抛出错误,因为您使用
set
设置对象的值,但将其设置为单元格的值。这是类型不匹配


在开始编码之前,计划好你想要做的事情。哦,不要什么都用变体。这是在问你现在面临的那种麻烦。正确地键入变量,然后您将立即捕获类型不匹配

您的变量
i
还没有值,您正在使用它设置
buysignal
范围。因此,将
i
设置为一个值

接下来,同一行将抛出错误,因为您使用
set
设置对象的值,但将其设置为单元格的值。这是类型不匹配


在开始编码之前,计划好你想要做的事情。哦,不要什么都用变体。这是在问你现在面临的那种麻烦。正确地键入变量,然后您将立即捕获类型不匹配

嗨,谢谢你的评论。这是否意味着我需要首先为I声明一个初始值,而不管我的“for”函数是什么?在
for
循环之前使用
I
。第一次使用时需要一个值。看看你的代码,谢谢!我已经编辑了代码,将“I”附加到一个值,并将变量编辑到范围,然后使用.value。现在,我的If OHLC.value>ffdhigh.value给出了错误“类型不匹配”。我如何解决这个问题?需要我在问题中重新键入新代码吗?非常感谢。@jadeliew123
OHLC
是一个
变量
,您将其分配给
范围(“B”&i&“:E”&i)
,因此无论
i
的值是多少-
OHLC
都是一个二维变量数组。然后是
ffdhigh=Range(“I”&I)。Value
-
ffdhigh
是该单元格中值的任何类型的值。如果Excel将其视为一个日期,则会有一个变量/
日期
;如果它是一个数字,您将有一个变量/
Double
;如果它是
真的
,那么就有一个变量/
布尔值
,等等。不能将一个值范围与一个值进行比较。现在还不清楚如果OHLC>ffdhigh是什么意思。嗨@Mat'sMug,我明白你的意思,我正在尝试更改我的代码,以便将2D变量尺寸范围内的值与另一个值进行比较。我编辑了上面的代码,并使用了范围而不是变量,但仍然出现错误“object variable或with block variable not set”(对象变量或带块变量未设置)。这是为什么?您好,感谢您的评论。这是否意味着我需要首先为I声明一个初始值,而不管我的“for”函数是什么?在
for
循环之前使用
I
。第一次使用时需要一个值。看看你的代码,谢谢!我已经编辑了代码,将“I”附加到一个值,并将变量编辑到范围,然后使用.value。现在,我的If OHLC.value>ffdhigh.value给出了错误“类型不匹配”。我如何解决这个问题?需要我在问题中重新键入新代码吗?非常感谢。@jadeliew123
OHLC
是一个
变量
,您将其分配给
范围(“B”&i&“:E”&i)
,因此无论
i
的值是多少-
OHLC
都是一个二维变量数组。然后是
ffdhigh=Range(“I”&I)。Value
-
ffdhigh
是该单元格中值的任何类型的值。如果Excel将其视为一个日期,则会有一个变量/
日期
;如果它是一个数字,您将有一个变量/
Double
;如果它是
真的
,那么就有一个变量/
布尔值
,等等。不能将一个值范围与一个值进行比较。现在还不清楚如果OHLC>ffdhigh是什么意思。嗨@Mat'sMug,我明白你的意思,我正在尝试更改我的代码,以便将2D变量尺寸范围内的值与另一个值进行比较。我已经编辑了上面的代码,并使用了范围而不是变量,但是我仍然得到错误“object variable or with block variable not set.”为什么会这样?哪个范围方法失败?哪个范围方法失败?