Excel VBA入门(4) - Workbook常用功能及方法介绍

本文介绍了Excel VBA中Workbook的工作簿常用功能,包括新建、备份和修改文件名。同时,讲解了Workbook的主要事件,如BeforeClose、BeforeSave和WindowActivate,强调在VBA中使用ThisWorkbook对象来编写事件代码。
摘要由CSDN通过智能技术生成

Workbook工作簿的常用功能:

1. 新建工作簿

    Dim wb As Workbook
    Application.SheetsInNewWorkbook = 1     '设置初始工作簿中的工作表数
    Set wb = Application.WorkBooks.Add
    wb.Worksheets(1).name = "表1"                '给第一个工作表设置名称
    Application.SheetsInNewWorkbook = 3

2.用Excel对话框打开Excel文件

    Dim fileInfo As String
    fileInfo = Application.GetOpenFilename("Excel 工作簿(*.xlsx), *.xlsx")
    MsgBox fileInfo

如果用户选择了一个Excel文件,则fileInfo为该文件的全路径。若未选择,则fileInfo为False

3. 备份(另存为)Excel文件

    Dim wb As Workbook
    Set wb = Application.WorkBooks(1)     '原文件名为vba.xlsx
    wb.Activate
    wb.SaveCopyAs wb.path & "\" & "Bak_" & wb.name    '备份文件名为Bak_vba.xlsx

4. 用Excel对话框保存Excel文
rivate Sub Command3_Click() Dim i As Long Dim j As Long Dim objExl As Excel.Application '声明对象变量 Me.MousePointer = 11 '改变鼠标样式 Set objExl = New Excel.Application '初始化对象变量 objExl.SheetsInNewWorkbook = 1 '将新建的工作薄数量设为1 objExl.Workbooks.Add '增加一个工作薄 objExl.Sheets(objExl.Sheets.Count).Name = "book1" '修改工作薄名称 objExl.Sheets.Add , objExl.Sheets("book1") '增加第二个工作薄在第一个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book2" objExl.Sheets.Add , objExl.Sheets("book2") '增加第三个工作薄在第二个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book3" objExl.Sheets("book1").Select '选中工作薄 For i = 1 To 50 '循环写入数据 For j = 1 To 5 If i = 1 Then objExl.Selection.NumberFormatLocal = "@" '设置格式为文本 objExl.Cells(i, j) = " E " & i & j Else objExl.Cells(i, j) = i & j End If Next Next objExl.Rows("1:1").Select '选中第一行 objExl.Selection.Font.Bold = True '设为粗体 objExl.Selection.Font.Size = 24 '设置字体大小 objExl.Cells.EntireColumn.AutoFit '自动调整列宽 objExl.ActiveWindow.SplitRow = 1 '拆分第一行 objExl.ActiveWindow.SplitColumn = 0 '拆分列 objExl.ActiveWindow.FreezePanes = True '固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" '设置打印固定行 objExl.ActiveSheet.PageSetup.PrintTitleColumns = "" '打印标题 objExl.ActiveSheet.PageSetup.RightFooter = "打印时间: " & _ Format(Now, "yyyy年mm月dd日
DISPID_WORKBOOKS_OPEN 不是一个方法,而是一个常量,用于标识 Microsoft Excel 应用程序对象模型中的 Workbooks_Open 事件的 ID。而 Workbooks_Open 事件是由 Excel 触发的,在 Workbooks 集合中打开一个新工作簿时会触发该事件,可以通过 OLE/COM 自动化技术来捕获该事件,并执行相应的操作。 下面是一个使用 C 语言实现 Workbooks_Open 事件处理程序的示例代码: ``` #include <windows.h> #include <ole2.h> #include <ocidl.h> #include <excel.h> // 定义 Workbooks_Open 事件的标识符常量 const DISPID DISPID_WORKBOOKS_OPEN = 0x0000061D; // 定义 WorkbookEvents 接口的 GUID const IID IID_IWorkbookEvents = {0x00024412, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}; // 定义 WorkbookEvents 接口的方法 interface WorkbookEvents : IDispatch { virtual HRESULT STDMETHODCALLTYPE Open(IDispatch* Workbook) = 0; }; // 定义 WorkbookEvents 接口的 VTable WorkbookEventsVtbl VTable_WorkbookEvents = { // IDispatch 方法 ... // WorkbookEvents 方法 WorkbookEvents_Open }; // 定义 WorkbookEvents 接口的实现 class WorkbookEventsImpl : public WorkbookEvents { public: // IDispatch 方法的实现 ... // WorkbookEvents 方法的实现 HRESULT STDMETHODCALLTYPE Open(IDispatch* Workbook) { // 处理 Workbooks_Open 事件 // 获取 Workbook 的名称 VARIANT Result; DISPID DispID; DISPPARAMS DispParams = {0}; DispID = 0; DispParams.cArgs = 0; DispParams.rgvarg = NULL; Workbook->Invoke(DispID, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &DispParams, &Result, NULL, NULL); BSTR bstrName = Result.bstrVal; // 在控制台输出 Workbook 名称 wprintf(L"Workbook %s is opened.\n", bstrName); return S_OK; } }; // 订阅 Workbooks_Open 事件 void SubscribeWorkbooksOpenEvent(IDispatch* Excel) { // 获取 Excel 的 Application 对象 IDispatch* Application; Excel->QueryInterface(IID_IDispatch, (void**)&Application); // 获取 Application 的 Workbooks 对象 IDispatch* Workbooks; VARIANT Result; DISPID DispID; DISPPARAMS DispParams = {0}; DispID = DISPID_PROPERTYPUT; DispParams.cArgs = 1; DispParams.rgvarg = &Result; VariantInit(&Result); Result.vt = VT_BSTR; Result.bstrVal = SysAllocString(L"Workbooks"); Application->Invoke(DispID, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &DispParams, &Workbooks, NULL, NULL); // 获取 Workbooks 的 ConnectionPointContainer 对象 IConnectionPointContainer* ConnectionPointContainer; Workbooks->QueryInterface(IID_IConnectionPointContainer, (void**)&ConnectionPointContainer); // 获取 ConnectionPointContainer 的 ConnectionPoint 对象 IConnectionPoint* ConnectionPoint; ConnectionPointContainer->FindConnectionPoint(IID_IWorkbookEvents, &ConnectionPoint); // 创建 WorkbookEventsImpl 对象 WorkbookEventsImpl* pWorkbookEventsImpl = new WorkbookEventsImpl(); // 建立 ConnectionPoint 和 WorkbookEventsImpl 之间的连接 DWORD dwCookie; ConnectionPoint->Advise(pWorkbookEventsImpl, &dwCookie); } ``` 在上面的示例代码中,我们定义了 DISPID_WORKBOOKS_OPEN 常量、IID_IWorkbookEvents 接口的 GUID 和 WorkbookEvents 接口的方法和 VTable,以及 WorkbookEventsImpl 类的实现。在 SubscribeWorkbooksOpenEvent 函数中,我们订阅了 Workbooks_Open 事件,并建立 ConnectionPoint 和 WorkbookEventsImpl 之间的连接。在 WorkbookEventsImpl::Open 方法中,我们获取了 Workbook 的名称,并在控制台输出该名称。可以根据具体需求来编写相应的 Workbooks_Open 事件处理代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值