Sub AbsorbThisProcedure()

    If Application.VBE.MainWindow.Visible = False Then
MsgBox "请先激活VBE编辑窗口再执行!"
Exit Sub
End If On Error Resume Next
Set VbCodePane = Application.VBE.ActiveCodePane '获取当前代码窗口
If Err.Number = 1004 Then
MsgBox "请勾选“信任对VBA工程对象模型的访问”"
Exit Sub
Else
If Err.Number <> 0 Then
Exit Sub
End If
End If
On Error GoTo 0 Dim CodeMod As CodeModule
Dim CodeContent As String
Dim CurCodePane As Object
Dim ProcName As String
Dim LineCount As Long
'Dim OneAddIn As AddIn
Dim Wb As Workbook
Dim Sht As Worksheet
Dim Rng As Range
Dim FindRng As Range
Dim StartLine&, EndLine&, StartCol&, EndCol& Set CurCodePane = ActiveWorkbook.VBProject.VBE.ActiveCodePane
CurCodePane.GetSelection StartLine, StartCol, EndLine, EndCol ProcName = ActiveWorkbook.VBProject.VBE.SelectedVBComponent.CodeModule.ProcOfLine(StartLine, vbext_pk_Proc) Debug.Print ProcName StartLine = ActiveWorkbook.VBProject.VBE.SelectedVBComponent.CodeModule.ProcStartLine(ProcName, vbext_pk_Proc)
LineCount = ActiveWorkbook.VBProject.VBE.SelectedVBComponent.CodeModule.ProcCountLines(ProcName, vbext_pk_Proc) Set CodeMod = Application.VBE.ActiveCodePane.CodeModule
CodeContent = CodeMod.Lines(StartLine, LineCount) Debug.Print CodeContent If Len(CodeContent) = 0 Then Exit Sub msg = MsgBox("是否确定添加本过程到加载宏?按是继续执行!按否退出执行!", vbYesNo)
If msg = vbNo Then Exit Sub Set Wb = ThisWorkbook
Set Sht = Wb.Worksheets("CodeData")
With Sht EndRow = .Range("B65536").End(xlUp).Row
Set Rng = .Range("B1:B" & EndRow)
Set FindRng = Rng.Find(What:=ProcName, LookAt:=xlWhole) If FindRng Is Nothing Then
Set Rng = .Range("B65536").End(xlUp).Offset(1)
Rng.Value = ProcName
Rng.Offset(0, 1).Value = CodeContent Else
msg = MsgBox("模块名称已经存在,是否覆盖模块代码?", vbYesNo, "Tips")
If msg = vbNo Then
GoTo FreeObject
Else
FindRng.Offset(0, 1).Value = CodeContent
End If
End If End With Call AddMenu Wb.Save
FreeObject:
Set CodeMod = Nothing
Set Wb = Nothing
Set Rng = Nothing
Set FindRng = Nothing End Sub

  

20170719xlVbaAbsorbProcedure的更多相关文章

随机推荐

  1. MySQL从删库到跑路_高级(五)——触发器

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.触发器简介 1.触发器简介 触发器是和表关联的特殊的存储过程,可以再插入,删除或修改表中的数据时触发执行,比数据 ...

  2. Cannot find JRE '1.8'

  3. ACM题目———— 一种排序(STL之set)

    描述 输入 第一行有一个整数 0<n<10000,表示接下来有n组测试数据:每一组第一行有一个整数 0<m<1000,表示有m个长方形:接下来的m行,每一行有三个数 ,第一个数 ...

  4. 20145104张家明 《Java程序设计》第三次实验设计

    合作伙伴是20145103 下面是我们的git成果 首先下载他托管上去的代码 然后运行下载的代码 之后对下载的代码进行修改 然后推送上去 下载修改后的代码并运行 •软件工程是把系统的.有序的.可量化的 ...

  5. 20145122《JAVA开发环境的熟悉》实验报告

    package fib; public class fibonaci { public static void main(String[] args) { Fibonaci(20); } public ...

  6. 20145208 蔡野 《网络对抗》Exp4 恶意代码分析

    20145208 蔡野 <网络对抗>Exp4 恶意代码分析 问题回答 总结一下监控一个系统通常需要监控什么.用什么来监控. 监控一个系统通常需要监控这个系统的注册表,进程,端口,服务还有文 ...

  7. TI 实时操作系统SYS/BIOS使用总结

    1:概述: SYS/BIOS 是一个可扩展的实时的操作系统.具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性,强壮的抢占系统,优化的内存分配和堆栈管理(尽量少的消耗和碎片) ...

  8. C# 将文件转换为 Stream

    public Stream FileToStream(string fileName) { // 打开文件 FileStream fileStream = new FileStream(fileNam ...

  9. SQLSERVER 数据从一张那个表复制到另一张表

    insert into 表名1 ( 字段A ,字段B ,字段C) SELECT 字段A ,字段B ,字段C FROM 表名2 (where条件看情况而定)

  10. Python3基础 str title 单词首字母大写,其余均为小写

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...