Private Sub Command1_Click()
Dim strLen As Integer
Dim hlstr As String
Dim dataMe As Integer
Dim mytext1 As String
Dim nbyte() As Byte
Dim i As Integer
Dim endchr As Integer
strLen = Len(Text1.Text)
mytext1 = Left(Text1.Text, Len(Text1.Text) - 2)
i = 0
For n = 1 To Len(mytext1)
n = n - 1
If n Mod 3 = 0 Then
hlstr = Mid(mytext1, 1, 2)
nbyte(i) = Right(hlstr, 1) + Left(hlstr, 1) * 16
i = i + 1
n = n + 3
End If
Next n
endchr = UBound(nbyte)
endchr = endchr + 1
nbyte(endchr) = &HA
MSComm1.Output = nbyte
End Sub
顯示nbyte下標越界是什么原因,望大家支招~~
uj5u.com熱心網友回復:
endchr = UBound(nbyte)==》此時endchr已是nbyte的最后一個元素endchr = endchr + 1==>你再+1,不出界才怪!
nbyte(endchr) = &HA
uj5u.com熱心網友回復:
樓主的“下標越界”錯誤,第一次是出現在for回圈中,對nbyte(i)賦值的那句!因為nbyte()還沒有分配資料空間,是個空陣列。
在for回圈之前,應該是按strlen的值,用Redim()陳述句分配合適大小的空間。
第二次才是樓上所說的地方。
另外,樓主的for回圈那段代碼,有邏輯錯誤,
修正“下標越界”問題后,也不能得到正確的“轉換結果”。
for回圈的“使用方法”,也是明顯不合理的。
uj5u.com熱心網友回復:
邏輯上比較亂。1 在回圈中,又對回圈變數或級訓加。實際上可以用回圈陳述句來完成:
For n = 0 To Len(mytext1) - 1 Step 3
2 nbyte 在使用前需要實體化,也就是分配空間
按照你的流程邏輯,可以在回圈中 Redim Preserve nbyte(i)
3 應用處理上有問題
hlstr = Mid(mytext1, 1, 2)
nbyte(i) = Right(hlstr, 1) + Left(hlstr, 1) * 16
nbyte 的所有元素,取到的會是相同的內容。
4 去掉下面三句
endchr = UBound(nbyte)
endchr = endchr + 1
nbyte(endchr) = &HA
改為
Redim Preserve nbyte(Ubound(nbyte) + 1)
nbyte(Ubound(nbyte) ) = &HA
樓主要加強邏輯思維的訓練,否則不能適應編程作業。
uj5u.com熱心網友回復:
謝謝大家的耐心解答,畢業設計要用VB寫和西門子PLC串口通信的程式,寫來寫去問題多多,我將按照各位的建議繼續嘗試,再次感謝uj5u.com熱心網友回復:
Dim nbyte() As Byte只是定義一個動態陣列而已, 但是還沒有分配陣列記憶體呢
你得在使用之前先用redim來設定陣列長度.
uj5u.com熱心網友回復:
我也遇到了和樓主一樣的問題,上面的解答也沒看明白,求解答!!!!!!!
Dim i As Integer, j As Integer, s As Integer
Dim szpxin(5, 6) As Double, sznxin(5, 6) As Double
Dim szn1(5, 6) As Double, szsigmas(5, 6) As Double, szwm(5, 6) As Double
Dim sztiao(5, 6) As Double, szdaq(5, 6) As Double
Dim szn As Variant
Dim szd As Variant
szn = Array(4, 5, 6, 7, 8, 9)
szd = Array(20, 22, 25, 28, 32, 36, 40) '初始化陣列的方式
Dim rpxin(29) As Double, rnxin(29) As Double
Dim rn1(29) As Double, rsigma(29) As Double, rwm(29) As Double
Dim rtiao(29) As Double, rdaq(29) As Double
Dim rn(40) As Double, rd(29) As Double
For i = 0 To 5
For j = 0 To 6
Call pxin(szn(i), szd(j), szpxin(i, j), sznxin(i, j))
Call nnn(szn(i), szd(j), szn1(i, j), szsigmas(i, j), szwm(i, j), sztiao(i, j), szdaq(i, j))
Next j
Next i
s = 0
For i = 0 To 5
For j = 0 To 6
If szwm(i, j) <= 0.25 Then
rn(s) = szn(i)
rd(s) = szd(j)
rpxin(s) = Int(szpxin(i, j) * 10000) / 10000
rnxin(s) = Int(sznxin(i, j) * 100000) / 100000
rn1(s) = Int(szn1(i, j) * 100000) / 100000
rsigma(s) = Int(szsigmas(i, j) * 1000) / 1000
rwm(s) = Int(szwm(i, j) * 10000) / 10000
rtiao(s) = Int(sztiao(i, j) * 10) / 10
rdaq(s) = Int(szdaq(i, j) * 1000 * 10000) / 10000
s = s + 1
End If
Next j
Next i
程式大致意思是,先用函式計算,由不同的(n,d)組合計算出一系列引數值,然后從計算結果中提取滿足要求的值
但是在提取結果的回圈中,我之前明明定義了s=0,運行時卻提示下標越界,我把滑鼠放在代碼上發現s的值是30;s=s+1是在滿足條件才會執行的,所以s為30完全不科學嘛,
實在是摸不著頭腦,不知道哪里出錯了,跪求解答!!!!!!!!萬分感謝
uj5u.com熱心網友回復:
我自己找到問題出哪了,,,,囧o(╯□╰)o
忽略我吧。。。。就當給樓主加人氣了。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/120553.html
標籤:VB基礎類
上一篇:求助VB大神指點一二,小弟在此跪謝 "MDB轉換Excel
下一篇:求讀記憶體代碼
