EXCEL宏

shli226 2003-08-17 01:02:11
本人编了一个宏,用于自动隐藏非蓝色单元格的公式。其执行过程为:从“A6”单元格开始,如果该单元格字体颜色是“蓝色”,则取消该单元格公式“隐藏”,否则,“隐藏”单元格公式……。依次执行“A7、A8、……A100”。从这个过程可知,这个宏仅解决了A列,现在想解决整个工作表,即在“A列”循环完成后,自动跳到B列……N列。请问各位高手如何解决?还有我这段宏是不是显得很笨哦?有没有更好的解决循环问题的办法?

宏如下:

Sub 取消隐藏公式()

Range("A6").Select
For rwIndex = 6 To 100
For colIndex = 1 To 1
With Cells(rwIndex, colIndex)
If Selection.Font.ColorIndex = 5 Then Selection.FormulaHidden =
False
If Selection.Font.ColorIndex <> 5 Then Selection.FormulaHidden=
True
Selection.Offset(1, 0).Range("A1").Select
End With
Next colIndex
Next rwIndex
Range("A1").Select

End Sub
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
大雄 2003-08-24
  • 打赏
  • 举报
回复
rng是自已定义的变量,你可以随便改。
Range("A6", Cells.SpecialCells(xlCellTypeLastCell)) 所表达的范围就是你所理解的。
当然是xlCellTypeLastCell聪明,因为它会随着你数据的范围自动扩大搜索区域。


大雄 2003-08-19
  • 打赏
  • 举报
回复
Sub 取消隐藏公式1()
For Each rng In Range("A6", Cells.SpecialCells(xlCellTypeLastCell))
If rng.Font.ColorIndex = 5 Then rng.FormulaHidden = False
If rng.Font.ColorIndex = 5 Then rng.Locked = False
If rng.Font.ColorIndex <> 5 Then rng.FormulaHidden = True
If rng.Font.ColorIndex <> 5 Then rng.Locked = True
Next
Range("A1").Select
End Sub


说明:xlCellTypeLastCell表示已用区域的最后一个单元格,当你不小心修改了A6:N100之外的单元格时,其范围就会自动扩大。如果你不想修改A6:N100之下的单元格就要用实际的行列数作循环数值范围限制,但这样做没数据的地方它也要检查一下,这方面就不如xlCellTypeLastCell聪明。
shli226 2003-08-19
  • 打赏
  • 举报
回复
还有大雄说不如xlCellTypeLastCell聪明,意思是比哪个聪明哦?
shli226 2003-08-19
  • 打赏
  • 举报
回复
感谢大雄,感谢wl3721,问题得到圆满解决。二位的支持使我感到了党的温暖
大雄的解决方案完全如我意,只是本人愚笨,有点知其然不知其所以然。因为我工作中对表格循环用得很多,在此还想请教大雄,这样的循环执行过程是怎样的?rng 是什么函数?
Range("A6", Cells.SpecialCells(xlCellTypeLastCell)) 表达了怎样的范围?
我改成
Range("A1", Cells.SpecialCells(xlCellTypeLastCell)) 是不是表示A1到使用单元格的结束这样的范围?

对不起啊,大雄先生,我是吃了蛋非得要问蛋是怎么来的咯:)
shli226 2003-08-18
  • 打赏
  • 举报
回复
wl3721:是不是这样的?但运行时显示“编译错误参数不可选”啊!

Sub 取消隐藏公式1()

Range("a1").Select
For Each rng In Range("A1", Range("A1").End.SpecialCells(xlCellTypeLastCell))
With Cells(rwIndex, colIndex)
If rng.ColorIndex = 5 Then rng.FormulaHidden = False
If rng.Font.ColorIndex <> 5 Then rng.FormulaHidden = True
Selection.Offset(1, 0).Range("A1").Select
End With
Next
Range("A1").Select
End Sub

如果要增加取消锁定呢?是不是改为:

Sub 取消隐藏公式1()

Range("a1").Select
For Each rng In Range("A1", Range("A1").End.SpecialCells(xlCellTypeLastCell))
With Cells(rwIndex, colIndex)
If rng.ColorIndex = 5 Then rng.FormulaHidden = False
If rng.ColorIndex = 5 Then rng.Locked = False
If rng.Font.ColorIndex <> 5 Then rng.FormulaHidden = True
If rng.Font.ColorIndex <> 5 Then rng.Locked = False
Selection.Offset(1, 0).Range("A1").Select
End With
Next
Range("A1").Select
End Sub
hot.wind 2003-08-17
  • 打赏
  • 举报
回复
把外循环改为for each rng in range("A1",range("A1").End.SpecialCells(xlCellTypeLastCell))
If rng.ColorIndex = 5 Then rng.FormulaHidden =
False
If rng.Font.ColorIndex <> 5 Then rng.FormulaHidden=
True
next

6,216

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office应用
社区管理员
  • Microsoft Office应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧