2012-07-06 89 views
0

我是VBA的新手。我正在尝试编写一个清理实验中某些数据的脚本。我不断收到一个错误,提示“Object Required”,并突出显示了pold。有谁知道为什么?编译错误:对象必需VBA

至于脚本,我试着沿着一列参与者号码,并绘制出每个参与者的范围。每个参与者有大约30行,我想将它定义为数组中的值。

Sub Cleanthismofoup() 
Dim pranges(1 To 50) As Long 
Dim pbegin As Range 
Dim pend As Range 
Dim pold As Integer 
Dim pnew As Integer 
Dim pcell As Range 
Dim pcounter As Long 
Dim i As Long 

Set pcell = Range("A1:A1") 
Set pbegin = Range("A2:A2") 
Set pold = Range("B2:B2").Value 
pcounter = 0 

'for every item, store value in pnew 
' move down one line. Check pnew = pold 
' if it is, do again. else create new range 

For i = 1 To rngl 
pcell = pcell.Offset(-1, 0) 
pnew = pcell.Cells.Value 
If pnnew <> pold Then pcell = pend 
If pcell = pend Then 
counter = counter + 1 
pranges(counter) = pbegin 
counter = counter + 1 
pranges(counter) = pend 
pbegin = pcell.Offset(-1, 0) 
Else: pold = pnew 
End If 

i = i + 1 
Next 

结束子

+0

哪一行遇到错误? – 2012-07-06 04:44:19

+0

你似乎有'pnew'和'pnnew'的混合,但'pnnew'没有在任何地方声明。在模块顶部添加Option Explicit – barrowc 2012-07-11 00:57:14

回答

2

该错误是因为使用的是它是用来分配参考对象Set关键字。由于Set pold = Range("B2:B2").Value的RHS输出是一个Integer,所以vba会给你一个错误。要解决它,只需删除Set关键字。但是我也注意到,您在for循环中使用了rng1而没有初始化rng1变量,在这种情况下,您的for循环将永远不会执行。您可能也想纠正这一点。

+1

此行中缺少'Set'关键字:'pcell = pcell.Offset(-1,0)' – JimmyPena 2012-07-06 12:20:52

+0

谢谢。我一直在搞这个部分,并没有保存rng1的一部分。 – user1505743 2012-07-06 18:40:13

+0

另外,是否pcell = pcell.Offset(-1,0)看起来没问题?我试图让存储在pcell中的范围值向下移动一列。 – user1505743 2012-07-06 18:50:42