Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: jiangslly

[已解决]请帮忙修改下面这段代码

[复制链接]
 楼主| 发表于 2011-8-13 14:35 | 显示全部楼层
回复 无聊的疯子 的帖子

大师,现在我觉得有点突破了,但有个问题
Sub huizongrenshu2()
    Dim i As Integer, j As Integer, s As Integer
    Dim rg As range
    With Sheet4
       s = 0
      Sheet4.range(Cells(3, 25), Cells(18, 25)).ClearContents
      Sheet12.Select
      Set rg = Sheet12.Cells(i, 3)
      
        For i = 3 To 150
        
            For j = 3 To 18
         
                If rng.Value = Sheet4.Cells(j, 1) Then s = s + 1
                  
            Sheet4.Cells(j, 25) = s
            
              Next j
        Next i
  End With
End Sub

这里,当我运行到 Set rg = Sheet12.Cells(i, 3)
程序说我应用程序或定义错误,我觉得我一点问题也没有啊,如果说名称相同,我已经把rng改成rn 了,找不到问题所在
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2011-8-13 14:47 | 显示全部楼层
回复 laosanjie 的帖子

这位大哥,我试了你的代码,真的很管用,但是有个问题,因为我还要对工资表查找第3列数据,于是我分了两次汇总,代码跟你的一样,只是把Set rng = Sheet12.Cells(i, 2) ,改成了Set rng = Sheet12.Cells(i, 3),其他完全一样
Sub huizongrenshu2()
    Dim rng As range, rng2 As range, r As Byte, k As Byte
    Dim x%
    Application.ScreenUpdating = False
    x = Sheet12.[B65536].End(3).Row
    For i = 3 To x
        Sheet4.Select
        Set rng = Sheet12.Cells(i, 3)
        Set rng2 = range("A1:A18").Find(rng, lookat:=xlWhole)
        k = rng2.Row
        For r = 3 To 18
            ' d = 0
            If rng.Value = Sheet4.Cells(r, 1).Value Then
                'd = d + 1
                Cells(k, 25).Value = Cells(k, 25).Value + 1
            End If
        Next
    Next
    Set rng = Nothing
    Set rng2 = Nothing
    Application.ScreenUpdating = True
End Sub
但是运行的时候运行到 k = rng2.Row的时候,系统说我对象变量或with块变量未设置,请问这是什么原因?怎么解决?
回复

使用道具 举报

发表于 2011-8-13 21:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 laosanjie 于 2011-8-13 21:55 编辑
jiangslly 发表于 2011-8-13 14:47
回复 laosanjie 的帖子

这位大哥,我试了你的代码,真的很管用,但是有个问题,因为我还要对工资表查找第3 ...

但是运行的时候运行到 k = rng2.Row的时候,系统说我对象变量或with块变量未设置,请问这是什么原因?
因工资表查找第3 列里的“采购组”、“GMP稽核小组” 在汇总表的A列里没有,所以下面的语句
Set rng2 = Range("A1:A18").Find(rng, lookat:=xlWhole)
        k = rng2.Row
rng2会出现找不到的情况,也就是rng2为空,以至出错。
下面的加了判断语句 If Not rng2 Is Nothing Then 后应该可以了:
Sub huizongrenshu2()
    Dim rng As Range, rng2 As Range, r As Byte, k As Byte
    Dim x%
    Application.ScreenUpdating = False
    x = Sheet12.[B65536].End(3).Row
    For i = 3 To x
        Sheet4.Select
        Set rng = Sheet12.Cells(i, 2)
        Set rng2 = Range("A1:A18").Find(rng, lookat:=xlWhole)
       If Not rng2 Is Nothing Then
            k = rng2.Row
            For r = 3 To 18
                If rng.Value = Sheet4.Cells(r, 1).Value Then
                    Cells(k, 25).Value = Cells(k, 25).Value + 1
                End If
            Next
        End If
        Sheet4.Select
        'Set rng = Sheet12.Cells(i, 2)
        Set rng = Sheet12.Cells(i, 3)
        Set rng2 = Range("A1:A18").Find(rng, lookat:=xlWhole)
        If Not rng2 Is Nothing Then
            k = rng2.Row
            For r = 3 To 18
                If rng.Value = Sheet4.Cells(r, 1).Value Then
                    Cells(k, 25).Value = Cells(k, 25).Value + 1
                End If
            Next
        End If
    Next
    Set rng = Nothing
    Set rng2 = Nothing
    Application.ScreenUpdating = True
End Sub

回复

使用道具 举报

 楼主| 发表于 2011-8-15 09:28 | 显示全部楼层
回复 laosanjie 的帖子

谢谢你,最后还有个问题能帮忙解答下吗?
Sub huizongrenshu2()
    Dim i As Integer, j As Integer, s As Integer
    Dim rg As range
    With Sheet4
       s = 0
      Sheet4.range("Y3:Y18").ClearContents
      Sheet12.Select
      Set rg = Sheet12.Cells(i, 3)
      
        For i = 3 To 150
        
            For j = 3 To 18
         
                If rng.Value = Sheet4.Cells(j, 1) Then s = s + 1
                  
            Sheet4.Cells(j, 25) = s
            
              Next j
        Next i
  End With
End Sub
这段代码我也运行过,功能是一样的,但是在我写第二个的时候,运行到      Set rg = Sheet12.Cells(i, 3)  这里的时候,说我应用程序定义或对象定义错误,但是我查找第二列的时候却没问题,请问这是什么原因?能帮我解答吗?

回复

使用道具 举报

发表于 2011-8-15 09:44 | 显示全部楼层
Set rg = Sheet12.Cells(i, 3)
如果你说的是示,你看看 i 的值是不是0?
回复

使用道具 举报

 楼主| 发表于 2011-8-15 10:58 | 显示全部楼层
回复 过儿 的帖子

我知道原因了,必须把for i = 3 to r 放在前面,谢谢了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 17:31 , Processed in 0.228608 second(s), 4 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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