20170719xlVbaAbsorbProcedure
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的更多相关文章
随机推荐
- SoapUI 使用变量
			登录问题不好解决, 只能临时用cookie来执行 1.变量定义 2.引用变量 3.调用Header 
- 2018-2019-2 20165209 《网络对抗技术》Exp4:恶意代码分析
			2018-2019-2 20165209 <网络对抗技术>Exp4:恶意代码分析 1 基础问题回答和实验内容 1.1基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监 ... 
- HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动
			关于canvas 的基础知识就不多说了,可以进这个网址学习 http://www.w3school.com.cn/html5/html_5_canvas.asp 对于canvas 和 SVG 其实一开 ... 
- OpenCV-跟我一起学数字图像处理之拉普拉斯算子
			https://www.cnblogs.com/german-iris/p/4840647.html Laplace算子和Sobel算子一样,属于空间锐化滤波操作.起本质与前面的Spatial Fil ... 
- PT100高精度测温电路 AD623+REF3030(转)
			源: PT100高精度测温电路 AD623+REF3030(很稳定) 
- 关于微信分享到朋友圈(Thinkphp-tp3.2框架下实现)
			PHP部分 扩展类代码部分: <?php namespace Think; class JsSdk { private $appId; private $appSecret; public $d ... 
- Eclipse中把Java工程修改成web工程
			Eclipse中把Java工程修改成web工程 点击项目:右击:选择properties--输入project facets,将“Dynamic Web Module”打勾即可: 
- python脚本监控获取当前Linux操作系统[内存]/[cpu]/[硬盘]/[登录用户]
			此脚本应用在linux, 前提是需要有python和python的psutil模块 脚本 #!/usr/bin/env python # coding=utf-8 import sys import ... 
- UESTC 594 我要长高 - 单调性优化
			韩父有N个儿子,分别是韩一,韩二…韩N.由于韩家演技功底深厚,加上他们间的密切配合,演出获得了巨大成功,票房甚至高达2000万.舟子是名很有威望的公知,可是他表面上两袖清风实则内心阴暗,看到韩家红红火 ... 
- JAVA I/O(四)网络Socket和ServerSocket
			<Thinking in Enterprise Java>中第一章描述了用Socket和Channel的网络编程,核心即为Socket和Channel,本文简单讲述Socket的应用. S ... 
