如何在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
相关产品推荐
相关产品推荐

