ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 228|回复: 10

[已解决] 代码修改

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-23 08:06 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 天地一相 于 2024-5-23 10:16 编辑

感谢帮助。我有一段对显示单元格写序号的代码,单独使用正常。若在循环中直接调用该代码的宏名,结果也正常。但我若把代码直接放进循环里,做相应调整改动,序号数量就不对了。百思不得其解,特此求助。
问题我解决了:我发现写序号时N并不等于C2单元格的值时就提前退出了。我新设置了中间变量M,让M=RANGE("C2").VALUE.然后后面修改为N=M时结束序号写入。结果就正确了。虽然是对了,但我还是不知道为什么会这样。知道的给解惑下呗。
  1. 新写循环部分
  2. For i = 3 To 7
  3.   With ThisWorkbook.Worksheets(i)

  4. end with
  5. next i

  6. 序号代码:
  7. ActiveSheet.Range("A4:W" & r).AutoFilter Field:=21, Criteria1:=RGB(0, 176, 240), Operator:=xlFilterFontColor
  8.     ActiveSheet.Range("A4:W" & r).AutoFilter Field:=15, Criteria1:=">=" & y, Operator:=xlAnd
  9.     Range("C2").Value = Application.WorksheetFunction.CountA(ActiveSheet.Range("O5:O" & r).SpecialCells(xlCellTypeVisible))
  10.     If Range("C2").Value = 0 Then Exit Sub
  11.    
  12.     With ActiveSheet
  13.      
  14.      If .FilterMode = False Then Exit Sub
  15.       
  16.       With Range("D5:D" & r)
  17.           For Each a In .SpecialCells(xlCellTypeVisible)
  18.               n = n + 1
  19.               a = n
  20.               If n = Range("C2").Value Then
  21.                  Exit For
  22.               End If
  23.           Next
  24.       End With

  25.     End With
复制代码



TA的精华主题

TA的得分主题

发表于 2024-5-23 08:17 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-23 08:56 | 显示全部楼层
longwin 发表于 2024-5-23 08:17
把这些去掉试试:

不对,这样的修改我都会的。而且也不是关键,就是不去掉,最多属于重复语句,也不影响操作。

TA的精华主题

TA的得分主题

发表于 2024-5-23 09:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
表循环时,表要先激活一下,在call 序号代码模块 前面加一句代码:
Worksheets(i).Activate

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-23 09:35 | 显示全部楼层
ykcbf1100 发表于 2024-5-23 09:01
表循环时,表要先激活一下,在call 序号代码模块 前面加一句代码:
Worksheets(i).Activate

若我直接调用宏名,无需激活,结果也是对的。我只是想直接把代码嵌入循环中,怎么修改结果都不对。序号数量大幅减少了。

TA的精华主题

TA的得分主题

发表于 2024-5-23 09:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
a.value=n 另外With Range("D5:D" & r)最好Range前面加个"."

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-23 09:55 | 显示全部楼层
ssfx1982 发表于 2024-5-23 09:50
a.value=n 另外With Range("D5:D" & r)最好Range前面加个"."

不是这个问题。我实际改成的样子就是这样的。我逐步看了,当 n 实际并不等于C2的值时,就退出序号循环了。

TA的精华主题

TA的得分主题

发表于 2024-5-23 10:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
' 定义变量
Dim ws As Worksheet
Dim r As Long
Dim n As Long

' 假设r是行数,需要在代码其他部分定义
' 假设n用于计数,初始值为0

' 循环遍历工作表,从第3个工作表到第7个工作表
For i = 3 To 7
    Set ws = ThisWorkbook.Worksheets(i) ' 设置当前工作表
   
    ' 应用自动筛选
    With ws
        .Range("A4:W" & r).AutoFilter Field:=21, Criteria1:=RGB(0, 176, 240), Operator:=xlFilterFontColor
        .Range("A4:W" & r).AutoFilter Field:=15, Criteria1:=">=" & y, Operator:=xlAnd
        
        ' 计算可见单元格的数量
        n = Application.WorksheetFunction.CountA(.Range("O5:O" & r).SpecialCells(xlCellTypeVisible))
        
        ' 如果没有可见单元格,则退出子程序
        If n = 0 Then Exit Sub
    End With
   
    ' 如果筛选模式未开启,则退出子程序
    If ws.FilterMode = False Then Exit Sub
   
    ' 遍历第D列的可见单元格
    With ws.Range("D5:D" & r)
        For Each a In .SpecialCells(xlCellTypeVisible)
            n = n + 1
            a.Value = n ' 将计数n赋值给单元格a
            If n = ws.Range("C2").Value Then
                Exit For ' 如果计数n等于C2单元格的值,则退出循环
            End If
        Next a
    End With
   
Next i

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-23 10:53 | 显示全部楼层
ttiemike 发表于 2024-5-23 10:06
' 定义变量
Dim ws As Worksheet
Dim r As Long

谢谢,请看我主贴。

TA的精华主题

TA的得分主题

发表于 2024-5-23 11:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这样试试:多次循环N是不是需要在进入循环之前重置一下数值?
image.png

评分

1

查看全部评分

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-16 10:05 , Processed in 0.050258 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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