一段代码运行后不能完全删除需要删除的东西,求助攻!
excel吧
全部回复
仅看楼主
level 5
ALL_56835 楼主
图片上,实发工资项后有挺多的空列在打印预览内是显示的。这些列列宽都是20个像素。
弄了段代码:
For i = 1 To 100
If Columns(i).Width < 25 Then
Columns(i).Select
Columns(i).Delete
End If
Next
这段代码倒是能删除这些空列,但是删除不完全。运行完毕后只能删除一部分,还是有一部分会保留。
请问这个问题怎么破???
2015年07月17日 08点07分 1
level 4
楼主只是不想把空列打印出来么?
2015年07月17日 09点07分 2
level 4
那样的话不用代码也可以的
2015年07月17日 09点07分 3
在表格上还是想把空列删除掉,但是能在打印时不打印改如何做呢?请指教[太开心]
2015年07月17日 09点07分
@ALL_56835 我不明白你说的空列删掉是什么意思。选择打印预览,分页预览,把蓝色的线调到你要打印的区域就可以了;或者在表格的右下角也有一个打印预览的图标,点一下调整就可以了。
2015年07月17日 09点07分
回复
an_��V
: 。。。我有几百个表格啊!!!我要死的 [狂汗]
2015年07月17日 09点07分
level 4
那我也不知道了。。
2015年07月17日 09点07分 4
level 9
Sub test()
For n = 1 To Sheets.Count
With Sheets(n)
For i = .UsedRange.Columns.Count To 1 Step -1
If .Columns(i).Width < 25 Then
.Columns(i).Delete
End If
Next i
End With
Next n
MsgBox ("已将所有工作表中列宽25以下的列删除")
End Sub
2015年07月17日 09点07分 5
如果还是删不完,请把.UsedRange.Columns.Count中的".USEDRANGE"删去
2015年07月17日 09点07分
这串代码的功能是一次性把所有工作表中列宽低于25的列全部删除,25可以根据情况改成其它数
2015年07月17日 09点07分
回复
��Ӱ�㺮
: 灰常感谢,刚刚在外面回到家。我周一回办公室后试试。谢谢了!![大拇指]
2015年07月17日 15点07分
回复
��Ӱ�㺮
: 很有用,谢谢了。。解决了老大难的问题。[太开心]
2015年07月21日 01点07分
level 9
For i = 1 To 100
If Columns(i).Width < 25 Then
Columns(i).Select
Columns(i).Delete
End If
Next
这是楼主的代码,这个代码本身就有问题,一般来说,循环删除的代码都应该写成递减的(而不是递增),把
1 to 100 改成
100 to 1 step -1
这样也可以解决问题。
2015年07月17日 09点07分 6
Columns(i).Select这句代码是多余的,一点用都没有,直接删去
2015年07月17日 09点07分
解释一下递增不能删完的原因:比如从20到30是要删的列,当20列删了以后,21列就变成了20列,继续循环时,已经跳到了21列,所以新的20列不会被删除,后面的列以此类推。 递减则不会出现这种情况。
2015年07月21日 11点07分
回复
ijij��
: 谢谢
2015年07月21日 15点07分
回复
ijij��
:论效率的话,这段代码效率并不高。优化方案如下:关闭屏幕更新,使用求并集的方式获取所有符合条件的区域,统一删除,恢复屏幕更新。这样不存在顺序问题,运行速度至少提高三倍以上,不过要多打点字。
2015年07月21日 23点07分
level 13
Sub fdfd()
For i = 100 To 1 Step -1
If Columns(i).Width < 15 Then Columns(i).Delete
Next
End Sub
倒着来。。。。。好象来晚了
2015年07月21日 12点07分 7
谢谢了 [玫瑰]
2015年07月21日 15点07分
1