仿Excel 关闭前保存文档对话框.docx

上传人:b****4 文档编号:5518359 上传时间:2023-05-08 格式:DOCX 页数:15 大小:186.17KB
下载 相关 举报
仿Excel 关闭前保存文档对话框.docx_第1页
第1页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第2页
第2页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第3页
第3页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第4页
第4页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第5页
第5页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第6页
第6页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第7页
第7页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第8页
第8页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第9页
第9页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第10页
第10页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第11页
第11页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第12页
第12页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第13页
第13页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第14页
第14页 / 共15页
仿Excel 关闭前保存文档对话框.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

仿Excel 关闭前保存文档对话框.docx

《仿Excel 关闭前保存文档对话框.docx》由会员分享,可在线阅读,更多相关《仿Excel 关闭前保存文档对话框.docx(15页珍藏版)》请在冰点文库上搜索。

仿Excel 关闭前保存文档对话框.docx

仿Excel关闭前保存文档对话框

仿Excel关闭前保存文档对话框

(一)

主    题:

 仿Excel关闭前保存文档对话框

版   本:

 Excel2000及其以后版本

说   明:

 本示例主要仿建了一个Excel关闭前保存文档对话框,让用户可以自定义标题和显示消息。

(CodeBywangminbai)

 在Excel中当用户更改了一个文档之后在关闭文档时就会显示一个询问用户是否保存文档的对话框,但此对话框的标题和显示消息总是一成不变的,久了就会觉得没有味道。

而且当用户在工作薄的Workbook_BeforeClose过程中设置了代码时,即使用户了点击询问对话框的“取消”按钮来取消关闭文档的操作时,你也会发现Workbook_BeforeClose过程的中的代码已经被执行,用户的很多设置已经被更改。

而这往往是用户不愿意看到的。

所以应在执行这些代码之前显示一个对话框来询问用户是否保存文档还是取消操作。

这个对话框用VBA的MsgBox函数就可以做到,但是如果你是WINDOWSXP的用户你就会发现VB的MsgBox函数显示的对话框的风格和Excel本身所显示的对话框的风格很不一样(前提是你选择的不是Windows的经典外观)。

这就显得不协调,见下图:

Excel对话框

 

VBA的MsgBox函数对话框

 

为了协调起见,我们就用Excel5的宏对话框来创建一个对话框,使其的风格样式和Excel对话框几乎没有分别,而且可以自定义对话框的标题及显示的消息。

效果见下图:

Excel对话框

 

自定制的宏对话框

 

在这里我就介绍一下定制的过程。

在你需要建立对话框的文档里插入一个MsExcel5.0对话框。

方法是点击任意工作表标签,然后选择弹出菜单中的插入菜单,在插入对话框中选择MsExcel5.0对话框。

单击确定按钮。

然后将其命名为“关闭前对话框”。

在对话框表中右键单击对话框的外框,选择设置控件格式菜单,将其控件格式设置为下图:

 

在窗体原有的两个按钮的基础上添加一个按钮,然后将按钮的标题分别更改为是(Y)、否(N)和 取消。

右键分别单击这三个按钮,选择设置控件格式菜单,将三个控件的大小格式设置如下图:

 

分别设置是(Y)、否(N)和取消控件的其它格式如图:

是(Y)按钮

 

否(N)按钮

 

取消按钮

 

在窗体上新建一个标签控件,将其更名为 Prompt ,将其格式设置如图:

 

最后对照上面的Excel对话框截图,对各个控件的位置进行调整使其以Excel对话框的控件位置一致。

分别指定对话框外框、按纽是(N)、否(N)和取消的宏为 ShowDialog 、 COk 、 CNo 和 CCancel。

在VBE的立即窗口中输入以下代码,按回车键,隐藏宏对话框表。

(如值为-1则可使对话框表可见)

ThisWorkbook.DialogSheets("关闭前对话框").visible=2

完成以上工作后,在VBE的模块和工作薄过程中添加以下代码,之后只要你对文档做出更改,在关闭文档时就会弹出此对话框询问你是否保存更改。

代码:

'//******************************************************************************************************************************************

'//此模块的过程主要是EXCEL5.0宏对话框的调用,主要用于在关闭文当前询问用户是否保存对文档所做的修改,采用宏对话框主要是为了保持此类对话框的风格一致。

*

'//******************************************************************************************************************************************

'//从指定的模块或应用程序实例中载入一个图标

PrivateDeclareFunctionLoadIcon_

   Lib"user32"_

   Alias"LoadIconA"(_

       ByValhInstanceAsLong,_

       ByVallpIconNameAsAny)_

AsLong

'//清除图标

PrivateDeclareFunctionDestroyIcon_

   Lib"user32"(_

       ByValhIconAsLong)_

AsLong

'//获得窗口在屏幕坐标中的位置

PrivateDeclareFunctionGetWindowRect_

   Lib"user32"(_

   ByValhwndAsLong,_

   lpRectAsRECT)_

AsLong

'//移动窗体的API

PrivateDeclareFunctionMovewindow_

   Lib"user32"_

   Alias"MoveWindow"(_

       ByValhwndAsLong,_

       ByValxAsLong,_

       ByValyAsLong,_

       ByValnWidthAsLong,_

       ByValnHeightAsLong,_

       ByValbRepaintAsLong)_

AsLong

'//用来产生TIMER控件的效果。

PrivateDeclareFunctionSetTimer_

   Lib"user32"(_

       ByValhwndAsLong,_

       ByValnIDEventAsLong,_

       ByValuElapseAsLong,_

       ByVallpTimerfuncAsLong)_

AsLong

'//结束Settimer过程

PublicDeclareFunctionKillTimer_

   Lib"user32"(_

       ByValhwndAsLong,_

       ByValnIDEventAsLong)_

AsLong

'//查找窗体句柄

PrivateDeclareFunctionFindWindow_

   Lib"user32"_

   Alias"FindWindowA"(_

       ByVallpClassNameAsString,_

       ByVallpWindowNameAsString)_

AsLong

'//释放设备环境

PrivateDeclareFunctionReleaseDC_

   Lib"user32"(_

       ByValhwndAsLong,_

       ByValhdcAsLong)_

AsLong

'//取得窗体设备环境

PrivateDeclareFunctionGetDC_

   Lib"user32"(_

ByValhwndAsLong)

AsLong

'//取得系统颜色刷

PrivateDeclareFunctionGetSysColorBrush_

   Lib"user32"(_

   ByValnIndexAsLong)_

AsLong

'//绘制图标

PrivateDeclareFunctionDrawIconEx_

   Lib"user32"(_

       ByValhdcAsLong,_

       ByValxLeftAsLong,_

       ByValyTopAsLong,_

       ByValhIconAsLong,_

       ByValcxWidthAsLong,_

       ByValcyWidthAsLong,_

       ByValistepIfAniCurAsLong,_

       ByValhbrFlickerFreeDrawAsLong,_

       ByValdiFlagsAsLong)_

AsLong

'//准备用来取得屏幕的高和宽(像素为单位)

PrivateDeclareFunctionGetSystemMetrics_

   Lib"user32"(_

   ByValnIndexAsLong)_

AsLong

'//设置窗体标题或控件内容

PrivateDeclareFunctionSetWindowText_

   Lib"user32"_

   Alias"SetWindowTextA"(_

       ByValhwndAsLong,_

       ByVallpStringAsString)_

AsLong

'//——以下定义常数及类型——

PrivateTypeRECT

       LeftAsLong

       TopAsLong

       RightAsLong

       BottomAsLong

EndType

PrivateConstSM_CXSCREEN=0

PrivateConstSM_CYSCREEN=1

PrivateConstIDI_EXCLAMATION=32515&                           '惊叹图标

PublicConstMyYesAsString="YES"

PublicConstMyNoAsString="NO"

PublicConstMyCancelAsString="CANCEL"

PrivateConstCOLOR_BTNFACE=15                                 '按钮表面色

PrivateConstDI_NORMAL=&H3                                    '用常规方式绘图(合并DI_IMAGE和DI_MASK)

'//——以下定义变量——

PublicDialogHwndAsLong                                        '对话框句柄

PublicMyTidAsLong

PublicBackSaveMsgAsString                                     '对话框返回值

PrivateDialogTitleAsString,DialogPromptAsString

'//****************************************************************************************************************************************

'//以下三个过程取得用户点击窗体时的返回值

'//****************************************************************************************************************************************

PublicSubCOk()

   BackSaveMsg=MyYes                                          '点击“是”

EndSub

'//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PublicSubCNo()

   BackSaveMsg=MyNo                                           '点击“否”

EndSub

'//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PublicSubCCancel()

   BackSaveMsg=MyCancel                                       '点击“取消”

EndSub

'//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

'//****************************************************************************************************************************************

'//显示窗体在指定的位置,和设定窗体标题等

'//****************************************************************************************************************************************

SubShowDialog()

   DimDialogRectAsRECT,VidWidthAsLong,VidHeightAsLong,MleftAsLong,MtopAsLong

   '//设置对话框显示信息

   ThisWorkbook.DialogSheets("关闭前对话框").Labels("Prompt").Caption=DialogPrompt

   VidWidth=GetSystemMetrics(SM_CXSCREEN)                   '取得屏幕的宽

   VidHeight=GetSystemMetrics(SM_CYSCREEN)                  '取得屏幕的高

   DialogHwnd=FindWindow("bosa_sdm_XL9",vbNullString)        '取得EXCEL5宏对话框的句柄

   SetWindowTextDialogHwnd,DialogTitle                        '设置窗体标题

   GetWindowRectDialogHwnd,DialogRect                         '取得宏对话框的窗体区域

   Mleft=(VidWidth-(DialogRect.Right-DialogRect.Left))/2'取得显示时的左上角横坐标(X)

   Mtop=(VidHeight-(DialogRect.Bottom-DialogRect.Top))/2'取得显示时的左上角纵坐标(Y)

   '//移动窗体至指定位置

   MovewindowDialogHwnd,Mleft,Mtop,DialogRect.Right-DialogRect.Left,DialogRect.Bottom-DialogRect.Top,True

   '//设置SetTimer过程

   MyTid=SetTimer(DialogHwnd,0,10,AddressOfpMsgOutProc)

EndSub

'//****************************************************************************************************************************************

'//以下代码创建了一个函数,其返回值其参数为:

'//返回值:

String型,共有3个:

1、MyYes;2、MyNo;3、MyCancel分别代表,点击“是”按钮、点击“否”按钮和点击“取消”按钮

'//Prompt:

可选的。

字符串表达式,作为显示在对话框中的消息。

如果省略Prompt,则将显示"您是否保存对此份示例文档的修改?

"字符串。

'//Title:

 可选的。

在对话框标题栏中显示的字符串表达式。

如果省略Title,则将显示"OFFICE精英俱乐部"字符串。

'//****************************************************************************************************************************************

PublicFunctionCloseDialog(OptionalPromptAsString="您是否保存对此份示例文档的修改?

",OptionalTitleAsString="OFFICE精英俱乐部")AsString

   DialogTitle=Title

   DialogPrompt=Prompt

   Application.ExecuteExcel4Macro("Beep(3)")                    '发出声音

   ThisWorkbook.DialogSheets("关闭前对话框").Show                 '显示EXCEL宏对话框

   CloseDialog=BackSaveMsg                                     '取得返回值

EndFunction

'//****************************************************************************************************************************************

'//回调函数

'//****************************************************************************************************************************************

PrivateFunctionpMsgOutProc(ByValhwndAsLong,ByValuMsgAsLong,ByValidEventAsLong,ByValSysTimeAsLong)AsLong

   DimMYdcAsLong,myIconAsLong

   DimIconRushAsLong

   IconRush=GetSysColorBrush(COLOR_BTNFACE)                                 '取得按钮颜色刷

   MYdc=GetDC(DialogHwnd)                                                   '取得宏对话框场景

   myIcon=LoadIcon(0,IDI_EXCLAMATION)                                      '载入图标

   DrawIconExMYdc,17,10,myIcon,0,0,0,IconRush,DI_NORMAL              '在指定位置绘制图标,在这里最好用DrawIconEx函数。

而不用DrawIcon函数,不然绘制图标时闪烁的厉害

   DestroyIconmyIcon                                                         '清除图标

   ReleaseDCDialogHwnd,MYdc                                                 '释放窗体设备场景

EndFunction

'//****************************************************************************************************************************************

'//此为表格一按钮调用代码

'//****************************************************************************************************************************************

SubExample()

   ThisWorkbook.Worksheets

(1).Range("A1").Value="更改"

   Application.Quit

EndSub

'//---------------------------------------------------------------------------------------------------------------------------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2