• VBScript开发Excel常见问题


    VBS基础

    基本概念:VB & VBS & VBA

    VB、VBScript和VBA(Visual Basic For Application)这三种语言,既有联系又有区别。三种语言的语法一致,但是具体的应用场景又有区别。
    1. VB是一种编译型的语言,主要用于开发Windows应用程序,代码编译后生成二进制的可执行程序。
    2. VBScript是一种脚本型的语言,这种脚本语言的宿主程序是WSH(Windows Scripting Host),脚本程序运行时,加载的是Windows上下文环境。VBS强大的一点在于可以调用系统的COM对象,比如我可以创建Excel.Application对象,而且系统注册的Excel.Application对象可自动识别系统的Excel运行版本,创建对应的对象。
    3. VBA也是一种脚本语言,但是这种脚本语言的宿主是应用程序,如Excel,AutoCAD,CATIA。加载的上下文环境也是应用程序的上下文环境。其中使用最普遍的就是Excel VBA程序了。

    帮助文档

    VBS最好的文档当然是微软官方的MSDN了,上面介绍的特别全面。

    脚本格式

    VBS的脚本有两种文档格式,一种是vbs后缀,另一种是wsf(windows script format)。wsf是采用XML格式存储,支持JScript和VBScript。如果想执行这两种脚本,直接双击就可以,其实后台调用的是wscript程序执行的脚本。执行VBScript脚本有两种程序:
    1. cscript:命令行模式运行VBScript脚本。
    2. wscrip:交互模式运行VBScript脚本,可弹出GUI窗体与用户交互,这种脚本执行模式是Windows默认的脚本执行程序。

    内建函数

    VBScript中有一些内建函数,可以直接使用。

    Abs

    Array

    Asc

    Atn

    CBool

    CByte

    CCur

    CDate

    CDbl

    Chr

    CInt

    CLng

    Conversions

    Cos

    CreateObject

    CSng

    CStr

    Date

    DateAdd

    DateDiff

    DatePart

    DateSerial

    DateValue

    Day

     

    Escape

    Eval

    Exp

    Filter

    FormatCurrency

    FormatDateTime

    FormatNumber

    FormatPercent

    GetLocale

    GetObject

    GetRef

    Hex

    Hour

    InputBox

    InStr

    InStrRev

    Int, Fix

    IsArray

    IsDate

    IsEmpty

    IsNull

    IsNumeric

    IsObject

    Join

    LBound

    LCase

    Left

    Len

    LoadPicture

    Log

    LTrim; RTrim; and Trim

    Maths

    Mid

    Minute

    Month

    MonthName

    MsgBox

    Now

    Oct

    Replace

    RGB

    Right

    Rnd

    Round

    ScriptEngine

    ScriptEngineBuildVersion

    ScriptEngineMajorVersion

    ScriptEngineMinorVersion

    Second

    SetLocale

    Sgn

    Sin

    Space

    Split

    Sqr

    StrComp

    String

    StrReverse

    Tan

    Time

    Timer

    TimeSerial

    TimeValue

    TypeName

    UBound

    UCase

    Unescape

    VarType

    Weekday

    WeekdayName

    Year

    类对象

    这点是我没想到的,我以为vbs语法比较简单。实际VBS还是支持类声明的,用来构造业务对象的数据结构挺方便。

     1 Dim cfg
     2 Set cfg = new SheetConfigType
     3 Set cfg = nothing
     4 
     5 Class SheetConfigType
     6 
     7     public Index
     8     public CustomRowHeight
     9 
    10     private Sub Class_Initialize()
    11         'do nothing
    12     End Sub
    13 
    14     private sub Class_Terminate()
    15         'do nothing
    16     End Sub
    17 
    18 End Class

    对象赋值

    当给变量赋普通值时使用 i = 5 这种语法就可以。将一个对象类型赋给变量时,需要采用类似 Set cfg = new SheetConfigType 这种语法,注意前面多了一个Set关键字。

    运行环境

    VBS和VBA的运行环境还是有区别的,VBS默认只加载了Windows运行环境。在Excel里面录制的宏,是不能直接拿来用的。像Selection、Range这种对象在Excel VBA中可以直接使用,在VBS中是需要先创建再使用的。

     1 <job id="ExcelReport">
     2    <reference guid="{00020813-0000-0000-C000-000000000046}"
     3     comment="MSExcel 2002 tag library, under HKEY_CLASSES_ROOTTypeLib"/>
     4    <script language="VBScript">
     5 Option Explicit
     6 On Error Resume Next
     7 Dim xlsPath, excelApp, workbook, sheet
     8 xlsPath = WScript.Arguments(0)
     9 Set excelApp = CreateObject("Excel.Application")
    10 excelApp.DisplayAlerts = False
    11 Set workbook = excelApp.Workbooks.Open(xlsPath)
    12 For Each sheet In workbook.Worksheets
    13     'do something
    14 Next
    15 workbook.Close
    16 excelApp.Quit
    17    </script>
    18 </job>

    异常处理

    在VBS中如果脚本运行出现异常,异常直接就被抛出了,后面的脚本是不会被执行的。这就会造成一个问题,比如创建了一个Excel对象,执行到一半,脚本崩溃,但这个Excel对象还在进程中,并没有被回收销毁。解决方案也很简单,在脚本前面加一行代码: On Error Resume Next 。如果脚本异常,继续执行下一行,这样脚本肯定能跑到进程关闭那行的。但是调试的时候,不要写这行,不然很难定位到底是哪出BUG了,发布的时候再加上。

  • 相关阅读:
    Supervisor安装与使用
    windows常用快捷键和指令
    搜索引擎使用技巧
    golang核心Goroutine和channel
    4、小程序原生底部菜单
    三、小程序值使用vant开发
    axios请求2
    3、小程序消息推送
    居中
    一、底部菜单
  • 原文地址:https://www.cnblogs.com/dalianliyan/p/4976061.html
Copyright © 2020-2023  润新知