Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 兰色幻想

VBA一次选定所有未锁定单元格

[复制链接]
发表于 2008-2-19 20:43 | 显示全部楼层

Sub tt()<br/>牋 Dim x As Range, y As Range<br/>牋 For Each y In Range("A1:iv65536")<br/>牋牋 If y.Locked = False Then If x Is Nothing Then Set x = y Else Set x = Union(x, y)<br/>?Next<br/>?x.Select<br/>End Sub
回复

使用道具 举报

 楼主| 发表于 2008-2-19 20:46 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>guideming</i>在2008-2-19 20:43:00的发言:</b><br/>Sub tt()<br/>牋 Dim x As Range, y As Range<br/>牋 For Each y In Range("A1:iv65536")<br/>牋牋 If y.Locked = False Then If x Is Nothing Then Set x = y Else Set x = Union(x, y)<br/>?Next<br/>?x.Select<br/>End Sub</div><p>循环太多了 </p><p>另:能放在一行就放在一行,不适合放在一行的还是分开放好些。</p>
回复

使用道具 举报

发表于 2008-2-19 20:48 | 显示全部楼层

Sub tt()<br/>牋 Dim x As Range, y As Range<br/>牋 For Each y In Range("A1:iv65536")<br/>牋牋 If y.Locked = False Then If x Is Nothing Then Set x = y Else Set x = Union(x, y)<br/>?Next<br/>?x.Select<br/>End Sub<br/>
回复

使用道具 举报

 楼主| 发表于 2008-2-19 20:52 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>guideming</i>在2008-2-19 20:48:00的发言:</b><br/>Sub tt()<br/>牋 Dim x As Range, y As Range<br/>牋 For Each y In Range("A1:iv65536")<br/>牋牋 If y.Locked = False Then If x Is Nothing Then Set x = y Else Set x = Union(x, y)<br/>?Next<br/>?x.Select<br/>End Sub<br/></div><p>还是一样的问题啊</p>
回复

使用道具 举报

发表于 2008-2-19 21:04 | 显示全部楼层

Sub tt()<br/>?Dim x As Range, y As Range<br/>?For Each y In activesheet.usedrange<br/>牋 If y.Locked = False Then If x Is Nothing Then Set x = y Else Set x = Union(x, y)<br/>?Next<br/>?x.Select<br/>End Sub
回复

使用道具 举报

发表于 2008-2-19 21:06 | 显示全部楼层

<p></p><p>来个另类的方法,速度相对来说应该是不错的</p><p>&nbsp;</p><p>Sub test()<br/>&nbsp;&nbsp;&nbsp; Dim vUnlocked As Variant<br/>&nbsp;&nbsp;&nbsp; Dim rngUnlocked As Range</p><p>&nbsp;&nbsp;&nbsp; With Sheet1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vUnlocked = .UsedRange<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .UsedRange.ClearContents<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Protect<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .EnableSelection = xlUnlockedCells<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .UsedRange.Value = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Unprotect<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set rngUnlocked = .UsedRange.SpecialCells(xlCellTypeConstants)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .UsedRange = vUnlocked<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rngUnlocked.Select<br/>&nbsp;&nbsp;&nbsp; End With<br/>End Sub</p><p><br/>&nbsp;</p>
[此贴子已经被作者于2008-2-19 21:05:55编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2008-2-19 21:08 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>guideming</i>在2008-2-19 21:04:00的发言:</b><br/>Sub tt()<br/>?Dim x As Range, y As Range<br/>?For Each y In activesheet.usedrange<br/>牋 If y.Locked = False Then If x Is Nothing Then Set x = y Else Set x = Union(x, y)<br/>?Next<br/>?x.Select<br/>End Sub</div><p>你的代码还是排这样更好些, 容易让人看懂. [em05] </p><p>Sub tt()<br/>Dim x As Range, y As Range<br/>For Each y In ActiveSheet.UsedRange<br/>&nbsp;&nbsp;&nbsp; If y.Locked = False Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If x Is Nothing Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set x = y<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set x = Union(x, y)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;Next<br/>&nbsp;x.Select<br/>End Sub</p>
回复

使用道具 举报

 楼主| 发表于 2008-2-19 21:19 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>element</i>在2008-2-19 21:06:00的发言:</b><br/><p></p><p>来个另类的方法,速度相对来说应该是不错的</p><p>&nbsp;</p><p>Sub test()<br/>&nbsp;&nbsp;&nbsp; Dim vUnlocked As Variant<br/>&nbsp;&nbsp;&nbsp; Dim rngUnlocked As Range</p><p>&nbsp;&nbsp;&nbsp; With Sheet1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vUnlocked = .UsedRange<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .UsedRange.ClearContents<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Protect<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .EnableSelection = xlUnlockedCells<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .UsedRange.Value = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Unprotect<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set rngUnlocked = .UsedRange.SpecialCells(xlCellTypeConstants)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .UsedRange = vUnlocked<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rngUnlocked.Select<br/>&nbsp;&nbsp;&nbsp; End With<br/>End Sub</p><p><br/>&nbsp;</p><br/></div><p></p><p>&nbsp;</p><p>运行不成功, 提示错误 ,试图修改受保护的工作表</p>
回复

使用道具 举报

发表于 2008-2-19 21:22 | 显示全部楼层

To, 兰色<br/>看看是否选择了【遇到未处理的错误时中断】这个选项<br/>在【VBE】【选项】【通用】【错误捕捉】下<br/>
回复

使用道具 举报

 楼主| 发表于 2008-2-19 21:24 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>element</i>在2008-2-19 21:22:00的发言:</b><br/>To, 兰色<br/>看看是否选择了【遇到未处理的错误时中断】这个选项<br/>在【VBE】【选项】【通用】【错误捕捉】下<br/></div><p></p>有选取
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-16 08:41 , Processed in 0.179386 second(s), 1 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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