ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 417|回复: 2

[求助] VBA正则表达式代码转换成VSTO后,VSTO不运行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-28 13:49 | 显示全部楼层 |阅读模式
大佬们,请你们花宝贵的时间,帮我看看我的VSTO代码如何解决?   

VBA代码已上传附件,我转换成VSTO代码如下。
VBA代码在EXCEL中运行是没有问题的。
VSTO代码感觉问题出在正则表达式提取循环语句。
vTmp参数,在VBA中调试,值是字符串;在VSTO中调试,值是Nothing。


Private Sub Button6_Click(sender As Object, e As RibbonControlEventArgs) Handles Button6.Click

        Dim strAddress As String        '定义选中单元格区域地址字符串
        Dim strResult As String     '定义选中单元格区域处理后(去掉字母)地址字符串
        Dim varTmp           '定义选中单元格区域处理后(去掉字母)地址字符串数组
        Dim objRegExp

        Dim vTmp

        Dim intI, intJ As Integer    '定义循环计数器
        Dim intCount As Integer     '定义选中单元格区域处理后地址字符串中的行标

        With xlApp

            '-------------------------------------------------------------------
            '///////////////////////////////////////////////////////////////////
            '处理选中单元区域地址字符串
            '-------------------------------------------------------------------
            strAddress = .Selection.Address

            objRegExp = CreateObject("VbScript.RegExp")
            objRegExp.Global = True
            objRegExp.IgnoreCase = True
            objRegExp.Pattern = "[\d.$\d]+"

            strResult = ""
            For Each vTmp In objRegExp.Execute(strAddress)     '感觉这段循环语句有问题。
                strResult = strResult & vTmp
            Next
            '-------------------------------------------------------------------
            '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
            '-------------------------------------------------------------------

            varTmp = Split(strResult, "$$")
            intCount = UBound(varTmp)

            For intI = intCount / 2 To 1 Step -1
                For intJ = varTmp(intI * 2) To varTmp(intI * 2 - 1) Step -1
                    .Rows(intJ + 1).Insert(Shift:=XlDirection.xlDown, CopyOrigin:=XlInsertFormatOrigin.xlFormatFromLeftOrAbove)
                Next intJ
            Next intI

        End With

    End Sub

再次谢谢大佬们!!!!

隔行插入.rar

12.1 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2023-11-28 16:38 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
using System.Text.RegularExpressions;

用这个 不用createobject

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-29 10:48 | 显示全部楼层
zpy2 发表于 2023-11-28 16:38
using System.Text.RegularExpressions;

用这个 不用createobject

非常非常非常感谢大佬的帮助!!!!!

Public Class 前添加:
Imports System.Text.RegularExpressions

与正则表达式有关的部分修改为以下代码:
Dim vTmpMatch As Match
Dim objRegExp As New Regex("[\d.$\d]+")

strResult = ""
For Each vTmpMatch In objRegExp.Matches(strAddress)
      strResult = strResult & vTmpMatch.Value
Next

经上述修改后,在Excel中可以达到隔行插入的需求了。

对于18线的Excel小白,相信以前VB6做COM,只需要将VBA中的Application改为xlApp就可以。
现在的VSTO,还有很多很多东西要学。。。。。

再次非常非常非常感谢大佬!!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 00:58 , Processed in 0.043266 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表