VBA数组的定义与赋值

菜鸟一枚,请问为何将数组变量ArrA声明为String,运行时显示“运行错误类型不匹配”,而将其声明为Variant却能正常运行?Sub数组练习()DimArrA()As... 菜鸟一枚,请问为何将数组变量ArrA声明为String, 运行时显示“运行错误 类型不匹配”,而将其声明为Variant却能正常运行?
Sub 数组练习()

Dim ArrA() As String

ReDim ArrA(3)

ArrA = [{"A","B","C","D"}]

End Sub
还有,将数组变量ArrA声明为String,用Array函数给ArrA赋值,运行也出现"类型不匹配",将其声明成Variant时,运行就正常。为什么啊?Array函数返回值是Variant啊,为何不能将ArrA声明成String啊?
Sub 数组()
Dim ArrA() as string
ArrA=Array("a","b","c","d")
End Sub
展开
 我来答
四舍五不入6
高粉答主

2019-10-24 · 醉心答题,欢迎关注
知道答主
回答量:147
采纳率:100%
帮助的人:2万
展开全部

可直接定义,但是不能直接赋值,可参考以下代码:

1、Dim arr(1 to 3) as string

如此定义,但是不能直接给数组赋值

如果想直接给数组直接赋值,需要如下操作:

Dim arr() as Variant

arr=Array("a","b","c")

2、Dim A As Variant

A = Array(10,20,30)

B = A(2)

array函数返回的是变体型,要用该函数是不能给数组变量赋值

扩展资料:

VBA的常用内置函数:

MsgBox

InputBox

舍入函数:Fix 向0取整,Int向下取整, Round四舍五入

Rnd: 返回0-1内的单精度随机数

字符串函数:

Filter:对字符串的一维数组的过滤

InStr([Start, ]<Str1>,<Str2>[, Compare])与InStrRev: 查找子串

Len:字符串长度

Join:连接一维数组中的所有子字符串

Left,Right,Mid: 截取子字符串

Space(数值) :生成空格字符串

Ucase,Lcase:大小写转换函数

Ltrim, Rtrim,Trim :删除首尾空格

Replace

Split:分割一个字符串成为一维数组

StrComp:字符串比较

StrConv:字符串转换

String(number, character):制定字符重复若干次

参考资料来源:百度百科-VBA (Visual Basic宏语言)

百度网友51266d27
2018-11-23 · TA获得超过6934个赞
知道大有可为答主
回答量:3718
采纳率:55%
帮助的人:507万
展开全部
参考下面的代码,和你的问题有些像:

Sub Test()
    Dim Arr(1 To 9) As Integer '定义一个下标为1,上标为9的整型数组
    Dim Brr(9) As String ''定义一个下标为0,上标为9的整型数组。这里的默认下标可以在模块中用 option base来声明数组下标的缺省下界,默认是0
    Dim Crr(9, 1 To 9) As String '定义了一个二维字符型数组,第一维下标为0,上标为9,第二维下标为1,上标为9
    Dim Drr As Variant '定义了一个变体类型
    Dim Frr() As Long ''定义一个数组,但维度和上下标未明确
   
    Arr(9) = 9 '元素赋值
    Brr(0) = "0" '元素赋值
    Crr(1, 1) = "A"
   
    Drr = Crr 'drr(1,1)="A"
   
    ReDim Frr(10) As Long  '重新定义了Frr数组的维度和上下标
    ReDim Frr(1 To 10, 1 To 10) '再次重新定义Frr数组的维度和上下标
   
    Frr(1, 10) = 110 '元素赋值
   
    ReDim Preserve Frr(1 To 10, 1 To 11) '重新定义数组最后一维的大小,并保持原有数据,此时 Frr(1,10)还是 110
   
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
藤原子大雄
2018-11-16 · TA获得超过7195个赞
知道大有可为答主
回答量:6977
采纳率:82%
帮助的人:1719万
展开全部
VBA显然是不支持数组控件的,但可以这样的,假如金额的textbox名称依次被命名为sum1,sum2,sum3........

private sub cmdOk_click()
dim a as control
for each a in me.controls
if left(a.name,3)="sum" and a.value ="" then a.value=0
next
end sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
司马刀剑
高粉答主

2018-11-16 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7150万
展开全部
字符串数组的定义:
Dim arr(1 to 3) as string
如此定义,但是不能直接给数组赋值
如果想直接给数组直接赋值,需要如下操作:
Dim arr() as Variant
arr=Array("a","b","c")
追问
Array函数的返回值为variant,不包括string类型吗?为何不能直接赋值呢?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
活宝translate
2018-11-23 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:135
采纳率:66%
帮助的人:29.2万
展开全部

你可以定义其他数据类型  ,或者其他类型 ,一下是类型表,建议您看一下

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式