You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBA中定义自定义结构?Delphi Record命令的替代实现方案

VBA实现Delphi Record等效自定义结构方案

1. 定义自定义结构(Type)

VBA中与Delphi Record 功能完全对应的是用户自定义类型(Type),需要写在标准模块的最顶部(所有过程之前的通用声明区域):

Type TNUMBER
    value As Integer
    min As Integer
    max As Integer
    count As Byte
    processed As Boolean
End Type

2. 声明数组并实现对应业务逻辑

以下是和你给出的Delphi代码功能完全对齐的VBA实现,你可以直接把somenumber替换为从Excel单元格读取的数值(比如Range("A" & i).Value):

Sub ProcessNumbers()
    ' 声明对应变量,和Delphi逻辑一致
    Dim my_numbers(0 To 74) As TNUMBER
    Dim i As Integer
    Dim range_val As Byte ' 注意VBA中Range是关键字,不能直接当变量名
    Dim somenumber As Double ' 替换为你从单元格读取的实际数值
    
    range_val = 7
    For i = 0 To 74
        If my_numbers(i).processed = False Then
            my_numbers(i).value = Round(somenumber)
            my_numbers(i).min = my_numbers(i).value - range_val
            my_numbers(i).max = my_numbers(i).value + range_val
            my_numbers(i).count = 0
        Else
            If somenumber >= my_numbers(i).min And somenumber <= my_numbers(i).max Then
                ' 等效Delphi的inc计数累加
                my_numbers(i).count = my_numbers(i).count + 1
            End If
        End If
    Next i
    
    ' 后续可补充根据count判断是否绘制图表元素的逻辑
End Sub

注意事项

  • 自定义Type如果是写在类模块、工作表模块或工作簿模块中,需要在Type前加Private关键字
  • VBA中Range是内置对象关键字,不要直接用作变量名,上面示例用range_val替代
  • 你可以直接通过my_numbers(索引).成员名的方式读写结构内的属性,和Delphi的使用习惯完全一致

内容的提问来源于stack exchange,提问作者John Boe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:36:02