一个关于VB编程的问题!!!

大家好,我在编程时遇到了一个问题,问题就出在下面这段程序。这段程序我在调试和编译时都不报错,可是我编译完成后一运行就提示“数组下标越界”,可我怎么看都看不来为什么越界,请... 大家好,我在编程时遇到了一个问题,问题就出在下面这段程序。这段程序我在调试和编译时都不报错,可是我编译完成后一运行就提示“数组下标越界”,可我怎么看都看不来为什么越界,请各位高手帮我看看,小弟不胜感激!!!
Public Function ReadFile(strFilePath As String) As String()
Dim fso As New FileSystemObject
Dim file
Dim IsFileExist As Boolean
Dim ts As TextStream
Dim strData() As String
ReDim strData(0)
IsFileExist = fso.FileExists(strFilePath)
If IsFileExist = True Then
Set file = fso.GetFile(strFilePath)
Set ts = file.OpenAsTextStream(ForReading)
While Not ts.AtEndOfStream
ReDim Preserve strData(UBound(strData) + 1)
strData(UBound(strData)) = ts.ReadLine
Wend
ts.Close
End If
ReadFile = strData
End Function
我编译和调试也不报错,就是生成EXE文件后一运行就提示“数组下标越界”。因为这段程序在我的FORM LOAD中,所以我肯定问题就出在这里。。。
展开
 我来答
EnglishRn
2006-12-11 · TA获得超过1169个赞
知道小有建树答主
回答量:527
采纳率:0%
帮助的人:409万
展开全部
使用redim关键字设置动态数组大小

动态数组的用法:
组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变数组大小的能力。

动态数组就可以在任何时候改变大小。在 Visual Basic 中,动态数组最灵活、最方便,有助于有效管理内存。例如,可短时间使用一个大数组,然后,在不使用这个数组时,将内存空间释放给系统。

如果不用动态数组,就要声明一个数组,它的大小尽可能达到最大,然后再抹去那些不必要的元素。但是,如果过度使用这种方法,会导致内存的操作环境变慢。

要创建动态数组,请按照以下步骤执行:

(如果希望数组为公用数组,则)用 Public 语句声明数组,或者,(如果希望数组为模块级,则)在模块级用 Dim 语句声明数组,或者(如果希望数组为局部数组,则)在过程中用 Static 或 Dim 语句声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。
Dim DynArray ()

用 ReDim 语句分配实际的元素个数。
ReDim DynArray (X + 1)

ReDim 语句只能出现在过程中。与 Dim 语句、Static 语句不同,ReDim 语句是一个可执行语句,由于这一语句,应用程序在运行时执行一个操作。

ReDim 语句支持这样的语法,它与固定数组中使用的语法相同。对于每一维数,每个 ReDim 语句都能改变元素数目以及上下界。但是,数组的维数不能改变。

ReDim DynArray (4 to 12)

例如,用第一次声明在模块级所建立的动态数组 Matrix1:

Dim Matrix1 () As Integer

然后,在过程中给数组分配空间:

Sub CalcValuesNow ()
.
.
.
ReDim Matrix1 (19, 29)
End Sub

这里的 ReDim 语句给 Matrix 分配一个 20 × 30 的整数矩阵(元素总大小为 600)。还有一个办法,用变量设置动态数组的边界:

ReDim Matrix1 (X, Y)

注意 您可以将字符串赋值给大小可变的字节数组。一个字节数组也可以被赋值给一个可变长的字符串。一定要注意字符串中的字节数会随平台而变化。同一个字符串在 Unicode 平台上的字节数是它在非 Unicode 平台上的两倍。

保留动态数组的内容
每次执行 ReDim 语句时,当前存储在数组中的值都会全部丢失。Visual Basi 重新将数组元素的值置为 Empty(对 Variant 数组)、置为 0(对 Numeric 数组)、置为 零长度字符串(对 String 数组)或者置为 Nothing(对于对象的数组)。

在为新数据准备数组,或者要缩减数组大小以节省内存时,这样做是非常有用的。有时希望改变数组大小又不丢失数组中的数据。使用具有 Preserve 关键字的 ReDim 语句就可做到这点。例如,使用 UBound 函数引用上界,使数组扩大、增加一个元素,而现有元素的值并未丢失:

ReDim Preserve DynArray (UBound (DynArray) + 1)

在用 Preserve 关键字时,只能改变多维数组中最后一维的上界;如果改变了其它维或最后一维的下界,那么运行时就会出错。所以可这样编程:

ReDim Preserve Matrix (10, UBound (Matrix, 2) + 1)

而不可这样编程:

ReDim Preserve Matrix (UBound (Matrix, 1) + 1, 10)

参考资料:http://www.programfan.com/club/showbbs.asp?id=165998
谯萱战鸟
2019-11-11 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:31%
帮助的人:824万
展开全部
要建立某窗体级的变量,只需在此窗体顶端dim变量即可,如果需要建立工程级别的全局变量,需要建一个标准模块,然后在模块里public变量。
别外:
用窗口或者控件来记录值。
比如建了Global窗口,在上面添加控件。变量往里加。可以一个变量一个控件,或者用listbox
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
穰春邝婷
2019-01-20 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:31%
帮助的人:992万
展开全部
能再说的具体点么,从我现在的理解来看你应该从“工程”——》“添加模块”然后在模块中定义,如果我的解答不对,那么请你说的具体点~比如你要实现的功能,或者部分代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
快乐居家美食
2006-12-11 · TA获得超过1944个赞
知道大有可为答主
回答量:2392
采纳率:100%
帮助的人:1585万
展开全部
此函数应该没有错误,在WinXP sp2 + VB6 sp6下测试通过

Private Sub Command1_Click()
Dim pp() As String
Dim i As Integer
pp = ReadFile("d:\a.txt")
For i = 1 To UBound(pp)
MsgBox pp(i)
Next
End Sub

怪事儿了,我已经把以上代码放在Load里面用生成的EXE文件试过了,没有问题,你可以用我的代码试一下,如果仍有问题的话,可能是你的VB或是系统有问题了,把sp6的补丁打上,另外最好检查一下有没有在LOAD里面操作数组或是Grid之类的。从前也遇到过VB这类的错误,在调试时期看不到问题,只有运行的时候才可以出现,当时无法解决,你可以重装系统或VB试下。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式