excel的365个常见问题答疑答案.docx
- 文档编号:12664367
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:70
- 大小:53.08KB
excel的365个常见问题答疑答案.docx
《excel的365个常见问题答疑答案.docx》由会员分享,可在线阅读,更多相关《excel的365个常见问题答疑答案.docx(70页珍藏版)》请在冰点文库上搜索。
excel的365个常见问题答疑答案
第23章365个常见问题答疑
问题1:
VBA能开发EXE格式的安装软件吗?
答:
不能,但是可以把VBA代码复制到VB中,封装成DLL文件再配合WINRAR或者InnoSetup等软件加工成EXE安装程序。
问题2:
代码中所用的变量是否必须声明其数据类型?
答:
不声明变量的数据类型也可使用变量。
不过在某些情况下不声明变量以及不指定数据类型将造成程序运行速度变慢,甚至可能得到错误的运算结果。
建议所用任意变量前都正确地指定变量的数据类型。
问题3:
Dim甲,乙,丙asbyte
这句代码能声明三个byte类型的变量吗?
答:
变量丙是byte类型,而甲和乙那么是默认的Variant型。
假设要声明三个byte类型的变量需采用以下代码:
Dim甲asbyte,乙asbyte,丙asbyte
问题4:
为什么【VisualBasic】和【录制宏】菜单呈灰色禁用状态?
答:
安装了绿色版Office,该版本删除了VBA功能。
可以重装完好版Office,以补充VBA模块。
问题5:
为什么按【F8】键调试代码会失败,但是单击菜单【逐语句】却能进入调试状态?
答:
最可能的原因是快捷键【F8】被别的软件占用。
“有道〞翻译软件在默认设置下就会占用该键。
问题6:
翻开VBE界面,看不到工程资源管理器,如何调出来该对话框?
答:
单击菜单【视图】\【工程资源管理器】即可调用,或者使用快捷键【Ctrl+r】也行。
问题7:
DimFileSysAsFileSystemObject
为什么运行此声明语句提示“用户定义类型未定义〞?
答:
手工引用“scrrun.dll〞文件后再执行此语句即可。
假设电脑中不存在该文件可以在同事电脑中复制过来置于system32目录中,然后使用以下代码注册,注册后才可以添加引用:
问题8:
如何实现FSO对象的后期绑定?
答:
在“引用〞对话框中引用DLL文件属于前期绑定,使用CreateObject创立对象实例那么属于后期绑定。
代码如下:
CreateObject("Scripting.FileSystemObject")
问题9:
如何获取当前用户的【发送到】文件夹?
答:
用VBA调用脚本语言即可,代码如下:
CreateObject("WScript.Shell").SpecialFolders("SendTo")
问题10:
如何获取收藏夹途径?
答:
CreateObject("WScript.Shell").SpecialFolders("Favorites")
问题11:
为什么VBE中的菜单【视图】→【工具箱】是灰色的?
答:
插入一个窗体且选中窗体后才会显示工具箱,所以未显示工具箱时需要执行两个步骤:
先插入一个窗体;然后选择窗体。
问题12:
如何对VBA代码加密?
答:
加密的方式有很多,最简单的方法是VBA自带的保护工程,操作方法为:
在VBE界面中单击菜单【工具】→【VBAProjectn属性】→【保护】,然后录入密码,且勾选“查看时锁定工程〞。
问题13:
为什么有的属性在常数列表中看不到?
答:
VBA具有局部隐藏属性,需要进入对象阅读器后单击右键菜单【显示隐含成员】才可以显示。
问题14:
如何查询Excel2021相对2007有哪些新增内容?
答:
开启Excel,进入VBE界面后按下F1键,然后选择窗口中的“Excel2021开发人员参考〞→“新增内容〞。
问题15:
工作簿事件相关的代码是否Excel2003、2007和2021通用?
答:
Excel2003和2007可以通用,但Excel2021新增了10多个新的事件,这些事件不支持Excel2003和2007。
问题16:
是否只用低版本的方法、事件、属性就可以确保代码通用?
答:
虽然大局部情况下确实如此,但鉴于有些属性或者方法在高版本中被删除了,所以不使用新增功能也无法确保代码总是通用的。
例如FileSearch属性。
问题17:
Excel2021相对2007在VBA方面的变化大吗?
答:
不大,所有语法不变,只是新增了一些事件、对象、属性和方法。
问题18:
VBA可以实现不翻开工作簿而取其中的值吗?
答:
可以,本书中有相关的自定义函数实现。
但是翻开工作簿后再取值更灵敏,更方便。
问题19:
Excel中的所有操作都可以录制吗?
答:
90%以上都可以,少局部不支持录制宏。
例如按格式查找、屏幕截图、修改批注的边框尺寸等等。
问题20:
单元格的颜色属性Color和ColorIndex是一样的吗?
答:
在Excel2021中,前者可以产生43亿种32位颜色,而后者只能产生56种索引色,前者比后者更强大,但后者比前者兼容性好。
问题21:
一样公式,Excel2021会不会比2003中计算更快?
答:
Excel2021支持多线程计算,假设您使用多核CPU的话,一定比Excel2003的运算速度快。
问题22:
如何使用VBA判断单元格是否含有超链接?
答:
根据单元格的链接数量来判断,数量为0表示无超链接,代码如下:
MsgBoxIIf(Range("A1").Hyperlinks.Count>0,"有","没有")
问题23:
如何获得一个区域内的已用区域地址?
答:
利用Intersect取选区和已用区域的交集即可,代码如下:
onerrorresumenext
Intersect(ActiveSheet.UsedRange,Selection).Address
问题24:
按地址传递〔byref〕和按值传递〔byval〕区别是什么?
答:
按值传递时,参数的值不产生变化;按地址传递时,该参数值可以修改。
问题25:
如何用VBA翻开与陌生人的QQ聊天对话框?
答:
通过IE阅读器可以直接开启与非好友聊天的对话框,所以用Shell调用IE地址即可。
代码如下:
"""
问题26:
如何判断当前操作系统是否为繁体中文?
答:
PrivateDeclareFunctionGetSystemDefaultLCIDLib"kernel32"()AsLong'调用API函数
MsgBox(GetSystemDefaultLCID=&H404)'值为&H404表示繁体中文系统
问题27:
VBA可以制止Excel内部的保存或者另存功能吗?
答:
可以做到,不过禁用宏后就可以继续保存或者另存了。
问题28:
可以实现提取姓名的汉语拼音首字母吗?
答:
可以实现,但不确保准确度,因为存在很多同音字。
所以站在准确度的方位理解,只能说无法实现。
问题29:
能使自动交换只对一个区域生效吗?
答:
内置的自动交换功能对所有工作表的所有区域都生效,无法改造,但可以通过工作表事件实现某个区域的自定义交换。
问题30:
如何获取application.inputbox所引用的单元格所在工作表名称?
答:
Onerrorresumenext
问题31:
ExitSub等于end吗?
答:
有时相等,有时不等。
执行end时会释放所有变量的值,ExitSub仅仅释放私有变量的值。
另外,在VBA中可以使用ExitSub等于end,但是用VB封装VBA代码时不能使用End,VB不支持End。
问题32:
利用Public声明的变量就是全局变量吗?
所有模块都可以引用?
答:
不一定,必须在标准模块中声明,且置于所有过程之上。
问题33:
如何用VBA实现缩小功能区?
答:
VBA并不提供相关的方法或者属性,但是Excel允许使用【Ctrl+F1】组合键缩小功能区,所以利用SendKeys发送键盘命令即可。
Application.SendKeys"^{f1}"
问题34:
用cells.count计算单元格数量会出错,如何修改代码呢?
答:
此代码只在xlsx和xlsm格式的文件中会出错,兼容形式下不会出错。
利用转换函数转换被
问题35:
OptionPrivateModule是做什么的?
答:
限制本模块中的代码不能被其它模块调用,即把过程强迫转换为私有。
问题36:
Function过程的代码如何逐语句调试?
答:
通过Sub过程调用该Function过程,然后对Sub过程逐语句调试。
也可以将Funtion改装成无参数的SUB过程,调试完成后再复原为Function过程。
假设Function过程有参数,那么改装成Sub过程时使用变量交换参数即可。
问题37:
录制在单元格输入公式的宏时,产生的是R1C1款式的公式,如何转换成A1引用款式?
答:
MsgBoxApplication.ConvertFormula("=RC[1]*RC[2]",xlR1C1,xlA1)
问题38:
AfterSave事件的参数Success是什么意思?
答:
代表是否保存成功。
假设在保存对话框中点“取消〞那么返回False。
问题39:
如何判断“VisualBasicforApplicaton〞是否拼写正确?
答:
CheckSpelling方法用于拼写检查,代码如下:
MsgBoxApplication.CheckSpelling("VisualBasicforApplicaton")
问题40:
如何实现“工程不可查看〞?
答:
将工作簿共享即可。
问题41:
chr(10)和chr(13)有什么分别?
答:
前者是回车符,后者是换行符,显示在msgbox对话框中时效果一样,但假设显示在单元格中那么不同,后者没有换行效果。
问题42:
VBA可以翻开资管源管理器中的文件夹吗?
答:
Shell"explorer.exed:
\123",vbMaximizedFocus
其中参数vbMaximizedFocus表示翻开文件夹后窗口最大化。
问题43:
如何删除选区中的所有空格?
答:
Selection.ReplaceWhat:
="",Replacement:
="",LookAt:
=xlPart
注意LookAt参数要赋值为xlPart,表示局部匹配。
问题44:
VBA可以读写注册表中任意键值吗?
答:
VBA自带的Getsetting和Savesetting只能读写指定途径的键值,但VBA调用脚本语言来读写注册表就可以操作任意键值。
问题45:
ontime如何调用具有参数的过程?
例如
Suba(b)
MsgBoxb
EndSub
答:
将过程名与参数一起作为OnTime的参数,过程的参数要加引号,代码如下:
Application.OnTimeNow+TimeValue("0:
0:
1"),"'a""你好""'"
问题46:
可以制止用户插入新表吗?
答:
保护工作簿可以实现,在Workbook_NewSheet事件中自动删除工作表也可以实现。
问题47:
如何中途阻止运行过程?
答:
使用快捷键【Ctrl+Break】或者按住【ESC】键不松开。
问题48:
可以屏弊内置的快捷键吗?
答:
用OnKey即可,例如禁用【Ctrl+c】用以下代码:
Application.OnKey"^c",""
问题49:
答:
前者表示单元格显示的文本,后者为单元格中真正的值,自定义数字格式后两者会有较大分别。
问题50:
如何一键删除工作表中所有图形对象?
答:
此代码可以录制宏产生。
问题51:
VBA可以修改系统日期吗?
答:
直接对Date赋值即可,代码如下:
Date="2021-4-30"
问题52:
如何将工作簿另存到D盘中,且工作簿名由A1单元格的值决定。
答:
使用Workbook.SaveAs方法。
ActiveWorkbook.SaveAs"d:
\"&[a1].Value,xlWorkbookDefault
问题53:
如何禁用单元格右键菜单?
答:
将Cancel参数赋值为True即可。
PrivateSubWorkbook_SheetBeforeRightClick(ByValShAsObject,ByValTargetAsRange,CancelAsBoolean)
Cancel=True
EndSub
问题54:
可以制止双击修改单元格吗?
答:
将Cancel参数赋值为True即可。
PrivateSubWorkbook_SheetBeforeDoubleClick(ByValShAsObject,ByValTargetAsRange,CancelAsBoolean)
Cancel=True
EndSub
问题55:
如何一次性去除工作表中所有公式结果为错误值的单元格?
答:
OnErrorResumeNext
Cells.SpecialCells(xlCellTypeFormulas,16)=""
问题56:
Evaluate方法可以将任意表达式进展转换计算吗?
答:
不行,它有参数长度不超过256的限制。
问题57:
可以为自定义函数添加每一个参数的说明吗?
中:
Excel2021可以,通过MacroOptions的最后一个参数实现。
Excel2003和2007的MacroOptions只能添加函数说明,不能对参数添加说明。
问题58:
如何生成包括第X页共Y页的页眉?
答:
在PageSetup对象中使用“第&P页共&N页〞即可,P代表当前页,N代码总数。
问题59:
如何判断当前工作表处于挑选状态?
答:
假设结果为True那么表示处于挑选状态。
问题60:
可以用一句代码实现合并A1:
A10的值吗?
答:
Join能将数组的值合并成一个字符串,但不支持区域作参数,所以使用工作表函数Transpose将参数转换成数组后再配合Join即可实现:
MsgBoxJoin(WorksheetFunction.Transpose([a1:
a10]),"")
问题61:
如何一键删除超链接?
答:
问题62:
可以用一句代码实现对二维数组变量赋值吗?
答:
公式中的{}可以创立二维数组,添加[]后即可使其在VBA中使用。
Arr=[{1,2,3;4,5,6}]
问题63:
如何计算“D:
\工作〞文件夹的大小?
VBA的FileLen只能计算文件大小,使用FSO对象的GetFolder才能获取文件夹的信息,代码如下:
CreateObject("scripting.filesystemobject").GetFolder("D:
\工作").Size/1024&"KB"
问题64:
不用循环能计算1到100之间自然数之和吗?
答:
直接调用数组公式即可,代码如下:
MsgBox[sum(row(1:
100))]
问题65:
可以一句代码实现向下填充所有空白单元格吗?
答:
Onerrorresumenext'防止不存在空白单元格时出错
peBlanks).FormulaR1C1="=R[-1]C"
问题66:
什么是溢出错误?
答:
对变量赋值时,值大于它的有效范围,例如对Byte型的变量赋值300。
问题67:
下标越界是什么意思?
答:
参数值超过了参数的上下限。
例如工作表数量为3时,用代码访问第4个工作表,或者访问的对象不存在〔例如写错了工作表名称、工作簿名称、图片名称等等〕。
问题68:
如何制止合并单元格和删除工作表时弹出提示?
答:
在合并单元格或者删除工作表的代码前加“Application.DisplayAlerts=False〞;在其后加“Application.DisplayAlerts=True〞
问题69:
如何制止用户中断程序的运行过程?
答:
Application.EnableCancelKey=xlDisabled
问题70:
可以在较单词时不区分大小写吗?
答:
在模块的顶部写入以下代码:
OptionCompareText
问题71:
可以让数组的默认下标为1吗?
答:
在模块的顶部写入以下代码:
OptionBase1
问题72:
可以用VBA翻开控制面板吗?
答:
a=Shell("Control.exe",vbMaximezedFocus)
或者
CreateObject("wscript.shell").Run"Control.exe",3
问题73:
如何获得“d:
\123.xlsm〞的创立时间?
答:
FileDateTime只能获取文件最后一次修改的时间,获取创立时间要用FSO对象的DateCreated属性实现。
MsgBoxCreateObject("Scripting.FileSystemObject").GetFile("d:
\123.xlsm").DateCreated
问题74:
动态变量和静态变量的区别何在?
答:
动态变量在完毕过程时会释放变量值,静态变量在关闭工作簿时或者使用End时才释放变量值。
问题75:
如何防止程序因出错而弹出错误对话框?
答:
使用防错语句:
Onerrorresumenext
问题76:
批量删除或者插入行时,如何防止屏幕闪动?
答:
使用“Application.ScreenUpdating=False〞
但在程序完毕时需要恢复此设置。
问题77:
运行窗体时可以只显示窗体,看不到Excel界面吗?
答:
在运行窗体前参加以下代码:
Application.Visible=False
再将“Application.Visible=True〞代码放在窗体的关闭事件中,使Excel界面复原为显示状态。
问题78:
假设隐藏所有批注,红色箭头也能一起隐藏吗?
答:
Application.DisplayCommentIndicator=xlNoIndicator
问题79:
在对话框中录入字符串时,可以显示为星号吗?
答:
使用窗体中的文字框时可以。
将其PasswordChar属性设置为True即可,inputbox对话框不可以,除非调用API函数产生一个inputbox类似的对话框。
问题80:
如何获得Excel的安装途径?
答:
问题81:
如何翻开Windows自带的计算器?
答:
Shell"CALC",vbMaximizedFocus
或者
CreateObject("wscript.shell").Run"CALC",3
问题82:
如何获取活动单元格的批注文本?
答:
假设活动单元格没有批注那么会出错,所以需要配合防错语句使用。
问题83:
如何在状态栏显示今天星期几?
答:
Application.StatusBar=Format(Date,"AAAA")
其中AAAA表示中文的星期,假设需要英文的星期需要改用“DDDD〞。
问题84:
Worksheet_Change事件中写入“Target=Evaluate(Target.Value)〞用于转换表达式,为什么有时会出错?
答:
Target代表当前正在录入值的所有单元格,假设用户在一个区域中录入就会出错,可以配合循环语句使用,逐一进展转换。
当然Change事件还需要添加防止递归的代码。
还有一种情况也会出错:
单元格的字符长度超过256。
问题85:
什么是递归?
答:
程序调用自身反复运算,类似于工作表中公式的迭代计算。
问题86:
在SheetChange事件中,如何防止溢出堆栈空间?
答:
Application.EnableEvents=False
但在过程完毕时需要复原设置。
问题87:
如何获得已用区域最后一行的行号?
答:
.Count-1
但是已用区域的最后一行可能是空白行。
问题88:
当前区域和已用区域如何区分?
答:
当前区域指以空行与空列的组合为边界的包含活动单元格的区域,而已用区域是工作表中所使用的区域,它与当前区域有时重合,有时不重合。
问题89:
什么是数组区域?
答:
区域数组公式所占用的区域。
录入区域数组公式时,需要选择一个区域,然后录入公式并再按【Ctrl+Shift+Enter】组合键完毕。
问题90:
Range.End(3)中的3代表什么?
答:
xlUp常量,表示向上。
问题91:
如何获取第一行最后一个非空单元格?
答:
Cells(1,Columns.Count).End(xlToLeft)
问题92:
如何判断活开工作表是否为空表?
答:
IsEmpty能判断对象是否已经初始化。
假设返回值为True那么表示当前表是空表,代码如下:
MsgBoxIIf(IsEmpty(ActiveSheet.UsedRange),"空表","非空表")
问题93:
后返回值为是Range型?
答:
最后一个参数未使用8。
问题94:
自定义函数只能返回值,不能改变单元格的值吗?
答:
当然不是,既可以改变单元格的值,也可以删除单元格的值,还可以改变单元格的批注。
使用Replace可以修改任意单元格的值。
问题95:
Format函数和工作表函数TEXT一样的功能吗?
答:
大多数功能一样,少数不同。
TEXT的功能更强大,工作中可以调用TEXT代替Format使用。
问题96:
VBA能定制Excel启动画面吗?
答:
可以增加一个,但是不能编辑原有的启动画面,也不可以关闭该启动画面。
问题97:
如何实现11:
00时提示开会?
答:
Subtest()
Application.OnTimeTimeValue("11:
00:
00"),,"开会"
EndSub
Sub开会()
MsgBox"开会"
EndSub
问题98:
如何为“生成批注〞过程指定一个快捷键?
答:
Application.OnKey"^q","生成批注"
以上代码表示按下【Ctrl+q】时执行过程“生成批注〞。
记住此时要区分大小写。
问题99:
可以让窗体中的文字框换行吗?
答:
将文字框控件的MultiLine属性设置True即可。
问题100:
能否判断单元格的值和其显示的值是否一致?
答:
有可能单元格中显示2,但其值本身是1。
利用以下代码可以判断:
问题101:
如何判断活动单元格是否存在条件格式?
答:
计算FormatConditions的数量,大于0那么表示有条件格式,代码如下:
问题102:
如何用一句代码删除A列的重复值?
答:
Columns("A:
A").RemoveDuplicatesColumns:
=1,Header:
=xlNo
问题103:
可以使自己的SUB过程不出如今宏对话框中吗?
答:
通过Private将过程声明为私有过程即可。
问题104:
如何计算活开工作表能打印多少页?
答:
ActiveWindow.View=xlPageBreakPreview
MsgBoxExecuteExcel4Macro("get.document(50)")
问题105:
可以每次打印前将已用区域更新为打印区域吗?
答:
将已用区域的地址赋值给PrintArea即可,代码如下:
Ac
问题106:
名称也分作用域吗?
答:
定义的名称包括工作表级和工作簿级。
工作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- excel 365 常见问题 答疑 答案
![提示](https://static.bingdoc.com/images/bang_tan.gif)