方法‘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
展开
 我来答
syx54
推荐于2017-11-25 · TA获得超过7378个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2747万
展开全部
首先:对单元格的引用
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”
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式