方法‘range’作用于对象‘_Global’时失败
SubMacro1()'在excel中进行宏操作'判断a列的值是否有重复的,如果有,保留重复值的第一行,删除其他行''line=145:k=2Fori=2TolineSt...
Sub Macro1()
'在excel中进行宏操作
' 判断a列的值是否有重复的,如果有,保留重复值的第一行,删除其他行
'
'
line = 145: k = 2
For i = 2 To line Step 1
If Range("Ak").Value = Range("A(k + 1)").Value Then ‘我调式到这行出的错,是不是当range里的K的位置不是数字的时候就不能这样用?求详解
Rows("(k+1):(k+1)").Select '选择下一行
Selection.Delete Shift:=xlUp '删除该行
line = line - 1 '删除掉一行,表格的总行就少一行
Else
k = k + 1 '如果不相等,不进行任何操作,借助循环体准备进行下一行判断
End If
Next i
End Sub 展开
'在excel中进行宏操作
' 判断a列的值是否有重复的,如果有,保留重复值的第一行,删除其他行
'
'
line = 145: k = 2
For i = 2 To line Step 1
If Range("Ak").Value = Range("A(k + 1)").Value Then ‘我调式到这行出的错,是不是当range里的K的位置不是数字的时候就不能这样用?求详解
Rows("(k+1):(k+1)").Select '选择下一行
Selection.Delete Shift:=xlUp '删除该行
line = line - 1 '删除掉一行,表格的总行就少一行
Else
k = k + 1 '如果不相等,不进行任何操作,借助循环体准备进行下一行判断
End If
Next i
End Sub 展开
1个回答
展开全部
首先:对单元格的引用
Range("Ak").Value
要改为这样:
Range("A" & Cstr(k)).Value
Range("A(k + 1)").
改为这样:
Range("A" & Cstr(k + 1)).
同样
Rows("(k+1):(k+1)").Select
改为
Rows(CStr(k + 1) & ":" & CStr(k + 1)).Select
Range("Ak").Value
要改为这样:
Range("A" & Cstr(k)).Value
Range("A(k + 1)").
改为这样:
Range("A" & Cstr(k + 1)).
同样
Rows("(k+1):(k+1)").Select
改为
Rows(CStr(k + 1) & ":" & CStr(k + 1)).Select
追问
不知道CStr是什么意思,不过我按你的提示改成
If Range("A" & k).Value = Range("A" & (k + 1)).Value Then
Rows((k + 1) & ":" & (k + 1)).Select
就ok了。(然后就没试验你的那个,O(∩_∩)O~)
现在问题解决了,但我还想知道CStr是什么意思,以及为什么不能像我第一次那样去写?
拜托拜托。
追答
Cstr()函数,将数字转换成字符
理解:2 --> "2"
Val()函数,将字符(数字字符)转换成数字
理解:"2" --> 2
因为在Excel VBA中,单元格地址用字符表示,比如:单元格A1,要用
Range("A1")来表示
这里A当然是字符,但是这里的1也是字符,
你的代码里,K是数值型变量,因为你赋值为:k = 2,等等,显然它是数值,要用K来表示单元格的地址,就要把K转换成字符,所以用Cstr(K)
在所有高级语言中,字符类型与数值类型,赋值的形式相类似的,例如:
x = 12
y = 36
S = "12"
T = "36"
前两个变量是数值类型,后两个变量是字符类型。
如果你想做数值的加法运算:x + T,就会有问题,但是用:
x + Val(T) 就可以按照数值计算了。
同样,如果执行:Cstr(x) + T,结果为“1236”
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询