Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3149|回复: 15

[已解决]声明数组一例

[复制链接]
发表于 2010-8-19 20:54 | 显示全部楼层 |阅读模式


Sub a()
'    Dim arr(1 To 5) As String
'    Dim arr() As String
    Dim arr()

    arr = [{"","A","B","C","D"}]
End Sub

请问:可以将arr声明为字符串型的定长数组吗?为什么

谢谢!

最佳答案
2010-8-20 09:22
QUOTE:
以下是引用爱疯在2010-8-20 9:06:00的发言:

谢谢阿木!

静态数组也叫定长数组;动态数组也叫变长数组。是吧?

1、5楼的为什么,不知帮助怎样解释?

2、对于dd()错误的原因,我还是觉得是我说的那个原因。

3、为什么redim又可以,这点我觉得如所你说,是因为arr声明时是动态数组。

1、'    Dim arr() As String
'    Dim arr() As Variant '这句就可以
    Dim arr()
   
    '下面这种方式右边得到的是Variant类型的变量,如果将数组定义成String就会提示类型不匹配
    arr = [{"","A","B","C","D"}]
    '注意,用array函数得到的也是Variant类型的变量
End Sub

2、dd那个我们观点是一致的,就是叙述不同:所谓静态数组就是不能调节大小的。

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-8-19 21:36 | 显示全部楼层

你的意思是将数组的每个元素的内容设置成定长字符串?

我和你一起等待,,,

回复

使用道具 举报

发表于 2010-8-19 21:43 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2010-8-19 21:48 | 显示全部楼层

谢谢和气!

我希望尽最可能具体的声明arr

  • dim arr,可以,再具体声明一些看看
  • dim arr(),可以,再具体声明一些看看
  • dim arr() as string,不行了,为什么??
  • 。。。

这样,第3次是不可以吗?什么原因??

 


 

[em09]
回复

使用道具 举报

 楼主| 发表于 2010-8-19 21:55 | 显示全部楼层

奇怪,明明我的常量是字符串,为什么:


Sub a()
'    Dim arr() As String    '不可以
    Dim arr() As Variant    '可以

    arr() = [{"","A","B","C","D"}]
End Sub

回复

使用道具 举报

发表于 2010-8-19 21:56 | 显示全部楼层

我测试的第三个也没有问题啊,

Private Sub ttttttt()
Dim arr2() As String
ReDim arr2(1 To 5)
For i = 1 To 5
    arr2(i) = "" & i
Next
For j = 1 To 5
    Debug.Print arr2(j)
    Debug.Print WorksheetFunction.IsText(arr2(j))
Next
End Sub

回复

使用道具 举报

发表于 2010-8-19 22:03 | 显示全部楼层

QUOTE:
以下是引用爱疯在2010-8-19 21:55:00的发言:

奇怪,明明我的常量是字符串,为什么:


Sub a()
'    Dim arr() As String    '不可以
    Dim arr() As Variant    '可以

    arr() = [{"","A","B","C","D"}]
End Sub

哪里需要这么复杂的赋值方式arr() = [{"","A","B","C","D"}]
汗ing,,,,,,

回复

使用道具 举报

 楼主| 发表于 2010-8-19 22:09 | 显示全部楼层

QUOTE:
以下是引用和气生财在2010-8-19 21:56:00的发言:

我测试的第三个也没有问题啊,

Private Sub ttttttt()
Dim arr2() As String
ReDim arr2(1 To 5)
For i = 1 To 5
    arr2(i) = "" & i
Next
For j = 1 To 5
    Debug.Print arr2(j)
    Debug.Print WorksheetFunction.IsText(arr2(j))
Next
End Sub

这应该属于常量赋值给数组元素,而1楼是数组常量赋值给数组变量。

所以后面的测试,不能说明1楼吧。

回复

使用道具 举报

 楼主| 发表于 2010-8-19 22:11 | 显示全部楼层

QUOTE:
以下是引用和气生财在2010-8-19 22:03:00的发言:

哪里需要这么复杂的赋值方式arr() = [{"","A","B","C","D"}]
汗ing,,,,,,

还是蛮有可能遇上这样的赋值呀

[em01]
回复

使用道具 举报

 楼主| 发表于 2010-8-19 23:03 | 显示全部楼层

想了会儿,觉得这么认为是对的。

帮助说过:想要将一个数组赋值给另一个数组,确定在左侧的是大小可以调节的数组,且类型匹配

同理:


Sub dd()
    Dim arr(1 To 10, 1 To 3)
    arr = [a1:c10].Value '错
End Sub

所以,给定长数组赋值,只能一个个的数组元素赋值,无法直接赋值常量数组。要不然,只有redim:


Sub ee()
    Dim arr()
   
    ReDim arr(1 To 10, 1 To 3)
    arr = [a1:c10].Value
End Sub

redim不受限上面的那条帮助,让我觉得意外。


回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-17 04:06 , Processed in 0.337340 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表