Excel精英培训网

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

[已解决]循环求助!!

[复制链接]
发表于 2012-8-18 12:56 | 显示全部楼层 |阅读模式
我编写了一下程序,但不知道为什么,K不能循环,求版主帮忙!!十分感谢!!!
Sub 搜索资料()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim c As Boolean
Dim ic1 As Integer
Dim ic2 As Integer
     ic1 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count
     ic2 = Sheets("货品信息").[a3].CurrentRegion.Rows.Count
     c = False
   For k = 1 To ic1
      For i = 1 To ic2
        If Trim(Sheets("销售信息").Cells(k, 1)) = Trim(Sheets("货品信息").Cells(i, 1)) Then
           For j = 1 To 13
             Sheets("销售信息").Cells(k, j) = Sheets("货品信息").Cells(i, j)
             c = True
           Next j
        Exit For
      End If
     Next i
   Next k
  MsgBox "已经搜索到符合条件的记录", vbOKOnly, "提示"
  If c = False Then
    MsgBox "没有搜索到符合条件的记录,请核实", vbOKOnly, "提示"
    End If
End Sub
最佳答案
2012-8-18 16:35
本帖最后由 happym8888 于 2012-8-18 16:46 编辑

ic1 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count '这个写法不合适,CurrentRegion.Rows.Count表示当前区域的行数,里面没有定位信息。应该写成:
ic1= Sheets("销售信息").range("A65536").End(xlup).row
同理:
ic2 = Sheets("货品信息").range("A65536").end(xlup).row
  1. Sub 搜索资料()
  2. Dim i As Integer
  3. Dim j As Integer
  4. Dim k As Integer
  5. Dim c As Boolean
  6. Dim ic1 As Integer
  7. Dim ic2 As Integer
  8. ic1 = Sheets("销售信息").Range("A65536").End(xlUp).Row '[a4].CurrentRegion.Rows.Count '这个写法不合适,CurrentRegion.Rows.Count表示当前区域的行数,里面没有定位信息。
  9. ic2 = Sheets("货品信息").Range("A65536").End(xlUp).Row '[a3].CurrentRegion.Rows.Count
  10. c = False
  11. For k = 4 To ic1   'k直接从第4行开始循环
  12.      For i = 3 To ic2   'i直接从第3行开始循环
  13.      xxx = Trim(Sheets("销售信息").Cells(k, 1))
  14.      yyy = Trim(Sheets("货品信息").Cells(i, 1))
  15.       If Trim(Sheets("销售信息").Cells(k, 1)) = Trim(Sheets("货品信息").Cells(i, 1)) Then
  16.          For j = 1 To 13
  17.            Sheets("销售信息").Cells(k, j) = Sheets("货品信息").Cells(i, j)
  18.            c = True
  19.          Next j
  20.       Exit For
  21.     End If
  22.    Next i
  23. Next k
  24. If c = True Then
  25. MsgBox "已经搜索到符合条件的记录", vbOKOnly, "提示"  '本来的写法不好、没有搜索到符合条件的记录也会提示“已经搜索到符合条件的记录”
  26. Else
  27.   MsgBox "没有搜索到符合条件的记录,请核实", vbOKOnly, "提示"
  28. End If
  29. End Sub

  30. Sub 货品出仓()
  31. Dim i As Integer
  32. Dim j As Integer
  33. Dim k As Integer
  34. Dim cz As Boolean
  35. Dim ic1 As Integer
  36. Dim ic2 As Integer
  37. ' ic1 = Sheets("货品信息").[a3].CurrentRegion.Rows.Count
  38. ' ic2 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count
  39. ic1 = Sheets("销售信息").Range("A65536").End(xlUp).Row
  40. ic2 = Sheets("货品信息").Range("A65536").End(xlUp).Row
  41.   
  42.   cz = False
  43.    For k = 4 To ic2
  44.      For i = 3 To ic1
  45.        If Trim(Sheets("销售信息").Cells(k, 1)) = Trim(Sheets("货品信息").Cells(i, 1)) And Trim(Sheets("销售信息").Cells(i, 12)) > 0 Then
  46.        cz = True
  47.         Sheets("货品信息").Cells(i, 12) = Sheets("货品信息").Cells(i, 12) - Sheets("销售信息").Cells(k, 14)
  48.          For j = 1 To 13
  49.            Sheets("销售信息").Cells(k, j) = Sheets("货品信息").Cells(i, j)
  50.          Next j
  51.         Exit For
  52.        End If
  53.      Next i
  54.    Next k
  55.    If cz = True Then
  56.    MsgBox "货品已经导出成功!", vbOKOnly, "成功导出"
  57.     Else
  58.        MsgBox "记录表无此记录或库存量为0,因此无法导出,请核实!", vbOKOnly, "无法导出"
  59.      End If
  60. End Sub


复制代码
表格.rar (11.71 KB, 下载次数: 6)
发表于 2012-8-18 12:59 | 显示全部楼层
回复

使用道具 举报

发表于 2012-8-18 13:03 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-8-18 13:08 编辑

你的IC1是有选中区域嘛,如果没有选或者只有1行,这样就不会循环了。

    ic1 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count
      ic2 = Sheets("货品信息").[a3].CurrentRegion.Rows.Count
问题在上面这2句,你F8看看就知道原因了。

如果是1的话,也会要循环一次。
回复

使用道具 举报

发表于 2012-8-18 13:18 | 显示全部楼层

  1. Sub 搜索资料()
  2. Dim i As Integer
  3. Dim j As Integer
  4. Dim k As Integer
  5. Dim c As Boolean
  6. Dim ic1 As Integer
  7. Dim ic2 As Integer
  8. ic1 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count
  9. ic2 = Sheets("货品信息").[a3].CurrentRegion.Rows.Count

  10. Debug.Print "ic1=" & ic1
  11. Debug.Print "ic2=" & ic2

  12. c = False
  13. For k = 1 To ic1
  14.      Debug.Print "k=" & k
  15.      For i = 1 To ic2
  16.          Debug.Print "i=" & i
  17.       If Trim(Sheets("销售信息").Cells(k, 1)) = Trim(Sheets("货品信息").Cells(i, 1)) Then
  18.          For j = 1 To 13
  19.            Sheets("销售信息").Cells(k, j) = Sheets("货品信息").Cells(i, j)
  20.            c = True
  21.          Next j
  22.       Exit For
  23.     End If
  24.    Next i
  25. Next k
  26. MsgBox "已经搜索到符合条件的记录", vbOKOnly, "提示"
  27. If c = False Then
  28.   MsgBox "没有搜索到符合条件的记录,请核实", vbOKOnly, "提示"
  29.   End If
  30. End Sub
复制代码
帮你加了几个语句,你把立即窗口打开,程序运行一次后看立即窗口的输出结果吧,就知道问题在哪了。
回复

使用道具 举报

 楼主| 发表于 2012-8-18 15:11 | 显示全部楼层
hwc2ycy 发表于 2012-8-18 13:18
帮你加了几个语句,你把立即窗口打开,程序运行一次后看立即窗口的输出结果吧,就知道问题在哪了。

Dear 兄弟:
     那个代码还是不能循环,能否帮忙测试一下我的附件!资料搜索不能循环,货品出仓也出现错误!我想到头都大了!都搞不懂什么原因! 表格.rar (17.06 KB, 下载次数: 7)
回复

使用道具 举报

发表于 2012-8-18 15:56 | 显示全部楼层
本帖最后由 JLxiangwei 于 2012-8-18 16:50 编辑
531tommy 发表于 2012-8-18 15:11
Dear 兄弟:
     那个代码还是不能循环,能否帮忙测试一下我的附件!资料搜索不能循环,货品出仓也出现 ...

  1. Sub 货品出仓()
  2. Dim i As Integer
  3. Dim j As Integer
  4. Dim k As Integer
  5. Dim cz As Boolean
  6. Dim ic1 As Integer
  7. Dim ic2 As Integer
  8.   ic1 = Sheets("货品信息").[a3].CurrentRegion.Rows.Count
  9.   ic2 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count
  10.   cz = False
  11.    For k = 3 To ic2
  12.      For i = 4 To ic1
  13.        If Trim(Sheets("销售信息").Cells(k, 1)) = Trim(Sheets("货品信息").Cells(i, 1)) And Trim(Sheets("销售信息").Cells(i, 12)) > 0 Then
  14.        cz = True
  15.         Sheets("货品信息").Cells(i, 12) = Sheets("货品信息").Cells(i, 12) - Sheets("销售信息").Cells(k, 14)
  16.          For j = 1 To 13
  17.            Sheets("销售信息").Cells(k, j) = Sheets("货品信息").Cells(i, j)
  18.          Next j
  19.         Exit For
  20.        End If
  21.      Next i
  22.    Next k
  23.    MsgBox "货品已经导出成功!", vbOKOnly, "成功导出"
  24.      If cz = False Then
  25.        MsgBox "记录表无此记录或库存量为0,因此无法导出,请核实!", vbOKOnly, "无法导出"
  26.      End If
  27. End Sub
复制代码
循环的开始行错了吧
回复

使用道具 举报

发表于 2012-8-18 16:09 | 显示全部楼层
ic1 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count + 2
另:此代码思路不太好;多处可优化
回复

使用道具 举报

发表于 2012-8-18 16:12 | 显示全部楼层
  第二段代码:ic2 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count + 2
且k从4开始循环,i从3开始循环
回复

使用道具 举报

发表于 2012-8-18 16:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 happym8888 于 2012-8-18 16:46 编辑

ic1 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count '这个写法不合适,CurrentRegion.Rows.Count表示当前区域的行数,里面没有定位信息。应该写成:
ic1= Sheets("销售信息").range("A65536").End(xlup).row
同理:
ic2 = Sheets("货品信息").range("A65536").end(xlup).row
  1. Sub 搜索资料()
  2. Dim i As Integer
  3. Dim j As Integer
  4. Dim k As Integer
  5. Dim c As Boolean
  6. Dim ic1 As Integer
  7. Dim ic2 As Integer
  8. ic1 = Sheets("销售信息").Range("A65536").End(xlUp).Row '[a4].CurrentRegion.Rows.Count '这个写法不合适,CurrentRegion.Rows.Count表示当前区域的行数,里面没有定位信息。
  9. ic2 = Sheets("货品信息").Range("A65536").End(xlUp).Row '[a3].CurrentRegion.Rows.Count
  10. c = False
  11. For k = 4 To ic1   'k直接从第4行开始循环
  12.      For i = 3 To ic2   'i直接从第3行开始循环
  13.      xxx = Trim(Sheets("销售信息").Cells(k, 1))
  14.      yyy = Trim(Sheets("货品信息").Cells(i, 1))
  15.       If Trim(Sheets("销售信息").Cells(k, 1)) = Trim(Sheets("货品信息").Cells(i, 1)) Then
  16.          For j = 1 To 13
  17.            Sheets("销售信息").Cells(k, j) = Sheets("货品信息").Cells(i, j)
  18.            c = True
  19.          Next j
  20.       Exit For
  21.     End If
  22.    Next i
  23. Next k
  24. If c = True Then
  25. MsgBox "已经搜索到符合条件的记录", vbOKOnly, "提示"  '本来的写法不好、没有搜索到符合条件的记录也会提示“已经搜索到符合条件的记录”
  26. Else
  27.   MsgBox "没有搜索到符合条件的记录,请核实", vbOKOnly, "提示"
  28. End If
  29. End Sub

  30. Sub 货品出仓()
  31. Dim i As Integer
  32. Dim j As Integer
  33. Dim k As Integer
  34. Dim cz As Boolean
  35. Dim ic1 As Integer
  36. Dim ic2 As Integer
  37. ' ic1 = Sheets("货品信息").[a3].CurrentRegion.Rows.Count
  38. ' ic2 = Sheets("销售信息").[a4].CurrentRegion.Rows.Count
  39. ic1 = Sheets("销售信息").Range("A65536").End(xlUp).Row
  40. ic2 = Sheets("货品信息").Range("A65536").End(xlUp).Row
  41.   
  42.   cz = False
  43.    For k = 4 To ic2
  44.      For i = 3 To ic1
  45.        If Trim(Sheets("销售信息").Cells(k, 1)) = Trim(Sheets("货品信息").Cells(i, 1)) And Trim(Sheets("销售信息").Cells(i, 12)) > 0 Then
  46.        cz = True
  47.         Sheets("货品信息").Cells(i, 12) = Sheets("货品信息").Cells(i, 12) - Sheets("销售信息").Cells(k, 14)
  48.          For j = 1 To 13
  49.            Sheets("销售信息").Cells(k, j) = Sheets("货品信息").Cells(i, j)
  50.          Next j
  51.         Exit For
  52.        End If
  53.      Next i
  54.    Next k
  55.    If cz = True Then
  56.    MsgBox "货品已经导出成功!", vbOKOnly, "成功导出"
  57.     Else
  58.        MsgBox "记录表无此记录或库存量为0,因此无法导出,请核实!", vbOKOnly, "无法导出"
  59.      End If
  60. End Sub


复制代码
表格.rar (11.71 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2012-8-18 17:09 | 显示全部楼层
感谢各位的帮忙!谢谢啊!我才刚学VB,所以很多东西都不懂,以后请各位多多指教啊!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 10:20 , Processed in 0.161661 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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