江湖救急啊。模块全局数组变量问题。
江湖的大佬们,我是个新手,我想定义一个 当前窗体中所有sub或function可以使用的 array.
我看了网上说只要定义到模块中就能用了,但是我这搞死都提示:下标越界。。。。。
请指教!!。。。。感激不尽啊。。
模块中:
Public my_arr() As Single
Public Function get_array()
Dim fnr As Integer
Dim arr_len As Integer
Dim another As String
Dim my_arr()
fnr = FreeFile
arr_len = 0
filter_line = getlinescount("filter.txt") - 1
If filter_line < 0 Then
filter_line = 0
End If
ReDim my_arr(filter_line)
Open "filter.txt" For Input As #fnr
If LOF(fnr) = 0 Then
MsgBox "请在右侧输入最少一对开始和结束字符!"
Close #fnr
Else
Do While Not EOF(1)
Input #1, another
my_arr(arr_len) = another
arr_len = arr_len + 1
Loop
Close #fnr
End If
MsgBox my_arr(0) ---这里是可以取到值的
End Function
【窗体中代码:】
Private Sub btnCompute_Click()
If Dir("output.txt") <> "" Then
Kill "output.txt"
Open "output.txt" For Output As #1
Close #1
End If
btnCompute.Enabled = False
Dim s As String
Dim n, filepath
filepath = txtfp.Text
If filepath = "" Then
MsgBox "请选择文件路径!"
Else
If chkIsfilt.Value = 1 Then
Call filter_to_new(filepath)
Call get_array
MsgBox my_arr(0) ----搞死提示:下标越界。。。求救啊
End If
End If
btnCompute.Enabled = True
End Sub
[解决办法]
Public my_arr() As Single
Public Function get_array()
Dim fnr As Integer
Dim arr_len As Integer
Dim another As String
Dim my_arr()
==================================
你在function中又重新定义了一个同名的数组, 按照优先规则,你在function中对my_arr所做的任何动作只是对于其内部的数组生效, 而对那个公有的public my_arr()没有任何作用.
当你在另外的过程btnCompute_Click中访问的是public my_arr(), 这个数组既没有初始化,更没有赋值, 当然越界咯.
[解决办法]
Const MAXN=10000
Public global_arr(MAXN) As Single