码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • VBA数组动态下标下界


    VBA中数组默认下标下界为从零开始,有些同学喜欢下标下界从一开始,这只是编程习惯不同,无对错之分。

    现有一个VBA自定义函数,参数为下标上界,函数返回值为一维数组,代码较简单,不再逐句讲解。

    Option Base 1
    Function GetArr(intCnt As Integer) As Variant
        Dim intInd As Integer
        Dim arrRes()
        intInd = 0
        ReDim arrRes(intInd To intCnt)
        For i = intInd To intCnt
            arrRes(i) = i
        Next
        GetArr = arrRes()
    End Function
    Sub Demo()
        Debug.Print Join(GetArr(4))
    End Sub
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行Demo过程输出结果如下。

    0 1 2 3 4

    大家是否注意到了,第一行代码指定数组下标下届从1开始,但是函数GetArr中数组下标下界是由变量intInd决定的,此变量的值是Hard Code。

    实例需求:自定义函数返回值为数组,该数组的下标下届是否可以和Option Base设置保持一致。

    有的同学想到一个方法,在VBA中读取代码模块,然后就可以知道Option Base设置下界值,如果没有这行代码,那么下界值为零。这不失为一个方法,但是局限性很大,用户必须要启用“信任对VBA工程对象模型的访问”,否则无法使用。

    其实不妨换个思路,既然是和Option Base设置保持一致,那么可以取巧的使用检测数组下标下届的方法得到这个设置。

    实例代码如下。

    Option Base 1
    Function GetArr1(intCnt As Integer) As Variant
        Dim intInd As Integer
        Dim arrRes(), tmp(1)
        intInd = LBound(tmp)
        ReDim arrRes(intInd To intCnt)
        For i = intInd To intCnt
            arrRes(i) = i
        Next
        GetArr1 = arrRes()
    End Function
    Sub demo1()
        Debug.Print Join(GetArr1(4))
    End Sub
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    【代码解析】
    自定义函数主要部分同前,区别在于第4行代码声明了一个临时数组变量tmp(),第5行代码使用LBound函数获取数组下标下界,无论当前模块种是否包含Option Base语句,都可以快速的获取下界值。

    运行Demo过程输出结果如下。

    1 2 3 4

  • 相关阅读:
    R语言 pca主成分分析的主要方法
    二十三、CANdelaStudio深入-SnapshotData编辑
    中国第一大微商TST涉嫌传销案听证会结束
    识别 TON 生态系统中前10种加密资产,以bitget 钱包为例
    京东数据分析平台:2023年8月京东奶粉行业品牌销售排行榜
    Java枚举类 (详细解析java中的枚举类深入浅出)
    如何根据性能需求进行场景设计?
    批量归一化(PyTorch)
    小迪安全36WEB 攻防-通用漏洞&XSS 跨站&MXSS&UXSS&FlashXSS&PDFXSS
    【每日一题】买卖股票的最佳时机 III
  • 原文地址:https://blog.csdn.net/taller_2000/article/details/126862844
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号