乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 150|回复: 9

如何实现自定义类型的动态数组?

[复制链接]

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2004-3-7 20:48:00 | 显示全部楼层 |阅读模式
Type        aa
                                                                 name As String
                                                                 firstrow As Integer
                                                                 lastrow As Integer
                         End Type
                         Dim a() As aa
                         ReDim Preserve a(0 To 2)
'将a(0)~a(2)赋值,语句省略
                         addtype a, "ok"
Sub addtype(a, str)
                         Dim i As Integer
                         ReDim Preserve a(UBound(a) + 1)
                         With a(UBound(a))
                                                                 .name = str
                                                                 .firstrow = a(UBound(a) - 1).lastrow
                                                                 .lastrow = .firstrow
                         End With
End Sub
请帮忙解决以上代码的错误,实现能根据要求增加动态数组a()的功能
回复

使用道具 举报

21

主题

166

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2004-3-7 21:09:00 | 显示全部楼层
数组a未赋初始值!
Private Type aa
                                                                 name As String
                                                                 firstrow As Integer
                                                                 lastrow As Integer
                         End Type
       
Private Sub Command1_Click()
                         Dim a() As aa
                         Dim i As Integer, k As Integer
                         ReDim Preserve a(0)
                         a(0).firstrow = 1
                         a(0).lastrow = 2
                         a(0).name = "ok"
                         For i = 1 To 2
                         ReDim Preserve a(i)
                         With a(i)
                                                                 .name = "str"
                                                                 .firstrow = a(i - 1).lastrow
                                                                 .lastrow = .firstrow
                                                                 Debug.Print i, .name & "," & .firstrow & "," & .lastrow
                         End With
                         Next
End Sub
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2004-3-7 21:53:00 | 显示全部楼层
赋过了,我写道省略.
问题是type放在sheet1中说不能,放在模块中则可以.然后重定义a()大小在sheet1中可以,而在模块中又不可以.该怎么办呢,type放在模块,重定义a()在sheet1中还是不行.
回复

使用道具 举报

12

主题

135

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
183
发表于 2004-3-8 08:55:00 | 显示全部楼层
我有另一种方法:将用户定义类型改为类模块。作法:添加一个类模块vvvv,将Public name As String
Public firstrow As Integer
Public lastrow As Integer
写入
引用时使用
dim a() as new vvvv
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2004-3-8 20:17:00 | 显示全部楼层
非得要占用一个类模块这么麻烦么?大家平时的自定义类型是怎么用的?
回复

使用道具 举报

21

主题

166

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2004-3-8 20:52:00 | 显示全部楼层
自定义类型怎么用,看我在2楼的贴。
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2004-3-8 20:54:00 | 显示全部楼层
请看3楼,我的type aa 要是全局变量.谢谢
回复

使用道具 举报

21

主题

166

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2004-3-8 21:25:00 | 显示全部楼层
注意a要定义为全局变量或窗体的模块级变量。
新建窗体、添加命令按钮。将下面代码放到窗体中。
Private Type aa
         name As String
         firstrow As Integer
         lastrow As Integer
End Type
Private  a() As aa
       
Private Sub addtype(str)
                         Dim k As Integer
                         k = UBound(a, 1)
                         ReDim Preserve a(k + 1)
                         k = UBound(a, 1)
                         With a(k)
                                                                 .name = str
                                                                 .firstrow = a(k - 1).lastrow
                                                                 .lastrow = .firstrow
                         End With
                         Debug.Print k, a(k).name, a(k).firstrow, a(k).lastrow
                         
End Sub
Private Sub Command1_Click()
                         
                         ReDim a(0)
                         a(0).firstrow = 2
                         a(0).lastrow = 2
                         a(0).name = "ok"
                         Dim i As Integer
                         
                         addtype "ok"
End Sub
回复

使用道具 举报

0

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
4
发表于 2012-12-26 09:48:00 | 显示全部楼层
my_computer 说的对,不过要把public 改为private
回复

使用道具 举报

31

主题

227

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
351
发表于 2012-12-30 00:04:00 | 显示全部楼层
type可以定义字符类型以外的类型吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 23:08 , Processed in 2.053485 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表