ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 一段简单代码中的错误分析

一段简单代码中的错误分析

作者:绿色风 分类: 时间:2022-08-18 浏览:75
楼主
raulerini
题目: A1单元格设置为正方形

原代码1:
  1. [A1].width=[A1].height

错误描述:运行时错误'1004':不能设置类Rangewidth 属性
分析和说明:上面这段代码简则简矣,直接将单元格的宽度等于高度,孰料却出现了我们最不希望见到的错误。仔细分析错误的原因,通过查看width属性和height属性的帮助,发现这两个属性都是只读的,这下就知道错在哪里了。
更正错误:range对象有另外两个属性,columnwidthrowheight,这两个属性是可读写的,设置行高和列宽的时候需要用到的是这两个属性(关于heightrowheight的区别,大家自己去看帮助)

原代码2:
  1. [A1].columnwidth=[A1].rowheight

错误描述:设置的A1单元格根本不是正方形!
分析和说明:EXCEL中行高和列宽使用的单位是不一致的。Excel行高所使用单位为磅(1cm=28.6磅),列宽使用单位为1/10英寸(既1个单位为2.54mm)。
更正错误:需要对行高和列宽的度量单位进行统一,VBA中有一个inchestopoint方法可以对度量单位进行转换

原代码3:
  1. [A1].rowheight=application.inchestopoint([A1].columnwidth/10)

错误描述:粗看上去好像是一个正方形,但实际上并不那么“正”,大家可以插入一个矩形看看,我测试时,插入的矩形高2.12,宽1.91。只是个伪正方形。
分析和说明:直接将columnwidth/10然后换算成磅不靠谱,inchestopoint方法不给力!

那么,这道题如何能简洁而准确的解出来呢?
让我们打开“EXCEL帮助”这本宝典,仔细的查看range的相关属性。最后,我们发现,width属性虽然是只读的,但与columnwidth不同,其是以磅为单位的!这无疑让我们豁然开朗,答案也呼之欲出:
正确解法:
  1. [A1].RowHeight = [A1].Width

这样得出来的A1单元格就是一个真真正正的正方形!

结论:当写代码碰到各种错误的时候,要仔细分析错误的原因,并且善于查找和利用各种信息,所谓内事不决看帮助,外事不决问百度也。
2楼
biaotiger1

思路更重要,这种解决问题的思路值得学习。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap