ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VSTO代码不支持中文双引号输入的问题,求助!!!

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-26 08:28 | 显示全部楼层

在excel中显示为“单引号”
1.png
2.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-26 08:39 | 显示全部楼层
zaojiashi75 发表于 2023-11-26 08:24
不过,我想再请教一下大佬,按你的代码来,输出到excel中的是英文双引号,不是中文双引号。我想要在excel ...

以前VB6封装VBA,只要将VBA代码中的 “With Application” 在VB中改成 “With xlApp" 即可,对我这种18线业余人员还是比较友好的。
现在捣鼓VSTO,发现VSTO的语法和VBA的语法,有不少差别。在EXCEL中运行无误的VBA代码,在VSTO中要反复调试、修改语法表达式N次,有时还要莫名其妙添加或减少语句。
前两天,写了个打开文件夹的代码,在VBA中,“Dim flDialog As FileDialog”是没有问题的,在VSTO中就报错。试了半天,改成“Dim flDialog”就没问题了。当然,也没弄明白为何要去掉“As FileDialog”,也不明白去掉“As FileDialog”后,后续的代码能识别我定义的“flDialog”就是FileDialog对象。

被VSTO劝退中。。。。。呵呵。

TA的精华主题

TA的得分主题

发表于 2023-11-26 21:12 | 显示全部楼层
zaojiashi75 发表于 2023-11-26 08:28
在excel中显示为“单引号”

这是你字体的原因

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-27 08:37 | 显示全部楼层

大佬,请你花宝贵的时间,帮我看看我的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, 下载次数: 0

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-2 10:19 | 显示全部楼层
自己挖的坑,自己也来填一填,万一对后面的朋友有帮助呢?
以下代码,在我的VSTO中测试成功

xlApp.ActiveSheet.Range("A1") = "我爱" & ChrW(8220) & "ExcelHome" & ChrW(8221)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 18:43 , Processed in 0.038039 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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