在-Windows-7-环境下封装-Excel-VBA-代码
Windows7系统封装教程(详细图解)(3)
Windows7系统封装教程(详细图解)(3)五、让封装系统更加完美按照前面的步骤制作完成封装系统以后,尽管已经可以安装其他计算机上并且系统各项功能和预装的各种应用程序都可以正常使用,但是还有几个不够完美的地方:——可能会出现第一次登录系统时出现黑屏,需要重新设定桌面背景。
——运行预装的应用程序以后,在用户文件夹里发现原来已经删除的用户帐户的文件夹又重新生成了。
——运行注册表编辑器,查找“Users<已经删除的用户名>”(如“UsersMaker”),竟然还找了很多“Users<已经删除的用户名>”的注册表项目。
1、第一种解决办法:将所有“Users<已经删除的用户名>”注册表项目修改成“UsersDefault”,在系统第一次登录之前导入到系统。
① 查找注册表文件。
使用自己制作的封装系统进行安装,登录系统以后,运行C:Widows目录下的regedit.exe打开注册表编辑器,点击“编辑”,再点击“查找”,在“查找”对话框里输入“Users<已经删除的用户名>”(如UsersMaker),点击“查找下一个”开始查找。
② 导出注册表文件。
发现包含“Users<已经删除的用户名>”字段的注册表项目的时候,点击“文件”,再点击“导出”将该注册表项目导出到硬盘(保存为reg文件)。
然后按F3键继续查找,发现包含“Users<已经删除的用户名>”字段的注册表项的时候继续导出,一直查找到HKEY_LOCAL_MACHINE的结尾处(HKEY_USERS后面发现的注册表项不用理会)。
完成查找和导出完成后,关闭注册表编辑器,转到导出注册表所在目录,可以看到导出的所有的注册表项(预装的应用软件不同,导出注册表文件多少也不同)。
③ 合并注册表文件。
在“开始菜单”—“附件”里找到并运行“记事本”,在第一行输入“Windows Registry Editor Version 5.00”后,右键其中1个注册表文件,在弹出菜单中点击“编辑”打开该注册表文件,将该注册表文件中的键名(即带中括号的字段)和带有“Users<已经删除的用户名>”字段的项目(其他的不用理会)复制到记事本内。
VB封装Excel宏代码的三个方法
VB封装Excel_VBA成DLL技巧使用VB6.0在WinXP_sp2、Excel 2000环境下制作、测试通过。
一、启动VB6.0:执行:“文件夹(F)”——“新建(N)”——选择“ActiveX DLL”,如下图1:二、引用:VB中对Excel的引用执行:“工程(P)”——“引用(N)”——选择所要引用的项目:如下图2Excel 2000中:Microsoft Excel 9.0 Object LibraryMicrosoft Office 9.0 Object LibraryExcel 2003中:Microsoft Excel 11.0 Object LibraryMicrosoft Office 11.0 Object Library三、编写代码:1、将工程默认名称“工程1”,改为“zygtest”,将类模块默认名称“Class1”,改为“zyg365”,2、在类模块的代码编辑区写入代码:如下图3模块名称为“hongtong”,代码如下在VB中编写代码时:要注意以下声名Dim XLAPP As ObjectSet XLAPP = GetObject(, "Excel.Application")代码中引用对象,如SHEET,Cell等,前面要加“XLAPP.”(或按照Sub hongtong() 中的格式编写。
)Sub hongtong()Dim excelApp As New Excel.ApplicationDim excelWorkBook As Excel.WorkbookDim excelWorksheet As Excel.WorksheetSet excelWorkBook = '创建新工作簿Set excelWorksheet = excelWorkBook.Sheets(1)excelWorksheet.Cells(2, 3) = "宏通" '写入数据excelWorksheet.Cells(3, 4) = "zyg365" '写入数据excelApp.Visible = True '显示excel界面,用于调试excelWorkBook.PrintPreview '打印预览excelWorkBook.PrintOut '打印输出excelWorkBook.Saved = True'excelWorkBook.Close '关闭工作薄'excelApp.Quit '退出excelEnd Sub四、工程属性设置:(可以不设置,本步骤可以省略)为了使自己开发的程序更规范,可以对本工程的属性加以描述:如下图4执行:“工程(P)”——“工程1属性(E)…”(当前工程中为:“zygtest属性(E)…”)五、保存工程、测试、打包生成Dll文件:1、保存:单击保存,保存到一个文件夹中;2、测试:执行工具栏上的“启动”(右向的三角图标)按钮,检查是否存在错误;3、打包生成Dll文件:执行:“文件(F)”——“生成工程1.dll(K)”(当前工程中为:“zygtest.dll”),重命名为“zyg.dll”,至此,Dll文件制作结束。
Excel-VBA-编程教程[完整版]、excel高级教程
目录一、VBA语言基础...................................................................................... .. (1)第一节标识符...................................................................................... . (1)第二节运算符...................................................................................... . (1)第三节数据类型...................................................................................... (1)第四节变量与常量...................................................................................... .. (1)第五节数组...................................................................................... .. (2)第六节注释和赋值语句...................................................................................... (2)第七节书写规范...................................................................................... (2)第八节判断语句...................................................................................... (2)第九节循环语句...................................................................................... (3)第十节其他类语句和错误语句处理...................................................................................... . (4)第十一节过程和函数...................................................................................... . (4)一.Sub过程 (4)二.Function函数 (5)三.Property属性过程和Event事件过程 (5)第十二节内部函数...................................................................................... (5)一.测试函数 (5)二.数学函数 (5)三.字符串函数 (5)四.转换函数 (6)五.时间函数 (6)第十三节文件操作...................................................................................... .. (6)文件 (6)删除 (6)打开 (6)读入 (7)写入 (7)关闭 (7)其他文件函数 (7)二、VISUALBASIC程序设计网络教学 (1)第一课VBA是什么...................................................................................... (1)1.1VBA是什么...................................................................................... . (1)1.2EXCEL环境中基于应用程序自动化的优点 (1)1.3录制简单的宏...................................................................................... . (1)1.4执行宏...................................................................................... . (2)1.5查看录制的代码...................................................................................... (2)1.6编辑录制的代码...................................................................................... (3)1.7录制宏的局限性...................................................................................... (3)1.8小结...................................................................................... .. (3)第二课处理录制的宏...................................................................................... . (3)2.1为宏指定快捷键...................................................................................... (3)2.2决定宏保存的位置...................................................................................... .. (4)2.3个人宏工作簿...................................................................................... . (4)2.3.1保存宏到个人宏工作簿 (4)2.3.2使用并编辑个人宏工作簿中的宏 (4)2.4将宏指定给按钮...................................................................................... (4)2.5将宏指定给图片或其他对象...................................................................................... . (5)2.6小结...................................................................................... .. (5)第三课学习控件...................................................................................... .. (5)-----------------------页面2-----------------------3.1EXCEL开发过程简介...................................................................................... (5)3.2认识不同的控件...................................................................................... (5)3.3向工作表添加控件...................................................................................... .. (6)3.4设置控件的特性...................................................................................... (6)3.5给控件命名...................................................................................... .. (6)3.6使用用户窗体...................................................................................... . (6)3.7疑难解答...................................................................................... (7)第四课理解变量和变量的作用...................................................................................... .. (7)4.1代码存在的位置:模块...................................................................................... (7)4.2对模块的概览...................................................................................... . (7)4.2.1创建过程 (8)4.2.2运行宏 (9)4.3保存对模块所做的改变...................................................................................... (9)4.4变量...................................................................................... .. (9)4.4.1变量的数据类型 (9)4.4.2用Dim语句创建变量(声明变量) (10)4.4.3变量命名的惯例 (10)4.4.4使用数组 (10)4.4.5变量赋值 (11)第五课利用VBA设置工作表使用权限 (11)1.使用WITH语句。
VBA代码封装过程
VBA代码封装过程一、函数和子过程的封装过程二、封装后函数和子过程的调用三、窗体的封装和调用四、com加载项的制作五、利用com加载项制作功能区如果你写VBA代码只是给自己使用或者不介意和别人共享代码,那么就用不到封装。
我们一般用VB6.0作为VBA代码的封装工具,VBA代码的封装在我理解就是将VBA代码修改成VB6.0能运行的代码,然后利用VB6.0可以制作dll文件的特点将所有代码封装在dll文件中,最后我们可以通过安装加载项或者引用的方式在工作表界面或VBA界面调用其中的函数、子过程和窗体。
下面让我们具体看下VBA代码的封装过程(封装调用环境:xp系统,excel2007,VB6.0):一、函数和子过程的封装过程函数和子过程也就是function过程和sub过程。
封装的过程如下:1、在vba编写代码,此次实验的代码如下,包含一个函数过程和一个子过程:Function ceshi(a, b)ceshi = a + bEnd FunctionSub ceshi1()MsgBox End Sub2、打开VB6.0,新建工程,选择ActiveX dll,然后点打开。
3、点打开后在该工程中可以看到工程自带一个类模块,可以修改工程名字和类模块名字,也可以选择默认的工程名和类模块名,修改工程名和类模块名的过程如下,在VB6.0界面右边工程资源管理器窗口(如果没看见该窗口,可点击菜单栏中“视图”菜单的工程资源管理器命令调用)选择工程名(类模块名),然后在下面属性窗口“名称”一行修改成自己想要的名称,这里我们将工程名修改成fengzhuang,类模块名修改成cls14、右键点击类模块,在弹出的快捷菜单中选择查看代码,然后将VBA代码复制到类模块代码窗口中,部分代码要稍作修改,改成VB6.0能识别的代码。
如上面的子过程中出现了application对象,代表excel应用程序,但是在vb6.0直接这样写会出现错误,VB6.0并不能识别这就是一个excel应用程序对象,就像我们在VBA中直接写Dictionary(字典对象)和regexp(正则对象)一样,VBA并不能识别,要VBA能识别这两个对象,要么是创建新的对象(前期绑定和后期绑定),要么是获取已有的对象(前期绑定和后期绑定),因为我们在VBA中运行代码时,excel应用程序已经存在了,所以我们只需要获取已有对象即可。
ExcelVBA常用代码总结1(精选合集)
ExcelVBA常用代码总结1(精选合集)第一篇:Excel VBA常用代码总结1Excel VBA常用代码总结1•改变背景色Range(“A1”).Interior.ColorIndex = xlNone ColorIndex一览••改变文字颜色获取单元格Range(“A1”).Font.ColorIndex = 1 Cells(1, 2)Range(“H7”)•获取范围Range(Cells(2, 3), Cells(4, 5))Range(“a1:c3”)'用快捷记号引用单元格Worksheets(“Sheet1”).[A1:B5] •选中某sheet SetNewSheet = Sheets(“sheet1”)NewSheet.Select •选中或激活某单元格'“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格。
'下面的代码首先选择A1:E10区域,同时激活D4单元格:Range(“a1:e10”).Select Range(“d4:e5”).Activate '而对于下面的代码:Range(“a1:e10”).Select Range(“f11:g15”).Activate '由于区域A1:E10和F11:G15没有公共区域,将最终选择F11:G15,并激活F11单元格。
•获得文档的路径和文件名ActiveWorkbook.Path'路徑 '名稱ActiveWorkbook.FullName '路徑+名稱'或将ActiveWorkbook换成thisworkbook••••隐藏文档禁止屏幕更新禁止显示提示和警告消息文件夹做成Application.Visible = False Application.ScreenUpdating = False Application.DisplayAlerts = False strPath = “C:temp” MkDirstrPath ••状态栏文字表示双击单元格内容变换Application.StatusBar = “计算中”PrivateSubWorksheet_BeforeDoubleClick(ByVal Target As Range, Cancel AsBoolean)If(Target.Cells.Row>= 5AndTarget.Cells.Row<= 8)Then IfTarget.Cells.Value = “●”Then Target.Cells.Value = “" ElseTarget.Cells.Value = ”●“ EndIfCancel = True EndIf End Sub•文件夹选择框方法1SetobjShell = CreateObject(”Shell.Application“)SetobjFolder = objShell.BrowseForFolder(0, ”文件“, 0, 0)IfNotobjFolderIsNothingThen path= objFolder.self.Path&”“ endif SetobjFolder = Nothing SetobjShell = Nothing•文件夹选择框方法2(推荐)PublicFunctionChooseFolder()AsString DimdlgOpenAsFileDialog SetdlgOpen = Application.FileDialog(msoFileDialogFolderPicker)WithdlgOpen. InitialFileName = ThisWorkbook.path&”“ If.Show =-1Then ChooseFolder =.SelectedItems(1)EndIf EndWithSetdlgOpen = Nothing End Function'使用方法例:Dim path AsString path = ChooseFolder()If path <>”“Then MsgBox”open folder“ EndIf•文件选择框方法PublicFunctionChooseOneFile(OptionalTitleStrAsString= ”Please choose a file“, OptionalTypesDecAsString = ”*.*“, Optional ExtenAsString = ”*.*“)AsStringDimdlgOpenAsFileDialog SetdlgOpen = Application.FileDialog(msoFileDialogFilePicker)WithdlgOpen.Title = TitleStr.Filters.Clear.Filters.AddTypesDec, Exten.AllowMultiSelect = False.InitialFileName = ThisWorkbook.Path If.Show =-1Then'.AllowMultiSelect = True ' For Each vrtSelectedItemIn.SelectedItems ' MsgBox ”Path name: “ &vrtSelectedItem ' Next vrtSelectedItemChooseOneFile =.SelectedItems(1)EndIf EndWithSetdlgOpen = Nothing End Function•某列到关键字为止循环方法1(假设关键字是end)SetCurrentCell = Range(”A1“)DoWhileCurrentCell.Value<>”end“ ……SetCurrentCell = CurrentCell.Offset(1, 0)Loop•某列到关键字为止循环方法2(假设关键字是空字符串)i = StartRow DoWhileCells(i, 1)<>”“ ……i = i + 1 Loop•”For Each...Next 循环(知道确切边界)ForEach c InWorksheets(“Sheet1”).Range(“A1:D10”).CellsIfAbs(c.Value)<0.01Thenc.Value = 0 Next•“For Each...Next 循环(不知道确切边界),在活动单元格周围的区域内循环ForEach c InActiveCell.CurrentRegion.Cells IfAbs(c.Value)<0.01Thenc.Value = 0 Next•某列有数据的最末行的行数的取得(中间不能有空行)lonRow=1 DoWhileTrim(Cells(lonRow, 2).Value)<>”“ lonRow= lonRow + 1 LooplonRow11 = lonRow1164)比如i=A的时候,Asc(it >= num * 1000 DoEvents Loop End Sub'************************************************************** *使用方法: delay 3'3表示秒数•杀掉某程序执行的所有进程SubKillWord()Dim ProcessForEach Process InGetObject(”winmgmts:“).ExecQuery(”select * from Win32_Process where name='WINWORD.EXE'“)Process.Terminate(0)NextEnd Sub•监视某单元格的变化这里最需要注意的问题就是,如果在这个事件里对单元格进行改变,会继续出发此事件变成死循环。
Excel-vba宏代码-大全
Excel-vba宏代码-大全宏文件集▲打开全部隐藏工作表返回Sub 打开全部隐藏工作表()Dim i As IntegerFor i = 1 To Sheets.CountSheets(i).Visible = TrueNext iEnd Sub▲循环宏返回Sub 循环()AAA = Range("C2")Dim i As LongDim times As Longtimes = AAA'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 过滤一行If Range("完成标志") = "完成" Then Exit For '如果名为'完成标志'的命名单元的值等于'完成',则退出循环,如果一开始就等于'完成',则只执行一次循环就退出'If Sheets("传送参数").Range("A" & i).Text = "完成" Then Exit For '如果某列出现"完成"内容则退出循环Next iEnd Sub▲录制宏时调用“停止录制”工具栏返回Sub 录制宏时调用停止录制工具栏()/doc/4911298482.html,mandBars("Stop Recording").Visible = TrueEnd Sub▲高级筛选5列不重复数据至指定表返回Sub 高级筛选5列不重复数据至Sheet2()Sheets("Sheet2").Range("A1:E65536") = "" '清除Sheet2的A:D 列Range("A1:E65536").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet2.Range( _"A1"), Unique:=TrueSheet2.Columns("A:E").Sort Key1:=Sheet2.Range("A2"), Order1:=xlAscending,Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _:=xlPinYinEnd Sub▲双击单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$4"Call 宏1Cancel = TrueCase "$B$4"Call 宏2Cancel = TrueCase "$C$4"Call 宏3Cancel = TrueCase "$E$4"Call 宏4Cancel = TrueEnd SelectEnd Sub▲双击指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9", "C4:C9")) Is Nothing Then Call 打开隐藏表End Sub▲进入单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)'以单元格进入代替按钮对象调用宏If Range("$A$1") = "关闭" Then Exit SubSelect Case Target.AddressCase "$A$5" '单元地址(Target.Address),或命名单元名字(/doc/4911298482.html,)Call 宏1Case "$B$5"Call 宏2Case "$C$5"Call 宏3End SelectEnd Sub▲进入指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Range("$A$1") = "关闭" Then Exit SubIf Not Application.Intersect(Target, Range("A4:A9","C4:C9")) Is Nothing Then Call打开隐藏表▲在多个宏中依次循环执行一个(控件按钮代码)返回Private Sub CommandButton1_Click()Static RunMacro As IntegerSelect Case RunMacroCase 0宏1RunMacro = 1Case 1宏2RunMacro = 2Case 2宏3RunMacro = 0End SelectEnd Sub▲在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()With CommandButton1If .Caption = "保护工作表" ThenCall 保护工作表.Caption = "取消工作表保护"Exit SubEnd IfIf .Caption = "取消工作表保护" ThenCall 取消工作表保护.Caption = "保护工作表"Exit SubEnd IfEnd With▲在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Option ExplicitPrivate Sub CommandButton1_Click()With CommandButton1If .Caption = "宏1" ThenCall 宏1.Caption = "宏2"Exit SubEnd IfIf .Caption = "宏2" ThenCall 宏2.Caption = "宏3"Exit SubEnd IfIf .Caption = "宏3" ThenCall 宏3.Caption = "宏1"Exit SubEnd IfEnd WithEnd Sub▲根据A1单元文本隐藏/显示按钮(控件按钮代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1") > 2 ThenCommandButton1.Visible = 1ElseCommandButton1.Visible = 0End IfEnd SubPrivate Sub CommandButton1_Click()重排窗口End Sub▲当前单元返回按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()ActiveCell = CommandButton1.CaptionEnd Sub▲当前单元内容返回到按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()CommandButton1.Caption = ActiveCellEnd Sub▲奇偶页分别打印返回Sub 奇偶页分别打印()Dim i%, Ps%Ps = ExecuteExcel4Macro("GET.DOCUMENT(50)") '总页数MsgBox "现在打印奇数页,按确定开始."For i = 1 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iMsgBox "现在打印偶数页,按确定开始."For i = 2 To Ps Step 2ActiveSheet.PrintOut from:=i, To:=iNext iEnd Sub▲自动打印多工作表第一页返回Sub 自动打印多工作表第一页() Dim sh As IntegerDim xDim yDim syDim syzx = InputBox("请输入起始工作表名字:")sy = InputBox("请输入结束工作表名字:")y = Sheets(x).Indexsyz = Sheets(sy).IndexFor sh = y To syzSheets(sh).SelectSheets(sh).PrintOut from:=1, To:=1Next shEnd Sub▲查找A列文本循环插入分页符返回Sub 循环插入分页符()' Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容Dim i As LongDim times As Longtimes = Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"), "分页")'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)For i = 1 To timesCall 插入分页符Next iEnd SubSub 插入分页符()Cells.Find(What:="分页", After:=ActiveCell, LookIn:=xlValues, LookAt:= _xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _.ActivateActiveWindow.SelectedSheets.HPageBreaks.AddBefore:=ActiveCellEnd SubSub 取消原分页()Cells.SelectActiveSheet.ResetAllPageBreaksEnd Sub▲将A列最后数据行以上的所有B列图片大小调整为所在单元大小返回Sub 将A列最后数据行以上的所有B列图片大小调整为所在单元大小()Dim Pic As Picture, i&i = [A65536].End(xlUp).RowFor Each Pic In Sheet1.PicturesIf Not Application.Intersect(Pic.TopLeftCell, Range("B1:B" & i)) Is Nothing ThenPic.Top = Pic.T opLeftCell.TopPic.Left = Pic.TopLeftCell.LeftPic.Height = Pic.TopLeftCell.HeightPic.Width = Pic.TopLeftCell.WidthEnd IfNextEnd Sub▲返回光标所在行数返回Sub 返回光标所在行数()x = ActiveCell.RowRange("A1") = xEnd Sub▲在A1返回当前选中单元格数量返回Sub 在A1返回当前选中单元格数量()[A1] = Selection.CountEnd Sub▲返回当前工作簿中工作表数量返回Sub 返回当前工作簿中工作表数量()t = Application.Sheets.CountMsgBox tEnd Sub▲返回光标选择区域的行数和列数返回Sub 返回光标选择区域的行数和列数()x = Selection.Rows.County = Selection.Columns.CountRange("A1") = xRange("A2") = yEnd Sub▲工作表中包含数据的最大行数返回Sub 包含数据的最大行数()n = Cells.Find("*", , , , 1, 2).RowMsgBox nEnd Sub▲返回A列数据的最大行数返回Sub 返回A列数据的最大行数() n = Range("a65536").End(xlUp).RowRange("B1") = nEnd Sub▲将所选区域文本插入新建文本框返回Sub 将所选区域文本插入新建文本框()For Each rag In Selectionn = n & rag.Value & Chr(10)NextActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizon tal, ActiveCell.Left +ActiveCell.Width, ActiveCell.T op + ActiveCell.Height, 250#, 100).SelectSelection.Characters.Text = "问题:" & nWith Selection.Characters(Start:=1, Length:=3).Font.Name = "黑体".FontStyle = "常规".Size = 12End WithEnd Sub▲批量插入地址批注返回Sub 批量插入地址批注()On Error Resume NextDim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selection/doc/4911298482.html,ment.Deleter.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.Text Text:="本单元格:" & r.Address & " of " & Selection.AddressNextEnd IfEnd Sub▲批量插入统一批注返回Sub 批量插入统一批注()Dim r As Range, msg As Stringmsg = InputBox("请输入欲批量插入的批注", "提示", "随便输点什么吧")If Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.TextText:=msgNextEnd IfEnd Sub▲以A1单元内容批量插入批注返回Sub 以A1单元内容批量插入批注()Dim r As RangeIf Selection.Cells.Count > 0 ThenFor Each r In Selectionr.AddComment/doc/4911298482.html,ment.Visible = False /doc/4911298482.html,ment.TextText:=[a1].T extNextEnd IfEnd Sub▲不连续区域插入当前文件名和表名及地址返回Sub 批量插入当前文件名和表名及地址()For Each mycell In Selectionmycell.FormulaR1C1 = "[" + /doc/4911298482.html, + "]" + /doc/4911298482.html, +"!" + mycell.AddressNextEnd Sub▲不连续区域录入当前单元地址返回Sub 区域录入当前单元地址() For Each mycell In Selectionmycell.FormulaR1C1 = mycell.AddressNextEnd Sub▲连续区域录入当前单元地址返回Sub 连续区域录入当前单元地址()Selection = "=ADDRESS(ROW(),COLUMN(),4,1)"Selection.CopySelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=FalseEnd Sub▲返回当前单元地址返回Sub 返回当前单元地址()d = ActiveCell.Address[A1] = dEnd Sub▲不连续区域录入当前日期返回Sub 区域录入当前日期()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d")End Sub▲不连续区域录入当前数字日期返回Sub 区域录入当前数字日期() Selection.FormulaR1C1 = Format(Now(), "yyyymmdd")End Sub▲不连续区域录入当前日期和时间返回Sub 区域录入当前日期和时间()Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d h:mm:ss")End Sub▲不连续区域录入对勾返回Sub 批量录入对勾()Selection.FormulaR1C1 = "√"End Sub▲不连续区域录入当前文件名返回Sub 批量录入当前文件名()Selection.FormulaR1C1 = /doc/4911298482.html,End Sub▲不连续区域添加文本返回Sub 批量添加文本()Dim s As RangeFor Each s In Selections = s & "文本内容"NextEnd Sub▲不连续区域插入文本返回Sub 批量插入文本()Dim s As RangeFor Each s In Selections = "文本内容" & sNextEnd Sub▲从指定位置向下同时录入多单元指定内容返回Sub 从指定位置向下同时录入多单元指定内容()Dim arrarr = Array("1", "2", "13", "25", "46", "12", "0", "20")[B2].Resize(8, 1) = Application.WorksheetFunction.Transpose(arr)End Sub▲按aa工作表A列的内容排列工作表标签顺序返回Sub 按aa工作表A列的内容排列工作表标签顺序()Dim I%, str1$I = 1Sheets("aa").SelectDo While Cells(I, 1).Value <> ""str1 = Trim(Cells(I, 1).Value)Sheets(str1).SelectSheets(str1).Move after:=Sheets(I)I = I + 1Sheets("aa").SelectLoopEnd Sub▲以A1单元文本作表名插入工作表返回Sub 以A1单元文本作表名插入工作表()Dim nm As Stringnm = [a1]Sheets.Add/doc/4911298482.html, = nmEnd Sub▲删除全部未选定工作表返回Sub 删除全部未选定工作表()Dim sht As Worksheet, n As Integer, iFlag As BooleanDim ShtName() As Stringn = ActiveWindow.SelectedSheets.CountReDim ShtName(1 To n)n = 1For Each sht In ActiveWindow.SelectedSheetsShtName(n) = /doc/4911298482.html,n = n + 1NextApplication.DisplayAlerts = FalseFor Each sht In SheetsiFlag = FalseFor i = 1 To n - 1If ShtName(i) = /doc/4911298482.html, TheniFlag = TrueExit ForEnd IfNextIf Not iFlag Then sht.DeleteNextApplication.DisplayAlerts = TrueEnd Sub▲工作表标签排序返回Sub 工作表标签排序()Dim i As Long, j As Long, nums As Long, msg As Longmsg = MsgBox("工作表按升序排列请选'是[Y]'. " & vbCrLf & vbCrLf & "工作表按降序排列请选 '否[N]'", vbYesNoCancel, "工作表排序")If msg = vbCancel Then Exit Subnums = Sheets.CountIf msg = vbYes Then 'Sort ascendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) < UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iElse 'Sort descendingFor i = 1 To numsFor j = i To numsIf UCase(Sheets(j).Name) > UCase(Sheets(i).Name) ThenSheets(j).Move Before:=Sheets(i)End IfNext jNext iEnd IfEnd Sub▲定义指定工作表标签颜色返回Sub 定义指定工作表标签颜色() Sheets("Sheet1").T ab.ColorIndex = 46End Sub▲在目录表建立本工作簿中各表链接目录返回Sub 在目录表建立本工作簿中各表链接目录()Dim s%, Rng As RangeOn Error Resume NextSheets("目录").ActivateIf Err = 0 ThenSheets("目录").UsedRange.DeleteElseSheets.Add/doc/4911298482.html, = "目录" End If。
excel vba 教程
excel vba 教程Excel VBA教程:VBA(Visual Basic for Applications)是一种用于自动化Microsoft Office应用程序的编程语言。
在Excel中,通过VBA可以编写宏(Macro),实现自动化的数据处理和操作。
以下是一些常用的VBA代码示例,帮助你快速入门:1. 插入新模块: 在Excel的"开发工具"选项卡中,点击"Visual Basic"按钮,然后在项目资源管理器中右键点击"VBAProject",选择"插入"->"模块"。
2. 定义变量: 使用"Dim"关键字来声明一个变量,例如:Dim myValue As Double。
3. 循环语句: 使用"For"和"Next"关键字来实现循环。
例如:```For i = 1 To 10'循环操作Next i```4. 条件语句: 使用"If...Then...Else"关键字来实现条件判断。
例如:```If condition Then'条件为真时的操作Else'条件为假时的操作End If```5. 单元格操作: 使用Range对象来访问和操作单元格。
例如:```Range("A1").Value = "Hello" '将文本"Hello"写入A1单元格Range("B3").Formula = "=A1+A2" '在B3单元格中输入公式,求和A1和A2单元格的值```6. 打开和保存文件: 使用Workbooks对象来打开和保存Excel 文件。
例如:```Workbooks.Open "C:\path\to\file.xlsx" '打开文件ActiveWorkbook.SaveAs "C:\path\to\newfile.xlsx" '另存为新文件```7. 错误处理: 使用"On Error Resume Next"和"Err"对象来处理错误。
excel vba 解释
excel vba 解释VBA(Visual Basic for Applications)是一种基于事件驱动的编程语言,通常与Microsoft Office 应用程序(如Excel、Word、Access等)一起使用。
VBA允许你以编程的方式控制这些应用程序,自动执行任务、创建自定义功能和处理数据。
下面是一些关于Excel VBA的基本解释:1. VBA编辑器:-在Excel中,你可以通过按下`Alt + F11`打开VBA编辑器。
- VBA编辑器是一个集成开发环境(IDE),用于编写、编辑和调试VBA代码。
2. 模块和过程:- VBA代码通常存储在模块中。
模块是一个包含VBA代码的容器。
-过程是执行特定任务的代码块,可以是子过程(Sub)或函数(Function)。
3. 基本语法:- VBA语法类似于其他基于Visual Basic的语言。
-学习VBA的基础包括变量、条件语句(如`If...Then...Else`)、循环语句(如`For`和`Do...Loop`)等。
```vbaSub MyMacro()' 这是一个VBA子过程的例子Dim x As Integerx = 10If x > 5 ThenMsgBox "x 大于5"ElseMsgBox "x 不大于5"End IfEnd Sub```4. 对象模型:-VBA是基于对象的。
Excel应用程序中的各种元素(工作簿、工作表、单元格等)都是对象。
-通过操作这些对象,你可以执行各种操作。
例如,通过`Worksheets`对象可以访问和操作工作表。
```vbaSub AccessCell()' 访问单元格并显示其值Dim ws As WorksheetSet ws = ThisWorkbook.Sheets("Sheet1")MsgBox ws.Range("A1").ValueEnd Sub```5. 事件处理:- VBA允许你响应特定事件,例如工作表的变更、单元格的变更等。
教你封装VBA代码的方法
教你封装VBA代码Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。
VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。
VBA 易于学习掌握,用户可以容易地将日常工作转换为VBA程序代码,使工作自动化。
但是VBA在代码的保护上却存在着缺陷。
如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。
而且即使设置了密码保护,也很容易被人破解。
笔者就曾用破解工具officekey轻松地破解了他人设置的密码保护,不费吹灰之力便浏览了其中的代码,而且从中发现了文档保护密码。
可见,要想保护自己的VBA代码,仅仅设置密码保护是不够的。
但是VBA在代码的保护上却存在着缺陷。
如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。
而且即使设置了密码保护,也很容易被人破解。
笔者就曾用破解工具officekey轻松地破解了他人设置的密码保护,不费吹灰之力便浏览了其中的代码,而且从中发现了文档保护密码。
可见,要想保护自己的VBA代码,仅仅设置密码保护是不够的。
我们知道,Visual C++、Visual Basic和C++ Builder以及Delphi 等编译器所编译出来的程序不容易被人破解(相对来说),这是因为代码被编译成了可执行文件或者动态链接库文件。
那么,我们是否可以将VBA代码封装到动态链接库文件中,然后用Word调用呢?回答是肯定的。
而且这样做还有一个好处,即可以加快代码的运行速度。
一、将VBA代码封装成动态链接库假如我们已经写好了一个VBA工程,而且运行无误。
1.建立VB工程及一般性操作首先,我们需要两种工具,其中当然包括Microsoft Word,另外一种是Microsoft Basic 6.0。
打开Microsoft Basic 6.0,在“新建工程”中选取“ActiveX DLL”,新建一个工程。
如何在Excel中使用VBA编程实现自定义功能
如何在Excel中使用VBA编程实现自定义功能Excel是一款功能强大的电子表格软件,它允许用户进行各种数据处理和分析。
然而,有时候我们可能需要实现一些自定义功能,以便更好地适应个人的需求。
在这种情况下,VBA编程可以成为一个非常有用的工具。
本文将向您介绍如何在Excel中使用VBA编程实现自定义功能。
1. 打开Visual Basic编辑器要开始使用VBA编程,您首先需要打开Excel的Visual Basic编辑器。
在Excel中,您可以通过按下Alt+F11快捷键或者点击“开发人员”选项卡中的“Visual Basic”按钮来打开编辑器。
2. 创建一个VBA模块在Visual Basic编辑器中,您可以看到工程资源管理器窗口和代码窗口。
首先,您需要创建一个VBA模块来存放您的自定义功能代码。
在“工程资源管理器”窗口中,右键点击Excel对象,选择“插入” - “模块”。
这样,一个新的VBA模块就会出现在代码窗口中。
3. 编写VBA代码在VBA模块中,您可以编写自定义功能的代码。
VBA提供了丰富的语法和函数,可以用来处理各种Excel操作。
以下是一些常用的VBA编程功能示例:3.1 定义和调用子过程或函数使用Sub或Function关键字可以定义一个子过程或函数,并在需要的时候调用它们。
例如:```VBASub MySub()' 这里是您的代码End SubFunction MyFunction() As Variant' 这里是您的代码MyFunction = 结果End Function```3.2 操作单元格和范围通过使用Range对象,您可以对Excel中的单元格和范围进行操作。
例如:```VBASub CellOperation()' 选中A1单元格Range("A1").Select' 设置A1单元格的值为100Range("A1").Value = 100' 清空A1单元格的内容Range("A1").ClearContentsEnd Sub```3.3 循环和条件语句VBA支持各种循环和条件语句,您可以使用它们来处理和控制数据。
excel的vba模块的用法
Excel的VBA模块是一种非常强大的工具,可以帮助用户实现自动化、批量处理数据、创建复杂的报表等功能。
在使用Excel的过程中,VBA模块的运用可以提高工作效率,减少重复劳动,同时还能够实现一些复杂的数据处理和分析任务。
下面我们来详细介绍一下Excel的VBA模块的用法。
一、了解VBA模块的基本概念1.1 什么是VBA模块VBA全称Visual Basic for Applications,是一种基于Microsoft Visual Basic的宏语言,可以在Office软件中进行编程,包括Excel、Word、PowerPoint等。
而VBA模块指的就是在Excel中使用VBA语言编写的代码段,用于实现特定的功能和操作。
1.2 VBA模块的作用VBA模块可以实现Excel的自动化操作、批量处理数据、创建复杂的报表、自定义函数等功能。
通过编写VBA代码,用户可以根据具体的需求,设计出符合自己工作流程的功能,并且可以大大提高工作效率。
二、VBA模块的基本操作2.1 打开VBA编辑器在Excel中打开VBA编辑器的方法有多种,可以通过快捷键Alt +F11,也可以通过“开发工具”选项卡中的“Visual Basic”按钮来打开VBA编辑器。
2.2 编写VBA代码在VBA编辑器中,用户可以编写和编辑VBA代码。
VBA代码是由一系列的语句和表达式组成的,通过这些代码可以实现各种操作和功能。
用户可以根据自己的需求,编写相应的VBA代码段。
2.3 调试VBA代码在编写和编辑VBA代码的过程中,经常需要进行调试和测试。
VBA编辑器提供了丰富的调试功能,用户可以设置断点、单步执行、监视变量等操作,帮助用户快速定位和解决代码中的问题。
三、VBA模块的常用功能和应用3.1 自动化操作通过VBA模块,用户可以实现Excel的自动化操作,比如自动打开、保存、关闭工作簿,自动填充数据、自动执行特定的计算和分析等操作,大大提高工作效率。
VBA代码封装过程
VBA代码封装过程介绍VBA(Visual Basic for Applications)是一种基于Microsoft Visual Basic的宏编程语言,广泛地用于Microsoft Office套件中的应用程序,包括Excel、Word和PowerPoint等。
在进行VBA编程时,代码封装的概念非常重要。
代码封装可以提高代码的可读性、复用性和维护性,使得我们的代码更加模块化和灵活。
本文将介绍VBA代码封装过程的原则和步骤,并给出一些实例进行说明。
原则在进行VBA代码封装时,我们可以遵循以下原则:1.可读性:代码应该具备良好的可读性,使用有意义的变量名、函数名和模块名,适当添加注释来解释代码的作用和逻辑。
2.复用性:代码封装的目标之一是提高代码的复用性,即尽量将可复用的代码封装成函数或子过程,方便在多个地方调用。
3.模块化:将代码按照功能或逻辑划分成多个模块,每个模块专注于一个特定的任务或功能,便于管理和维护。
4.低耦合:代码封装的目的之一是减少代码之间的耦合性,模块之间应该尽量独立,避免过多的依赖关系。
5.高内聚:代码封装的模块应该具备高内聚性,即模块内部的代码功能相关,职责明确。
步骤下面将按照一般的步骤介绍VBA代码封装过程:1. 分析需求在进行代码封装之前,首先需要明确需求。
分析需求可以帮助我们确定代码封装的范围和目标。
2. 创建模块根据需求,创建一个新的模块或者在现有模块中创建一个新的子过程。
模块可以理解为一个代码容器,用于封装一组相关的函数和子过程。
3. 定义变量和常量在模块的顶部,定义所需的变量和常量。
变量和常量的名称应该具有描述性,以便于代码的可读性和维护性。
4. 编写函数和子过程根据需求,在模块中编写相应的函数和子过程。
函数和子过程应该具有良好的功能划分和职责明确。
5. 添加注释在代码中适当添加注释,解释代码的功能、逻辑和输入输出等信息。
注释可以提高代码的可读性,便于他人理解和维护代码。
VBA程序打包和部署的方法和工具介绍
VBA程序打包和部署的方法和工具介绍VBA(Visual Basic for Applications)是一种用于Microsoft Office应用程序的编程语言,它允许用户使用宏来自动执行各种任务。
当您编写了一个复杂的VBA程序后,将其打包和部署到其他用户的计算机上可能会变得复杂和困难。
本文将介绍一些方法和工具,帮助您轻松地打包和部署VBA程序。
1. 打包VBA程序打包VBA程序是将所有相关文件和依赖项收集到一个单独的文件中,以便在其他计算机上运行。
下面是一些打包VBA程序的方法:a) 使用Microsoft Office自带的打包功能Office中的宏功能可以将所有相关文件打包到一个单独的文件中,以便在其他计算机上运行。
在VBA编辑器中,选择“文件”>“导出文件”,然后选择“导出为文件夹”以将所有相关文件一并导出。
b) 使用第三方打包工具除了Office自带的打包功能外,还有一些第三方工具可以帮助您打包VBA程序。
例如,WinRAR和7-Zip都是常用的打包工具,它们可以将所有相关文件打包为一个压缩文件并进行发布。
2. 部署VBA程序部署VBA程序是将打包后的程序安装到目标计算机上,并确保能够正常运行。
以下是几种常见的部署VBA程序的方法和工具:a) 使用Office自带的安装程序Office自带的安装程序可以帮助您将VBA程序部署到其他计算机上。
在VBA编辑器中,选择“文件”>“导出文件”,然后选择“导出为压缩文件”以将所有相关文件一并导出。
在目标计算机上,运行该压缩文件并按照提示进行安装。
b) 使用Windows InstallerWindows Installer是Windows操作系统的标准安装程序,它可以将应用程序打包为一个独立的安装程序(.msi文件)。
可以使用第三方的安装程序制作工具(如Advanced Installer),将打包的VBA程序制作为一个.msi安装程序,并在目标计算机上运行该.msi文件进行安装。
Excel?VBA的封装,加密
Excel?VBA的封装,加密对想发布自己的Excel VBA的开发者来说,Excel VBA本身不提供VBA代码的加密,封装。
目前比较最可靠的Excel VBA代码加密的方法,就是把VBA代码编译成DLL(动态链接库文件),在VBA中调用,从而实现VBA代码的加密,封装,方便和Excel文件整合发布出去。
DLL文件基本没法被破解,除此之外其他的VBA加密方法,都可以被轻易破解。
用户只需要你的Excel文件,和这个dll文件就够了,不必安装其他任何程序。
编译成DLL文件其实很简单。
机子上安装Visual Basic 6.0就可以编译成dll文件了,Visual Basic .Net反倒有点麻烦。
Visual Basic通过OLE(对象链接引擎)技术调用Excel以及其中的对象。
总的来说,VBA代码只要做一些简单修改就可以了。
主要是对Excel对象的引用,不然VB不能识别vba代码中的对象。
比如如下的VBA代码windows(workbook1).activaterange("L50")=1直接放进VB中编译成Dll就会有问题,因为VB不能直接识别range对象。
需要添加几行简单的代码来告诉vb怎么引用excel中的这些对象:dim xlapp as excel.applicatiiondim xlbook as excel.workbookdim xlsheet as excel.worksheetset xlapp=getobject(,"excel.application)set xlbook=getobject(xxx)set xlsheet=xlbook.worksheets(1)然后就照搬你原有的vba代码,但是前面加上对象引用:xlsheet.range("L50")=1对VBA代码做这样修改,在VB中调试通过,就可以成功的把多个sub子程序全部编译封装在一个单独的DLL文件了。
Windows7系统封装教程(详细图解)
Windows7系统封装教程(详细图解)Windows7系统封装教程(详细图解)一、封装前准备1、Windows7官方发布的安装光盘(镜像)(这里就不提供给大家了,大家自己想办法)2、需要预装的各种应用软件,如Office/、Photoshop、Win7优化大师等等,当然,作为对软媒的支持,也加上闪游浏览器和酷点吧。
3、UltraISO和Windows7 AIK。
Windows7 AIK简体中文版的下载地址为:download.microsoft./download/6/3/1/631A7F90-E5CE-43AA-AB05-EA82AEAA402A/KB3AIK_.iso4、WindowsPE光盘(最好是Windows7PE光盘)。
Windows7PE光盘可以使用Windows7AIK制作,也可以在以下地址下载:/zh-/files/709d244c-2e5a-11de-a413-0019d11a795f/二、安装操作系统和应用程序1、安装Windows7操作系统。
安装操作系统有4个环节要注意:①操作系统最好安装在C盘,安装期间(包括后面安装应用程序和进行封装)最好不要连接到网络。
②如果在安装操作系统过程中输入序列号,进行封装以后再重新安装操作系统不会再提示输入序列号。
除非要制作成OEM版的封装系统,否则在安装过程中提示输入序列号时,不要输入序列号,直接点―下一步‖继续系统的安装。
③为保持封装系统纯净,安装好Windows7操作系统后最好不要安装硬件的驱动。
当然,安装驱动程序也不会影响系统的封装。
④为避免调整优化系统、安装应用软件过程中出现不必要的错误和产生错误报告文件,第一次进入系统后应当禁用UAC和关闭错误报告。
禁用UAC和关闭错误报告的方法如下:——打开―控制面板‖,点击―系统和安全‖,选择―操作中心‖,点击―安全‖,在展开的详细设置内容中找到并点击―用户帐户控制‖下方的―选择您 UAC级别‖,然后在弹出的对话框中将左边的滑杆调整为―从不通知‖,再点击―确定‖就可以禁用UAC了(需要重新启动系统才能生效)。
EXCEL-VBA编程常用代码
sheets("sheet1").Visible=True 打印预览 有时候我们想把所有的 EXCEL 中的 SHEET 都打印预览,请使用该段代码,它将在 你现有的工作簿中循环,直到最后一个工作簿结束循环预览。 Dim my As Worksheet For Each my In Worksheets my.PrintPreview Next my 得到当前单元格的地址 msgbox ActiveCell.Address 得到当前日期及时间 msgbox date & chr(13) & time 保护工作簿 ActiveSheet.Protect 取消保护工作簿
注意以下代码都不再添加 sub “代码名称” 和 end sub 请自己添加! 给当前单元格赋值 ActiveCell.Value = "你好!!!" 给指定单元格赋值 例如:A1单元格内容设为"HELLO" Range("a1").value="hello" 又如:你现在的工作簿在 sheet1 上,你要往 sheet2 的A1单元格中插入"HE LLO" 1. sheets("sheet2").select range("a1").value="hello" 或 2. Sheets("sheet1").Range("a1").Value = "hello" 说明: 1.sheet2 被选中,然后在将“HELLO"赋到 A1 单元格中。 2.sheet2 不必被选中,即可“HELLO"赋到 sheet2 的 A1 单元格中。 隐藏工作表 '隐藏 SHEET1 这张工作表
ExcelVBA实例教程
ExcelVBA实例教程Excel VBA是一种编程语言,可以用于在Excel中自动化执行各种任务。
它可以帮助用户提高工作效率,并简化复杂的操作。
下面是一些Excel VBA实例教程,可以帮助您更好地理解和使用Excel VBA。
1.创建一个简单的宏:-在左侧的项目窗格中,双击“这台电脑”以打开一个新的代码模块。
-在代码窗口中输入以下代码:```Sub HelloWorldMsgBox "Hello, World!"End Sub```-按下F5来运行宏或单击工具栏上的运行按钮。
2.在工作表中输入数据:- 在Excel中创建一个新的工作表。
```Sub InputDataWorksheets("Sheet1").Range("A1").Value = "Hello, World!"End Sub```- 运行该宏后,您将在工作表的A1单元格中看到“Hello, World!”。
3.循环遍历数据:- 在Excel中创建一个新的工作表,并在A列中填入一些数据。
```Sub LoopDataDim i As IntegerFor i = 1 To 10Worksheets("Sheet1").Cells(i, 2).Value = iNext iEnd Sub```-运行该宏后,您将在工作表的B列中看到从1到10的数字。
4.使用条件语句:- 在Excel中创建一个新的工作表,并在A1和A2单元格中填入一些数据。
```Sub ConditionalStatementIf Worksheets("Sheet1").Range("A1").Value >Worksheets("Sheet1").Range("A2").Value ThenMsgBox "A1大于A2"ElseMsgBox "A1小于或等于A2"End IfEnd Sub```-运行该宏后,将根据A1和A2单元格中的值显示相应的消息框。
教程一种封装VBA代码的方法
教程一种封装VBA代码的方法01写在前面使用程序:1、MicrosoftOffice Excel 20162、MicrosoftVisual Basic 6.0需求:在工作表的C1单元格得出A1单元格+B1单元格的值。
设计的VBA代码:••••Sub Test() On Error Resume Next Range("C1") = Cells(1, 1) + Cells(1, 2)End Sub02使用VB6.0制作DLL文件一、启动VB6.0,新建一个ActiveX DLL工程:二、引用:在VB中对Excel的引用不同版本的EXCEL在“引用”窗口里显示的版本号也不同:EXCEL2000(MicrosoftOffice 9.0)EXCEL2002(MicrosoftOffice 10.0),即ExcelXP EXCEL2003(MicrosoftOffice 11.0)EXCEL2007(MicrosoftOffice 12.0)EXCEL2010(MicrosoftOffice 14.0)EXCEL2013(MicrosoftOffice 15.0)EXCEL2016(MicrosoftOffice 16.0)三、修改ActiveX DLL的工程名称和类模块名称四、编写代码:在代码窗口输入代码,过程名称为Test:••••••••Sub Test() On Error Resume Next Dim VBt, YB '定义变量VBt Set VBt = GetObject(,"Excel.Application") '使VBt表示为EXCEL对象 Set YB = VBt.ActiveSheet '使YB表示为EXCEL的当前工作表 '注意要在对象前加上YB变量以表示是EXCEL当前工作表的对象YB. Range("C1") = YB.Cells(1,1).Value + YB.Cells(1,2).ValueEnd Sub五、设置工程属性(为使开发的程序更规范,可以对工程属性加以描述【非必要设置,可以省略】):六、保存工程、测试、生成DLL文件:1、保存工程:保存本工程以作为将来修改代码和升级程序的需要;2、测试工程:执行快捷工具栏上的“启动”按钮,检查是否存在错误;3、生成DLL文件:制作DLL文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Windows 7 环境下封装Excel VBA 代码
一、安装Visual Basic 6.0
在Windows 7 下安装Visual Basic 6.0安装会遇到一些兼容性问题,而Windows XP 则很顺利。
当某些程序必须要在Windows 7 下调试的时候,就一定要面对Windows 7 了。
(一)进入安装文件夹,点击“Setup.exe”运行Visual Basic 6.0安装程序。
(二)出现兼容性问题提示,单击“运行程序”。
(三)进入Visual Basic 6.0安装向导,单击“下一步”。
(四)出现“最终用户许可协议”对话框,选择“接受协议”,单击“下一步”。
(五)进入“产品和用户ID”对话框,在“请输入产品的ID号”处输入ID号,全部输入0至9中的任意一个,然后单击“下一步”。
(六)保持默认选择“安装Visual Basic 6.0中文企业版”,单击“下一步”。
(七)选择公用安装文件夹,采取默认或自定义均可。
然后单击“下一步”
(八)再次出现兼容性问题提示,直接单击“运行程序”。
(九)进入Visual Basic 6.0 安装程序,单击“继续”后,单击“确定”。
(十)出现“发现了旧版本的Visual SourceSafe”提示,选择“是”
(十一)在选择安装类型对话框中,封装Excel VBA 代码选择“典型安装”即可。
(十二)出现“使用新的Visual SourceSafe数据库格式”提示,选择“是”
(十三)开始Visual Basic 6.0安装。
(十四)安装完毕,单击“重新启动Windows”。
重新启动Windows后,自动弹出下面的对话框。
如果需要帮助文档,可单击“下一步”继续安装MSDN,对于Visual Basic 6.0的初学者,建议安装。
在安装MSDN 过程中,插入MSDN安装盘按照提示进行安装。
如果不需要帮助文档,单击“退出”,Visual Basic 6.0安装完成。
二、运行Visual Basic 6.0
由于在Windows 7下运行Visual Basic 6.0存在兼容性问题,因此必须对其进行设置才可正常运行。
(一)单击“开始→所有程序→Microsoft Visual Basic 6.0 中文版”,用鼠标右击“Microsoft Visual Basic 6.0 中文版”,点击“属性”。
(二)在弹出的“Microsoft Visual Basic 6.0 中文版属性”对话框中,勾选“以兼容模式运行这个程序”与“以管理员身份运行此程序”其中之一,如两者都不勾选,也可在点击“Microsoft Visual Basic 6.0 中文版”时以管理员身份运行,否则将弹出下面的错误:
(三)勾选“禁用视觉主题”、“禁用桌面元素”或两者均勾选,以使程序运行流畅。
至此,Visual Basic 6.0可以正常运行了。
我们封闭一个Excel VBA 代码试试。
(四)运行Visual Basic 6.0中文版,在自动弹出的“新建工程”对话框中选择“ActiveX Dll”。
(五)在代码框中输入如下代码:
Sub Test()
MsgBox "Welcome to Excel VBA!"
End Sub
“MsgBox "Welcome to Excel VBA!"”这段代码显示一条弹出信息,虽然很简单,但却可以测试Visual Basic 6.0封装Excel VBA 代码是否正常。
代码输入完毕后,单击“工程→引用”,对封装应用程序进行设置。
在弹出的“引用-工程1”对话框中,勾选“Microsoft Excel 12.0 Object Library”和“Microsoft Office 12.0 Object Library”。
这里的12.0指的是Office 2007,Office 2003是11.0,Office 2010是14.0,Office 2013是15.0,外国人认为13是不吉利的数字,因而是没有13.0的。
勾选完毕后单击“确定”。
(六)接下保存“工程1”到一个指定文件夹,然后单击“文件→生成工程1.dll”,如果没有什么提示,生成“ActiveX Dll”成功。
(七)在Excel VBA 中调用刚才生成的“工程1.dll”。
进入VBA前请首先启用宏或对宏安全性进行设置。
打开或新建一个工作薄,进入VBE编辑环境,单击“工具→引用”,在弹出的“引用-VBAProject”对话框中单击“浏览”找到“工程 1.dll”,单
击“打开”,最后再单击“确定”。
(八)在VBE编辑环境中双击“ThisWorkbook”对象,输入如下代码:
Private Sub Workbook_Open() '注册工程1.dll
Shell "Regsvr32 /s " & VBA.Chr(34) & ThisWorkbook.Path & "\工程1.dll" & VBA.Chr(34), vbHide
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) '反注册工程1.dll
Shell "Regsvr32 /u /s " & VBA.Chr(34) & ThisWorkbook.Path & "\工程1.dll" & VBA.Chr(34), vbHide
End Sub
关闭VBE环境,在Sheet1工作表中插入一个按键,添加如下代码:
Private Sub CommandButton1_Click()
Dim kk As New Class1 'Class1是类模块名称
kk.Test 'Test是Class1中的过程名称
Set kk = Nothing
End Sub
在上述代码中,“Dim kk As New Class1”设置一个对象kk,“kk.Test”引用kk对象中的Test过程。
(九)关闭VBE环境,单击“CommandButton1”试试。
Visual Basic 6.0 封装Excel VBA 代码环境安装测试完毕。
如果以后出现错误提示,错误是在Visual Basic 6.0中的代码。
Visual Basic 6.0最多只能在Windows 7下兼容安装,在Windows 8中就不能安装了。
在封装EXcel VBA代码时需注意,在Windows 7 环境下封装的Dll可在Windows XP环境下运行,在高版本Excel VBA
中封装的可在低版本的Excel VBA中运行,反之则不行。
所以,当Visual Basic 6.0代码编辑完成后,尽量在Windows 7和Excel 2013环境下封装,这样通用性要强一些。