ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:如何化学式自动识别的宏?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-3-30 22:38 | 显示全部楼层 |阅读模式

我是个中学化学教师,想编写个宏,实现如下功能:在英文半角状态下,从键盘上输入一个化学式如“H2SO4”或“h2so4”,一击空格键就自动识别为“H2SO4”,敬请高手们给予指点,在下先谢谢了!!!

e-mail:ahhnztz@126.com   QQ:511181363

TA的精华主题

TA的得分主题

发表于 2007-3-30 22:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个嘛,有兴趣和我联系。QQ442768539

TA的精华主题

TA的得分主题

发表于 2007-4-1 20:03 | 显示全部楼层
这太容易了,用WORD自带的自动更正是最佳方法。请注意:各类软件最好的老师是它自己的帮助文件。

TA的精华主题

TA的得分主题

发表于 2007-4-1 21:17 | 显示全部楼层

处理这类问题时主要看工作量有多少,如果少,直接手工设置吧,如果多,可以用自动更正或自动图文集来做,还可以用专门的小工具。

TA的精华主题

TA的得分主题

发表于 2007-4-1 22:22 | 显示全部楼层

看看如下宏是否可行。如果可行,给其指定一个快捷键,需要时按一下快捷键即可。

Sub ChamForSub()
'只针对插入点前的一个分子式
   
    Dim a As Range
   
    With Selection
        If .Text Like Chr(32) Then
            .Next(wdWord).Select
        End If
        If .Previous(wdWord) Is Nothing Then Exit Sub
        With .Previous(wdWord)
            If Val(.Text) > 0 Then GoTo NT
            For Each a In .Characters
                If a.Text Like "[!0-z ]" Then GoTo NT
            Next a
            For Each a In .Characters
                If a Like "#" Then
                    a.Font.Subscript = True
                'ElseIf a Like "[a-z]" Then
                '    a.Font.AllCaps = True
                ElseIf a = Chr(32) Then a.Select: GoTo NT
                End If
            Next a
        End With
NT:     .SetRange Start:=.End, End:=.End
        .Font.Subscript = False
    End With
End Sub

现在想来,字母全部改为大写并不合适,要判断准确较复杂,故不作改动。

[此贴子已经被作者于2007-4-1 22:58:27编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-2 21:18 | 显示全部楼层

sylun:您好 

谢谢您,  您编写的宏能完成我主帖的功能:在英文半角状态下,从键盘上输入一个化学式如“H2SO4”一击空格键就自动识别为“H2SO4”。请您再给编写一下。   我主帖上没有讲清楚,敬请见谅。下面我把意思和想再表述一下:     功能:  在英文半角大写状态下:输入化学式如:KAL(SO4)3 或CAJ2+  CUSO4.5H20 一击空格键就自动识别为请变为 KAl(SO4)2     或Ca2+     CuSO4.5H2O

        思路:1.从盘上输入的大写字符先放入一个数组(一定是数组,这样好为第二取数据做准备,同时为大写转小写做准备)中,一击空格键表示输入结束并开始自动更正。(您这一步我完成不了,敬请您和其他高手们帮助完成,在下先谢谢了)

                  2.自动更正时,从数组中取字符并进行判断。①如果数组元素是字符“J”,则删除“J”,并把下一数组元素设为上标。②如果数组元素是“+”或“-”,则将该元素设为上标。③如果数组元素是“)”,若下一数组元素是数字则设为下标。④余下的数组元素是数字,则都设为下标。

                      3.大写英文字母转变为小定的条件:从下面和化学式本身找规律进行转换。

TA的精华主题

TA的得分主题

发表于 2007-4-2 21:31 | 显示全部楼层
编写宏只能对付有限的化学式,没有那个必要(当然你要据此学VBA例外),用WORD本身的功能既简单又快捷,且可随时添加、修改,数目几乎是无限的,输入时连空格也不必打,再打后面的字符它就出来了。

TA的精华主题

TA的得分主题

发表于 2007-4-2 22:05 | 显示全部楼层
QUOTE:
以下是引用ssq1109在2007-4-2 21:31:35的发言:
编写宏只能对付有限的化学式,没有那个必要(当然你要据此学VBA例外),用WORD本身的功能既简单又快捷,且可随时添加、修改,数目几乎是无限的,输入时连空格也不必打,再打后面的字符它就出来了。

我也认为没那个必要,但是,编写宏应该能对付几乎是全部的化学式,只不过要将一些有歧义的特别处理即可。

TA的精华主题

TA的得分主题

发表于 2007-4-2 23:48 | 显示全部楼层

其实楼主的问题对我来说实在太难了,一来我对VBA还是刚入门,掌握的处理方法很有限,二来化学方面的知识已忘得差不多了。原来只是想利用这道题练练用VBA对字符串进行处理而已。
现在看楼主的重新表述,并结合练习时遇到的问题,觉得楼主可能要指出待转换化学式字符串的构成特征,以便于对这类字符串进行识别,比如,除了由20来个字母及10个数字外,当中还会有什么特殊字符?该字符串的前一字符是否一定是空格、或者该字符串的第一个字符肯定是字母?此外,如何准确判断何时该转换为小写字母这个问题可能是最难处理的。

带格式的自动更正操作起来确实很方便。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-4 07:57 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 18:47 , Processed in 0.051492 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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