Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2740|回复: 8

[已解决]【求助】程序出错,错误显示‘1004’

[复制链接]
发表于 2010-1-7 11:05 | 显示全部楼层 |阅读模式


Sub findsame()

Dim i As String
   
Dim rnga As Range
Dim rngb As Range
Dim rngc As Range
Dim rngd As Range
   
Set rnga = Sheet1.Range("ai")
Set rngb = Sheet1.Range("bi")
Set rngc = Sheet1.Range("ci")
Set rngd = Sheet1.Range("di")
   
    i = 1
   
    Do While Not rnga Is Nothing
   
    If rnga = rngc Then
       If rngb = rngd Then
          rngd.Interior.ColorIndex = 6
       End If
   End If
  
   i = i + 1
  
   Loop
  
   
   
End Sub

但是结果显示

运行错误‘1004’
方法‘range’作用于对象‘-worksheet’时失败

最佳答案
2010-1-7 11:20

Sub findsame()
    Dim i&
    i = 1
    With Sheet1
        Do While Len(Cells(i, 1)) > 0
            If .Cells(i, 1) = .Cells(i, 3) Then
               If .Cells(i, 2) = .Cells(i, 4) Then
                  .Cells(i, 4).Interior.ColorIndex = 6
               End If
           End If
           i = i + 1
        Loop
    End With
End Sub
[此贴子已经被作者于2010-1-7 14:05:17编辑过]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-1-7 11:10 | 显示全部楼层

Set rnga = Sheet1.Range("ai")
Set rngb = Sheet1.Range("bi")
Set rngc = Sheet1.Range("ci")
Set rngd = Sheet1.Range("di")
range()这部分表示错误
回复

使用道具 举报

发表于 2010-1-7 11:11 | 显示全部楼层

Set rnga = Sheet1.Range("a"&i)
Set rngb = Sheet1.Range("b"&i)
Set rngc = Sheet1.Range("c"&i)
Set rngd = Sheet1.Range("d"&i)
回复

使用道具 举报

发表于 2010-1-7 11:20 | 显示全部楼层    本楼为最佳答案   


Sub findsame()
    Dim i&
    i = 1
    With Sheet1
        Do While Len(Cells(i, 1)) > 0
            If .Cells(i, 1) = .Cells(i, 3) Then
               If .Cells(i, 2) = .Cells(i, 4) Then
                  .Cells(i, 4).Interior.ColorIndex = 6
               End If
           End If
           i = i + 1
        Loop
    End With
End Sub
[此贴子已经被作者于2010-1-7 14:05:17编辑过]
回复

使用道具 举报

发表于 2010-1-7 11:20 | 显示全部楼层

感觉应该是这么个顺序吧

Sub findsame()

Dim i As String
   
Dim rnga As Range
Dim rngb As Range
Dim rngc As Range
Dim rngd As Range
   

   
    i = 1
    Set rnga = Sheet1.Range("a" & i)
Set rngb = Sheet1.Range("b" & i)
Set rngc = Sheet1.Range("c" & i)
Set rngd = Sheet1.Range("d" & i)
    Do While Not rnga Is Nothing
    If rnga = rngc Then
       If rngb = rngd Then
          rngd.Interior.ColorIndex = 6
       End If
   End If
   i = i + 1
   Loop
   
End Sub

回复

使用道具 举报

 楼主| 发表于 2010-1-7 11:38 | 显示全部楼层

喜多多 amulee

十分感谢你们的解答

但是按照喜多多的改了以后还是显示同样的错误‘1004’

amelee按照你的方法是可行的

我用的是excel2007 这个有影响吗?

回复

使用道具 举报

发表于 2010-1-7 11:53 | 显示全部楼层

你原来那个程序逻辑性有点问题。这四个区域都是动态变化的,而你在设计循环的时候让他定死了,没有随着i的增加而变化。
回复

使用道具 举报

 楼主| 发表于 2010-1-7 13:57 | 显示全部楼层

Do While Not rnga Is Nothing
    
Set rnga = Sheet1.Range("a" & i)
Set rngb = Sheet1.Range("b" & i)
Set rngc = Sheet1.Range("c" & i)
Set rngd = Sheet1.Range("d" & i)
  
    If rnga = rngc Then
       If rngb = rngd Then
          rngd.Interior.ColorIndex = 6
       End If
   End If
   i = i + 1
   Loop

哦 我把赋值语句包括在循环内不出错误提示了

但是程序运行也没有反应了

Set rnga = Sheet1.Range("a" & i)

这句话我理解是我把a列i行的数值赋给了变量rnga,不知道是不是我理解错了,我是赋了个内存地址给rnga?

看到amulee用cell也能实现我想要实现的功能 而且简洁高效 看来vba真是博大精深啊

回复

使用道具 举报

发表于 2010-1-7 14:28 | 显示全部楼层

Do While Not rnga Is Nothing
这个判断有错误,应该是Not rnga=""

Nothing是指该对象不存在。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-6 13:11 , Processed in 0.360479 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表