问题源自:Excel 一个困扰我很长时间的代码转换问题-Word-ExcelHome技术论坛 -  http://club.excelhome.net/thread-1334942-1-1.html

Sub df()
Dim pa As Paragraph, re As Object
ActiveDocument.Range.Find.Execute "_^13", , , 2, , , , 0, 0, "", 2 '第一个2决定是否通配,第二个决定是否全部替换
Set re = CreateObject("vbscript.regexp")
re.Global = 1
For Each pa In ActiveDocument.Paragraphs
If InStr(pa.Range, ":=") > 0 Then
re.Pattern = "\w+:=.+?(?=,)|\w+:=.+(?=\))|\w+:=.+?(?=\r)"
For Each ma In re.Execute(pa.Range)
s1 = Split(ma, ":=")(0)
s2 = Split(ma, ":=")(1) If ch13 = 0 Then
ch13 = ch13 + 1
pa.Range.InsertBefore Chr(13)
End If
ma = Replace(Replace(ma, "(", "\("), ")", "\)")
ActiveDocument.Range(pa.Range.Previous.End - 1, pa.Range.Previous.End - 1).InsertAfter "virant " & s1 & "=" & s2 & Chr(13)
If InStr(pa.Range, "(") > 0 Then
pa.Range.Find.Execute "\(" & ma, MatchWildcards:=1, replacewith:="(" & s1, Replace:=1
pa.Range.Find.Execute "[ \,]{1,}" & ma, MatchWildcards:=1, replacewith:=" " & s1, Replace:=1
pa.Range.Find.Execute ma, replacewith:=s1, Replace:=1
If UBound(Split(pa.Range, ":=")) = 0 And pa.Range.Characters.Last.Previous <> ")" Then pa.Range.Characters.Last.Previous.InsertAfter ")"
ElseIf UBound(Split(pa.Range, ":=")) > 1 Then
pa.Range.Find.Execute "[ ,]{1,}" & ma, MatchWildcards:=1, replacewith:="(" & s1, Replace:=1
Else
pa.Range.Find.Execute " " & ma, replacewith:="(" & s1 & ")", Replace:=1
End If
Next
ch13 = 0
End If
fi = Split(Trim(pa.Range.Text), " ")(0)
re.Pattern = "\.\w+\r"
If re.test(pa.Range) And InStr(pa.Range, "With") = 0 Then
pa.Range = Replace(pa.Range, Chr(13), "") & "()" & Chr(13)
ElseIf fi = "With" Then
tf = tf + 1
strB = strB & Replace(Split(Trim(pa.Range.Text), " ")(1), Chr(13), "") & "@"
pa.Range = ""
ElseIf fi = "Set" Then
re.Pattern = "\.(\w+)\("
Set sm = re.Execute(pa.Range)
strA = sm(0).submatches(0)
pa.Range.Find.Execute findtext:=fi, replacewith:="word." & strA
ElseIf Left(Trim(pa.Range), 1) = "." Then
pa.Range = Replace(strB, "@", "") & Trim(pa.Range)
ElseIf InStr(pa.Range.Text, " .") > 0 Then
re.Pattern = "\s\."
If re.test(pa.Range) Then
st = re.Execute(pa.Range)(0).firstindex
ActiveDocument.Range(pa.Range.Start + st + 1, pa.Range.Start + st + 1).InsertAfter Replace(strB, "@", "")
End If
ElseIf Replace(Trim(pa.Range), Chr(13), "") = "End With" Then
tf = tf - 1
strB = Left(strB, InStrRev(strB, "@", Len(strB) - 2))
pa.Range = ""
End If
Next
re.MultiLine = 1
re.ignorecase = 1
re.Pattern = "^\s+|Then|End If|End Sub" '|^Sub.+$^\s*Dim.+$"
Debug.Print re.test(ActiveDocument.Range)
ActiveDocument.Range = re.Replace(ActiveDocument.Range, "")
End Sub

  

VBA改写VBA代码的更多相关文章

  1. Excel VBA入门(8): 代码调试/错误处理/代码优化

    VBE有丰富的调试工具, 比如立即窗口, 本地窗口, 监视窗口, 断点调试... 第一个博文中已经讲过调试的基本操作: 设置断点, F5运行, F8逐条运行 断点就是程序中暂停停止运行的位置, 设置断 ...

  2. 利用word的VBA,为代码统一表格宽度,底色及行号

    如果文档中的代码表格时,感觉还是很快速有用的. Sub HangHao() ' ' hanghao 宏 ' ' Dim parag As Paragraph Dim nLineNum: nLineNu ...

  3. 在 Visual C# 项目中调用 VBA 中的代码

    https://msdn.microsoft.com/zh-cn/library/Bb608613.aspx http://www.cnblogs.com/yangbin1005/archive/20 ...

  4. 【VBA】VBA编写的,将一列中相同的内容的行提取出来单独生成文件

    数据如上图所示,点击RUN后的运行结果如下: 得到该文件夹,文件夹内容如上图. 代码如下: Private Sub Command_OLIVER() Dim arr arr = Range(" ...

  5. VBA续嘘嘘

    什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...

  6. MicroStation VBA基础

    实习笔记1 2016年8月1日 14:12 Option Explicit 缺省情况下,如果使用一个没有声明的变量,它将继承“Variant”类型.在模块.窗体和类的通用声明区使用“OptionExp ...

  7. 利用VBA+OO4O构造CTAIS开放式通用平台

    利用VBA+OO4O构造CTAIS开放式通用平台 2010-06-08 14:59:28 | 来源:税务信息化论文集 | 作者:于非 易飞 摘  要:文立足于CTAIS系统体系,探讨如何通过OO4O技 ...

  8. VBA基础概念

    一:VBA对象 'VBA对象 'VBA中的对象其实就是我们操作的具有方法.属性的excel中支持的对象 'Excel中的几个常用对象表示方法 '1.工作簿 ' Workbooks 代表工作簿集合,所有 ...

  9. VBA编程的工程性规划

    看过很多人写的VBA代码,一团一团的,一点规划都没有,为了VBA编程更具工程性,这里讨论一下,并列出自己的一些建议:0.给VBA工程定义一个名字,而非直接使用默认的名称——"VBAProje ...

随机推荐

  1. bzoj1086

    题解: 树分块 每一次当个数大于B的时候分成一块 省会城市为当前子树根 然后最后剩下的节点和前一个分为一块 代码: #include<bits/stdc++.h> using namesp ...

  2. flask(十)使用alembic,进行数据库结构管理,升级,加表,加项

    1.安装扩展,在虚拟环境中安装 alembic,不懂可以去看pycharm的系列文章. 2.初始化, 使用 Alembic 前需要通过 alembic init 命令创建一个 alembic 项目,该 ...

  3. MySQL5.7 主从复制配置

    一.主从复制原理 MySQL 主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致.每一个主从复制的连接,都有三个线程.拥有多个从库的主 ...

  4. 【重大更新】DevExpress v17.2新版亮点—WPF篇(三)

    DevExpress年终击穿底价,单套授权低至67折!仅剩最后10天!查看详情>>> 用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增 ...

  5. Cisco ASA(8.4)端口映射设定(ASDM)

    1.进入到Configuration→firewall→NAT Rules画面. 2.点“services”添加服务端口,此案例添加TCP 1443和UDP 1443端口映射 3.添加“Network ...

  6. 【opencv基础】pointPolygonTest

    pointPolygonTest opencv函数 pointPolygonTest: C++: double pointPolygonTest(InputArray contour, Point2f ...

  7. CTF之猪圈密码

    猪圈密码又称济会密码,朱高密码,是一种简单的替代密码,所以安全性很低

  8. HTML第一课——基础知识普及【2】

    关注公众号:自动化测试实战 img标签 我们先看一下文档结构: 这里我们文件当前位置就是lesson.html,所以现在我们img属性src给的值要进入imgs文件夹,所以我们可以用相对路径来表示,看 ...

  9. CountDownLatch的简单理解

    CountDownLatch的概念 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用). CountDownLatch能够使一个 ...

  10. 重磅来袭,开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载(转)

    BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 啥话也不说了,直接上源码:下载源码(由于公司服 ...