ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 23076|回复: 48

[原创] 常用内置对话框参数解读

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-7 15:57 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:Application对象
Excel 中的Dialog对象集合是一个值得探索的宝库,它能够实现对各种内置对话框的调取,并根据用户喜好进行个性化的默认参数设置,为编程及前台应用提供了极大的选择空间。但长期以来,就此问题进行深入研究的人数寥寥,网络上也基本搜索不到有价值的信息。本贴根据实际需要,对一些常用的对话框设置进行了示例演示,相信其余对话框设置大家也基本能够举一反三,触类旁通。在探索过程中,我也有一些困惑和不解,例如参数的含义和参数值的设定等,还需要和大家共同探讨解决。
另外要提醒的一点是,帮助中少量对话框参数说明是错误的,例如说明中是三个参数,实际是5个参数。帮助中的系统常量说明对理解对话框参数很有帮助,但一些系统常量在参数中也不能用,要自己一点一点摸索。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-7 15:59 | 显示全部楼层
本帖最后由 doitbest 于 2014-5-7 17:19 编辑

1、“高级筛选”对话框
application.Dialogs(xlDialogFilterAdvanced).Showarg1:=xlFilterInPlace,arg2:=activesheet.usedrange,arg3:=[criterior]
参数1:在原区域显示筛选结果。参数2:列表区域。参数3:条件区域
application.Dialogs(xlDialogFilterAdvanced).Showarg1:=xlFilterCopy,arg2:=activesheet.usedrange,arg3:=[criterior],arg4:=sheets(sheets.Count).[a1],arg5:=true
参数1:将筛选出的数据复制到新位置 参数4:目标区域 参数5:选择不重复记录

2、“打开”对话框
Application.Dialogs(xlDialogOpen).Showarg1:="*t*.txt" 搜索当前文本夹中文件名中含有t关键字的文本文件
Application.Dialogs(xlDialogOpen).Showarg1:="d:\*.txt" 可以改变当前目录,在D盘搜索文本文件
Application.Dialogs(xlDialogOpen).Showarg1:="d:\*.txt;*.doc;*.xls" 可以搜索D盘的文本文件、WORD文本和EXCEL文件,具体可以自己定义,注意中间用分号间隔。此语句非常实用,仍然记得自己在初次发现时的狂喜心情,隆重推荐!!!
Application.Dialogs(xlDialogOpen).Showarg1:="d:\*1*;*2*" 搜索D盘含有1或2关键字的文件,也很实用
application.Dialogs(1).Showarg1:=CreateObject("Wscript.Shell").SpecialFolders("Desktop")& "\*.lnk"
搜索桌面的快捷方式
application.Dialogs(1).Showarg1:=CreateObject("Wscript.Shell").SpecialFolders("favorites")& "\*.*"
搜索收藏夹文件夹
application.Dialogs(1).Showarg1:=CreateObject("Wscript.Shell").SpecialFolders("startmenu")& "\*.*"
搜索开始菜单所有文件
application.Dialogs(1).Showarg1:=CreateObject("Wscript.Shell").SpecialFolders("mydocuments")& "\*.xls;*.doc"
搜索“我的文档”中的EXCEL及WORD文件
application.Dialogs(1).Show arg1:="d:\??学生*.xls"
搜索D盘中关键字为学生的EXCEL文件,这里两种通配符都可以使用
此外常用的特殊文件夹还有Startup、Fonts、Programs、Recent、SendTo、StartMenu、Templates


3、“标准字体”对话框
这个对话框更改的不是单元格格式,而是横纵座标的字体字号等格式,太神奇了!!!,而且这种更改只对当前工作薄有效,即使关闭EXCEL和关机,设置仍然保留。
参数说明:
  
name_text
  
  
arg1
  
  
字体
  
  
size_num
  
  
arg2
  
  
字号
  
  
bold
  
  
arg3
  
  
粗体
  
  
italic
  
  
arg4
  
  
斜体
  
  
underline
  
  
arg5
  
  
下划线
  
  
strike
  
  
arg6
  
  
删除线
  
  
color
  
  
arg7
  
  
字体颜色
  

Application.Dialogs(xlDialogStandardFont).Showarg1:="华文彩云",arg2:=20,arg3:=true
以上修改字体、字号和粗体,如果设置成各种西方字体,将使工作表画面呈现千变万化,充满情趣的效果,如果用Wingdings等三种字体,简直就成画板了!,当然,在游戏之余,还是要用庄重醒目的字体比较好。

4、“对齐方式”对话框
application.Dialogs(xlDialogAlignment).Showarg1:=3,arg2:=1 水平居中\自动换行
application.Dialogs(xlDialogAlignment).Showarg1:=2 左对齐
application.Dialogs(xlDialogAlignment).Showarg6:=1 缩小字体填充
application.Dialogs(xlDialogAlignment).Showarg8:=1 合并单元格
根据帮助说明,“对齐方式”对话框共有五个参数,分别为horiz_align, wrap, vert_align, orientation,add_indent,但实际说明并不完整,或者是一个“bug”,“缩小字体填充”和“合并单元格”参数说明中均没有,实际其分别位于参数6和参数8。这些都是不信邪大胆试的结果,大家在实践中要引以为鉴。

5、“页面设置”对话框
Application.Dialogs(7).Showarg9:=true,arg10:=true,arg11:=2方向横向,水平垂直居中
Application.Dialogs(7).Showarg3:=0,arg4:=0,arg5:=0,arg6:=0,arg18:=0,arg19:=0 页边距的六个数值参数均设置为0
Application.Dialogs(7).Show arg12:=9 纸型为A4
Application.Dialogs(7).Show arg13:=80 缩放比例为80%
Application.Dialogs(7).Show arg2:="共" & (ActiveSheet.HPageBreaks.Count +1) * (ActiveSheet.VPageBreaks.Count + 1) & "页" 页脚设置为“共*页”
Application.Dialogs(7).Show arg1:="第1页"这个是设置页眉,没有什么实际用途,原因是数字是死的,不会变动。无法模拟出自定义页眉中的类似WORD域的效果。
注意:页眉页脚 打印标题行 打印标题等参数不能进行默认设置,参数中也没有此项,不知道为什么。

6、“打印”对话框
Application.Dialogs(xlDialogPrint).Showarg4:=5 打印4份
application.Dialogs(8).Show arg2:=1,arg3:=2 打印1-2页
application.Dialogs(8).Show arg12:=1 打印选定区域。Arg12其他选项:2活动工作表 3整个工作薄

7、 “特殊选定”对话框(xlDialogSelectSpecial)
application.Dialogs(132).Show arg1:=3,arg2:=1定位公式-数值
application.Dialogs(132).Show arg1:=2,arg2:=3定位常量-公式文本
application.Dialogs(132).Showarg1:=2,arg2:=23 定位常量-全部
application.Dialogs(132).Show arg1:=4 定位空值
application.Dialogs(132).Show arg1:=5 定位当前区域
application.Dialogs(132).Show arg1:=6 定位当前数组
application.Dialogs(132).Show arg1:=7 定位行内容差异单元格
application.Dialogs(132).Show arg1:=8 定位列内容差异单元格
application.Dialogs(132).Show arg1:=9 定位引用单元格
application.Dialogs(132).Show arg1:=10 定位从属单元格
application.Dialogs(132).Showarg1:=10,arg3:=2 定位所有级别从属单元格
application.Dialogs(132).Show arg1:=11 定位最后一个单元格
application.Dialogs(132).Show arg1:=12 定位可见单元格
application.Dialogs(132).Show arg1:=13 定位对象
application.Dialogs(132).Show arg1:=14 定位条件格式
application.Dialogs(132).Show arg1:=15 定位全部数据有效性,在帮助“Range.SpecialCells 方法”中,定位有效性的类型值为-4174,用在定位对话框参数中就会出错。arg1:=15这种结果全是一点点摸索出来的,诸如此类的情况很多。大家用到其它对话框时往往要自己反复尝试,不要轻易放弃和否定。
application.Dialogs(132).Showarg1:=15,arg3:=2 定位相同数据有效性

8、“分列”对话框
application.Dialogs(xlDialogTextToColumns).Showarg2:=2 分列-文件类型为固定宽度
application.Dialogs(xlDialogTextToColumns).Showarg2:=1,arg5:=0,arg6:=1,arg7:=1,arg8:=1
分列-分隔符号为分号\逗号\空格
application.Dialogs(xlDialogTextToColumns).Showarg2:=2,arg11:=Array(0, 2)
分列-列数据类型为文本
application.Dialogs(xlDialogTextToColumns).Showarg2:=2,arg11:=Array(0, 5)
分列-列数据类型为YMD格式时间
application.Dialogs(xlDialogTextToColumns).Showarg2:=2,arg11:=Array(0, 3)
分列-列数据类型为MDY格式时间

9、“对齐方式”对话框
application.Dialogs(xlDialogAlignment).Showarg1:=3,arg2:=1 水平居中\自动换行
application.Dialogs(xlDialogAlignment).Showarg1:=2 左对齐
application.Dialogs(xlDialogAlignment).Showarg6:=1 缩小字体填充
application.Dialogs(xlDialogAlignment).Showarg8:=1 合并单元格

10、选择性粘贴对话框
application.Dialogs(53).Show arg1:=7 边框除外
application.Dialogs(53).Show arg1:=8 粘贴复制的列宽
application.Dialogs(53).Show arg1:=11 公式和数字格式
application.Dialogs(53).Show arg1:=6 粘贴有效性
application.Dialogs(53).Showarg1:=2,arg4:=true 粘贴公式/转置
arg1参数的其他选项值:3数值 4格式5批注 12粘贴值和数字格式
注意以上语句运行前,要有单元格处于被复制状态,否则运行出错。也可以用以下宏增强通用性,防止出错。
Public Sub abc1()
If Application.CutCopyMode = xlCopy Then
   Application.Dialogs(53).Show arg1:=2, arg4:=True
End If
End Sub

11、“查找公式”对话框
application.Dialogs(64).Show arg3:=1 1为全部匹配,2为部分匹配
application.Dialogs(64).Show arg2:=2 查找范围:1公式2值 3批注
application.Dialogs(64).Show arg6:=true 区分大小写
application.Dialogs(64).Show arg4:=1 按行搜索,值2为按列搜索

12、“替换公式”对话框
application.Dialogs(130).Showarg1:="*abc",arg2:="abc",arg3:=2 将"*abc"替换为”abc”,以部分匹配方式替换

13、“另存为”对话框
application.Dialogs(xlDialogSaveAs).Showarg1:=CreateObject("Wscript.Shell").SpecialFolders("desktop")& "\" & [a1] & ".xls"
保存文件到桌面,默认文件名为A1单元格值。
还可以更智能一些,如果A1为空,则以A列第一个值为默认文件名
Public Sub abc()
Dim folder, name
folder =CreateObject("Wscript.Shell").SpecialFolders("desktop")& "\"
If [a1] <> "" Then name =[a1] Else name = [a:a].Find("*")
Application.Dialogs(xlDialogSaveAs).Showarg1:=folder & name & ".xls"
End Sub

14、“创建分类汇总”对话框
application.Dialogs(xlDialogSubtotalCreate).Showarg2:=2 分类汇总函数为计数,其他参数:平均值为3,最大值为4,最小值为5,数值计数为7标准偏差为9
application.Dialogs(xlDialogSubtotalCreate).Showarg4:=false 替换当前分类汇总为否
application.Dialogs(xlDialogSubtotalCreate).Showarg5:=true 每组数据分页为是
application.Dialogs(xlDialogSubtotalCreate).Showarg6:=false 汇总结果显示在下方选项为否,arg6:=true则是结果显示在上方
application.Dialogs(xlDialogSubtotalCreate).Showarg2:=2,arg3:=1 对第一列进行计数
application.Dialogs(xlDialogSubtotalCreate).Showarg3:=array(2,3) 对第二三列进行求和
由于分类汇总对话框不能准确确定要进行计算的列,通过代码可以弥补这一不足。以下的程序即可以实现以上功能。假定数据表第一列为字段名,第二列以上为数据记录,通过判断数据为数值型确定要计算的列数组。分类汇总对话框则根据数据自动标识要求和的列
Public Sub abc()
Dim ar(), i, m
For i = 2 ToRange("a1").CurrentRegion.Columns.Count
    IfIsNumeric(Cells(2, i)) Then
        m = m + 1
       ReDim Preserve ar(1 To m)
       ar(m) = i
    EndIf
Next
Application.Dialogs(xlDialogSubtotalCreate).Showarg3:=ar
End Sub

15、“添加列表选项”对话框
application.Dialogs(xlDialogOptionsListsAdd).Show
EXCEL各版本进入自定义序列的路径都比较繁琐,用以上语句可以直接进入,相当于快捷方式了。

16、“计算”对话框
application.Dialogs(xlDialogCalculation).Showarg6:=true  以显示精度为准(这个比较有用,对一个小数,设置以显示精度为准,则减少小数位后就不可恢复了。相当于编辑小数值,而不是格式调整)
application.Dialogs(32).Show arg1:=3 设置计算模式为“手动重算”,参数值1为“自动重算”
application.Dialogs(32).Showarg1:=3,arg8:=false 保存前自动重算选项为否,这样可以加快文件保存速度。注意arg8和arg1必须同时设置才有效
这个对话框参数不少,但以前面三种应用最为常用。

17、“单元格保护”对话框
application.Dialogs(xlDialogCellProtection).Showarg1:=true,arg2:=true 设置单元格保护,锁定和隐藏两个选项均为是

18、“清除”对话框
application.Dialogs(xlDialogClear).Showarg1:=2 将清除格式设为默认选项,因为这一选项是最常用的
application.Dialogs(xlDialogClear).Showarg1:=iif(not selection(1).Comment is nothing,4,2)
加入一种更“人性化”的判断,如果第一个选定单元格中含有批注,则清除默认选项为“批注”,对有类似要求的用户这是一个较好的参考,但也很可能画蛇添足,多此一举,自己灵活把握吧
Application.Dialogs(xlDialogClear).Showarg1:=5将清除超链接设为默认选项。对此还可以用一组宏语句实现更智能化的应用,如果单元格存在超链接,则将清除超链接设为默认选项,否则将清除格式设为默认选项。代码如下:
Sub abc()
On Error Resume Next
Debug.PrintSelection(1).Hyperlinks(1).Address
If Err.Number > 0 Then
   Application.Dialogs(xlDialogClear).Show arg1:=2
Else
   Application.Dialogs(xlDialogClear).Show arg1:=5
End If
End Sub

19、合并计算
application.Dialogs(xlDialogConsolidate).Showarg1:=Array("Sheet1!R1C1:R4C2","Sheet2!R1C1:R5C2") 设定合并计算的所有引用位置,arg1的参数值是一个数组,包含各个参与合并的区域。如果自动准确添加所有引用位置,则需要用宏来实现。例如:
PublicSub abc()
Dimar(), i, m
For i= 1 To ActiveSheet.Index - 1
    m = m+ 1
    ReDim Preserve ar(1 To m)
    ar(m) = Sheets(i).Name & "!"& Sheets(i).Range("a1").CurrentRegion.Address(ReferenceStyle:=xlR1C1)
Next
[a1].Select
Application.Dialogs(xlDialogConsolidate).Showarg1:=ar
EndSub
application.Dialogs(xlDialogConsolidate).Showarg2:=3 设置合并计算的函数为计数,其它参数值:1平均值,2数值计数,4最大值,5最小值,6乘积,9求和
application.Dialogs(xlDialogConsolidate).Showarg3:=true,arg4:=true 标签位置设定为首行为最左列
application.Dialogs(xlDialogConsolidate).Showarg5:=true 选定“创建指向源数据的链接”选项

20、“显示”对话框
application.Dialogs(xlDialogDisplay).Showarg1:=true 显示公式(而不是显示计算结果)
application.Dialogs(xlDialogDisplay).Showarg2:=false 不显示网格线
application.Dialogs(xlDialogDisplay).Showarg3:=false 不显示行号列标
application.Dialogs(xlDialogDisplay).Showarg4:=false 不显示零值
application.Dialogs(xlDialogDisplay).Showarg7:=false 不显示分级显示符号
application.Dialogs(xlDialogDisplay).Showarg8:=true 显示自动分页符
application.Dialogs(xlDialogDisplay).Showarg9:=3 参数值1为全部显示,2为仅显示位置

评分

4

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-7 16:02 | 显示全部楼层
两个附件供参考

内置对话框参数附件.zip

25.54 KB, 下载次数: 896

内置框参数常用解读.zip

13.77 KB, 下载次数: 697

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-9 10:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-5-9 10:36 | 显示全部楼层
doitbest 发表于 2014-5-7 16:02
两个附件供参考

学习了,谢谢分享!

TA的精华主题

TA的得分主题

发表于 2014-5-9 23:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-5-10 09:38 | 显示全部楼层
可以结合原EXCEL功能来处理数据是最好不过的了。

TA的精华主题

TA的得分主题

发表于 2014-5-10 11:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习,收藏

TA的精华主题

TA的得分主题

发表于 2014-7-12 23:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-13 16:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享,收藏学习
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-28 21:24 , Processed in 0.056984 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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