求问 VBA 如何知道打开的word文档被用户关闭了

求问 VBA 如何知道打开的word文档被用户关闭了,第1张

dim DocP$

DocP$="C\~$Doc1docx"

If Dir(DocP, vbHidden) = "" Then

MsgBox "未打开"

Else

MsgBox "已打开"

End If

路径自己修改

Office的高版本中,已对文件类型细化了,文件中有VBA或宏表函数时,要保存为启用宏的文件,如Excel,要保存为xlsm文件,而常规文件为xlsx文件。

出现如图的提示,说明你的Excel文件中有VBA工程或用宏表函数定义了名称。这样的文件要不你保存为xls文件格式(但受到限制,如行数只能按2003版的65536行来输入数据),要不保存为xlm文件,如果强行保存为xls文件,则下次打开时,原来的VBA工程或宏表函数定义的名称就没有了。文件数据可能会出现错误。

一、首先,打开Word程序,然后在Word主界面上方菜单选择“文件”,点击打开。

二、然后,在“文件”d出的菜单中选择“选项”,点击打开。

三、然后,在左侧菜单中选择“信任中心”点击打开。

四、然后,点击右下角的“信任中心设置”。

五、然后,左侧菜单栏中选择“宏设置”点击打开。

六、最后,勾选“禁用所用宏,并打出通知”,确定保存,Word禁用宏完成,问题解决、

问题1:如果每个表格的结构和格式都是一致的话,应该是没有问题的。

问题2:应该也没有问题。此外,我想问一下是否每段话里面都是严格地有“占地面积、投资、职工、纯收入”这几个关键词且它们在自己段落中的出现顺序也都固定?

我试试吧,答案有点长。要有耐心哦……:)

如果楼主对于步骤和代码的使用有什么疑问可以补充提问或者给我发信息。

------------------------------------

[问题一]

1、打开包含多个人员信息表格的Word文件(假设文件名为“人员表”,表格格式严格遵循楼主问题中的描述),键入Alt+F11显示VBA窗口

2、键入Ctrl+R激活左边的项目窗口,在“人员表”这个节点上鼠标右键,选择“插入-类模块”;

3、键入F4激活属性窗口,修改类模块的名称为“PersonInfo”;

4、在右边的编辑区粘贴如下代码:

Option Explicit

Public Name As String

Public Age As String

Public Hometown As String

Public Address As String

Public Postcode As String

Public Email As String

Public University As String

Public Major As String

Public Experience As String

Public Skill As String

5、再在项目窗口的“人员表”这个节点上鼠标右键,选择“插入-模块”;

6、在右边的编辑区粘贴如下代码:

Option Explicit

Sub BuildMasterTable()

Dim oTable As Table

Dim oPersonInfo As PersonInfo

Dim oPersons As New Collection

For Each oTable In ActiveDocumentTables

Set oPersonInfo = CollectPersonInfoFromTable(oTable)

If Not oPersonInfo Is Nothing Then

oPersonsAdd oPersonInfo

End If

Next

BuildMasterTableForPersons oPersons

MsgBox "完成!"

End Sub

Function CollectPersonInfoFromTable(oTable As Table) As PersonInfo

If oTableRowsCount <> 7 Or oTableColumnsCount <> 4 Then

CollectPersonInfoFromTable = Nothing

Exit Function

End If

Dim oPersonInfo As New PersonInfo

oPersonInfoName = GetInfoFromCell(oTable, 1, 2)

oPersonInfoAge = GetInfoFromCell(oTable, 1, 4)

oPersonInfoHometown = GetInfoFromCell(oTable, 2, 2)

oPersonInfoAddress = GetInfoFromCell(oTable, 2, 4)

oPersonInfoPostcode = GetInfoFromCell(oTable, 3, 2)

oPersonInfoEmail = GetInfoFromCell(oTable, 3, 4)

oPersonInfoUniversity = GetInfoFromCell(oTable, 4, 2)

oPersonInfoMajor = GetInfoFromCell(oTable, 5, 2)

oPersonInfoExperience = GetInfoFromCell(oTable, 6, 2)

oPersonInfoSkill = GetInfoFromCell(oTable, 7, 2)

Set CollectPersonInfoFromTable = oPersonInfo

End Function

Function GetInfoFromCell(oTable As Table, rowIndex As Integer, columnIndex As Integer)

Dim strInfo As String

strInfo = oTableCell(rowIndex, columnIndex)RangeText

GetInfoFromCell = Left(strInfo, Len(strInfo) - 2)

End Function

Sub BuildMasterTableForPersons(oPersons As Collection)

Dim oDoc As Document

Dim oTable As Table

Dim nIndex As Integer

Set oDoc = DocumentsAdd

Set oTable = oDocTablesAdd(oDocRange, oPersonsCount + 1, 10)

oTableAutoFitBehavior wdAutoFitContent

oTableBordersInsideLineStyle = wdLineStyleSingle

oTableBordersOutsideLineStyle = wdLineStyleDouble

oTableCell(1, 1)RangeText = "姓名"

oTableCell(1, 2)RangeText = "年龄"

oTableCell(1, 3)RangeText = "籍贯"

oTableCell(1, 4)RangeText = "住址"

oTableCell(1, 5)RangeText = "邮编"

oTableCell(1, 6)RangeText = "邮箱"

oTableCell(1, 7)RangeText = "毕业院校"

oTableCell(1, 8)RangeText = "专业"

oTableCell(1, 9)RangeText = "工作经验"

oTableCell(1, 10)RangeText = "特长"

For nIndex = 1 To oPersonsCount

oTableCell(nIndex + 1, 1)RangeText = oPersons(nIndex)Name

oTableCell(nIndex + 1, 2)RangeText = oPersons(nIndex)Age

oTableCell(nIndex + 1, 3)RangeText = oPersons(nIndex)Hometown

oTableCell(nIndex + 1, 4)RangeText = oPersons(nIndex)Address

oTableCell(nIndex + 1, 5)RangeText = oPersons(nIndex)Postcode

oTableCell(nIndex + 1, 6)RangeText = oPersons(nIndex)Email

oTableCell(nIndex + 1, 7)RangeText = oPersons(nIndex)University

oTableCell(nIndex + 1, 8)RangeText = oPersons(nIndex)Major

oTableCell(nIndex + 1, 9)RangeText = oPersons(nIndex)Experience

oTableCell(nIndex + 1, 10)RangeText = oPersons(nIndex)Skill

Next

End Sub

7、键入F5运行,看到提示“完成!”后切换回Word文档窗口检查汇总表(生成在一个新文档中)是否正确生成。

------------------------------------

[问题二]

1、打开包含原始投资文字信息的Word文件(假设文件名为“投资信息”,几个关键字的出现顺序严格遵循楼主问题中的描述),键入Alt+F11显示VBA窗口;

2、键入Ctrl+R激活左边的项目窗口,在“投资信息”这个节点上鼠标右键,选择“插入-类模块”;

3、键入F4激活属性窗口,修改类模块的名称为“InvestmentInfo”;

4、在右边的编辑区粘贴如下代码:

Option Explicit

Public Area As String

Public Investment As String

Public Employees As String

Public Income As String

5、选择菜单“工具-引用”,打开添加项目引用的对话框,在列表里面找到并钩上“Microsoft VBScript Regular Expression ”(最后的两个版本号无所谓),确定;

6、再在项目窗口的“投资信息”这个节点上鼠标右键,选择“插入-模块”;

7、在右边的编辑区粘贴如下代码:

Option Explicit

Sub CollectInvestmentInfo()

Dim oRegExp As New RegExp

Dim oMatch As Match

Dim oMatches As MatchCollection

Dim oInvestmentInfo As InvestmentInfo

Dim oInvestmentInfoArray As New Collection

oRegExpGlobal = True

oRegExpPattern = "占地面积([0-9]+)亩,总投资([0-9]+)万元,职工([0-9]+)人,年纯收入([0-9]+)多万"

Set oMatches = oRegExpExecute(ActiveDocumentRangeText)

For Each oMatch In oMatches

Set oInvestmentInfo = New InvestmentInfo

oInvestmentInfoArea = oMatchSubMatches(0)

oInvestmentInfoInvestment = oMatchSubMatches(1)

oInvestmentInfoEmployees = oMatchSubMatches(2)

oInvestmentInfoIncome = oMatchSubMatches(3)

oInvestmentInfoArrayAdd oInvestmentInfo

Next

BuildMasterTable oInvestmentInfoArray

MsgBox "完成!"

End Sub

Sub BuildMasterTable(oInvestmentInfoArray As Collection)

Dim oDoc As Document

Dim oTable As Table

Dim nIndex As Integer

Set oDoc = DocumentsAdd

Set oTable = oDocTablesAdd(oDocRange, oInvestmentInfoArrayCount + 1, 4)

oTableAutoFitBehavior wdAutoFitContent

oTableBordersInsideLineStyle = wdLineStyleSingle

oTableBordersOutsideLineStyle = wdLineStyleDouble

oTableCell(1, 1)RangeText = "占地面积"

oTableCell(1, 2)RangeText = "总投资"

oTableCell(1, 3)RangeText = "职工数"

oTableCell(1, 4)RangeText = "年纯收入"

For nIndex = 1 To oInvestmentInfoArrayCount

oTableCell(nIndex + 1, 1)RangeText = oInvestmentInfoArray(nIndex)Area

oTableCell(nIndex + 1, 2)RangeText = oInvestmentInfoArray(nIndex)Investment

oTableCell(nIndex + 1, 3)RangeText = oInvestmentInfoArray(nIndex)Employees

oTableCell(nIndex + 1, 4)RangeText = oInvestmentInfoArray(nIndex)Income

Next

End Sub

8、键入F5运行,看到提示“完成!”后切换回Word文档窗口检查汇总表(生成在一个新文档中)是否正确生成。

 设置的方法是:

1、左上角的word按钮—word选项—高级—显示—在任务栏中显示所有窗口,没选中时所有的word就会在一个窗口,这时右上角会有两个关闭的按钮,按上面的那个大的,所有的word都会关掉,按下面的那个就只关闭当前的word。

2、当word设置的是“在任务栏里显示所有窗口”,这样右上角就只有一个关掉的按钮,如图

这时候按关闭按钮,只会关掉一个,别的word不会关。

Private Sub CommandButton1_Click()

Sub PromptToSaveAndClose()

Dim doc As Document

For Each doc In Documents

docClose SaveChanges:=wdPromptToSaveChanges

Next

End Sub

End Sub

应该这样写:

Private Sub CommandButton1_Click()

PromptToSaveAndClose

End Sub

Sub PromptToSaveAndClose()

Dim doc As Document

For Each doc In Documents

docClose SaveChanges:=wdPromptToSaveChanges

Next

End Sub

打开数据表,按下Alt+F11,在打开的界面中双击左侧的ThisWorkBook,在右侧通用下拉框中选择Workbook,会自动出现完整的WorkbookOpen事件代码,只需要在其中补充上要自动运行的VBA代码部分即可。

在Excel的标准模块中可以创建4种自动运行的宏,它们分别是AutoOpen,AutoClose,AutoActivate,AutoDeactivate。这些自动运行的宏是为了与Excel5和95兼容而保留下来的。

vba是依附在应用程序(例如Excel)中的VB语言。只要你安装了OfficeExcel就自动默认安装了VBA,同样Word和PowerPoint也能调用VBA对软件进行二次开发而让一些特别复杂的 *** 作脚本化。VBA是Excel的底层根本。

1、左键单击右上角“×”;

2、左键双击左上角;

3、右键单击左上角,选“关闭”;

4、alt

键+

F4键;

5、Ctrl键+F4键;

6、ctrl

+

W;

7、单击word文档窗口左上方菜单栏“文件”处,选“关闭”或“退出”;

8、在电脑屏幕最下方的菜单栏上右键单击(或直接ctrl+alt+del,

或win+r后输入taskmgr)打开“任务管理器”,关闭想关的进程,即word文档;

9、在VB等软件里关闭word文档,可用命令:

Close

#1

ObjWorkbookClose

10、cmd里应该有个命令,可我忘了!嘿嘿,如果问着了就告诉我,谢谢

以上就是关于求问 VBA 如何知道打开的word文档被用户关闭了全部的内容,包括:求问 VBA 如何知道打开的word文档被用户关闭了、怎么才能关闭这个office2013版本的vba工程提示每次保存文件时候都会有如下提示,很不喜欢、Word中的宏如何取消,Word禁用宏的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10123343.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存