ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据学习系列1-VBA数组和循环语句(3)

2021-07-21 18:34:20  阅读:250  来源: 互联网

标签:语句 Dim VBA Next minNum 数组 cities 过程


现在要执行一些例如填充数组或显示数组成员的任务了,你在第六章里学过的好些个循环语句(参见For…Next和For Each …Next循环)就变得非常方便了。现在是时候将你所学到的技巧结合起来使用了。如何重新编写FavoriteCities过程,让每个城市名称在不同的信息框里显示出来?下面显示的过程FavoriteCities2将原来过程的最后部分取代为For Each…Next循环:

 

Sub FavoriteCities2()
'now declare the array
Dim cities(6) As String
Dim city As Variant
'assign the values to array elements
cities(1) = "Baltimore"
cities(2) = "Atlanta"
cities(3) = "Boston"
cities(4) = "Washington"
cities(5) = "New York"
cities(6) = "Trenton"
'display the list of cities in separate messages
For Each city in cities
MsgBox city
Next
End Sub

注意For Each…Next循环使用的是Variant数据类型的变量city。回想在前面的章节里,For Each…Next让你在一个集合的所有对象间或者一个数组的所有的成员间循环,并且对每个对象或成员执行同样的操作。当你运行过程FavoriteCities2时,数组里有几个成员循环就会执行几次。

 

我们来看一下过程FavoriteCities的另一种变化。在第四章里,你练习了将参数作为变量传递给子过程和函数。过程FavoriteCities3示范了如何将数组的成员传递给另一个过程。

 

1.  在当前模块里,输入下述两个过程:

 

Sub FavoriteCities3()
'now declare the array
Dim cities(6) As String
'assign the values to array elements
cities(1) = "Baltimore"
cities(2) = "Atlanta"
cities(3) = "Boston"
cities(4) = "Washington"
cities(5) = "New York"
cities(6) = "Trenton"
'call another procedure and pass the array as argument
Hallo cities()
End Sub
Sub Hallo (cities() As String)
Dim counter As Integer
For counter = 1 to 6
MsgBox "Hello " & cities(counter)
Next
End Sub

过程Hallo的声明里有一个数组类型的参数——cities()。

 

 

2.  运行过程FavoriteCities3。将一个子过程的数组成员传递给另一个子过程或者函数过程让你可以在许多过程里使用相同的数组,而不需要重复的程序代码。

技巧:在过程之间传递数组
当一个数组在一个过程里被声明时,它是局部的,并且是不为其他过程所知的。然而,你可以将局部数组传递给其它的过程,通过在声明语句里,写上数组名称,并且后面紧跟一对空括号。例如,语句Hallo cities() 调用一个名叫Hallo的过程,并且将数组cities()传递给它。

 

这里有个例子,如何将你新学到的关于数组的知识和循环运用到现实生活中。如果你是个狂热的彩票玩家的话,当你厌倦了选择你的幸运号码,你可以让VB为你选择。下面的过程Lotto使用1到51的六个数字填充数组:

 

Sub Lotto()
Const spins = 6
Const minNum = 1
Const maxNum = 51
Dim t As Integer ‘looping variable in outer loop 外部循环变量
Dim i As Integer ‘looping variable in inner loop 内部循环变量
Dim myNumbers As String ‘string to hold all picks 储存选号的字符串
Dim lucky(spins) As String ‘array to hold generated picks 储存产生的选号的数组
myNumbers = ""
For t = 1 To spins
Randomize
lucky(t) = Int((maxNum-minNum+1) * Rnd )+ minNum)
'see if this number was picked before 检查本数字是否之前被选出来过
For i = 1 To (t-1)
If lucky(t)=lucky(i) Then
lucky(t) = Int((maxNum–minNum+1) * Rnd)+ minNum) i = 0
End If
Next i
MsgBox "Lucky number is " & t & lucky(t)
myNumbers = myNumbers & " –" & lucky(t)
Next t
MsgBox "Lucky numbers are " & myNumbers
End Sub

Randomize语句将随机数字发生器初始化。指令Int((maxNum-minNum+1) * Rnd + minNum)使用函数Rnd来产生一个在minNum和maxNum之间的随机数值。函数Int将随机数转变为一个整数。除了给minNum和maxNum赋予常量之外,你也可以使用函数InputBox从用户那里获得数据。

 内部For…Next循环确保每个选出的数字是唯一的——它不能是之前选出的任何一个数字。如果你忽略了内部循环并且多次运行该过程,你很可能看到重复的号码。

 

摘自-VBA数组和循环语句_w3cschool

标签:语句,Dim,VBA,Next,minNum,数组,cities,过程
来源: https://www.cnblogs.com/nameisfuck/p/15040882.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有