問題:陣列的 UBound(arr) -- '這個數值得到一次值后不會按實際改變,如何處理。怎么上傳附件?
方便請聯系QQ1104859173
Private Sub CommandButton21_Click()
Dim arr, arrtemp
Dim i%, j%, s% '陣列用變數
'************************************** '表三丙匯總資料
Sheets("表三丙").Activate
arr = Sheets("表三丙").Range("A1:L" & [c3000].End(xlUp).Row)
MsgBox UBound(arr) '這個數值不會按實際改變,顯示1543,實際是1422
ReDim arrtemp(1 To UBound(arr), 1 To 12)
s = 0
For i = 8 To UBound(arr) '資料區域從第8行開始'
If IsNumeric(arr(i, 5)) = True And arr(i, 5) > 0 Then '數量列為數值型且值>0的行選中
s = s + 1
For j = 2 To 12 'A列為原表序號不選擇
arrtemp(s, j) = arr(i, j)
arrtemp(s, 1) = s '這列為新編序號
Next
End If
's 取得有效資料行數
Next
Sheets("表三丙").Range("a1675").Resize(s, 12) = arrtemp '從陣列粘貼值
'*************************************
Sheets("表三乙").Activate
arr = Sheets("表三乙").Range("A1:L" & [c3000].End(xlUp).Row)
MsgBox UBound(arr) '這個數值不會按實際改變,顯示1683,實際是1543
ReDim arrtemp(1 To UBound(arr), 1 To 12)
s = 0
For i = 8 To UBound(arr) '資料區域從第8行開始'
If IsNumeric(arr(i, 5)) = True And arr(i, 5) > 0 Then '數量列為數值型且值>0的行選中
s = s + 1
For j = 2 To 12 'A列為原表序號不選擇
arrtemp(s, j) = arr(i, j)
arrtemp(s, 1) = s '這列為新編序號
Next
End If
's 取得有效資料行數
Next
Sheets("表三乙").Range("a1516").Resize(s, 12) = arrtemp '從陣列粘貼值
End Sub
uj5u.com熱心網友回復:
UBound( ) 是獲取陣列下標的“上界值”,跟陣列的大小(如果是動態陣列,取決于呼叫時的實際情況)、下標的“下界值(起始下標)”,
以及“第幾維”(如果是多維陣列)相關,你去修改它干什么!!!

你真要想“改”,只要用 Redim重新指定陣列大小就行了。
如果是“固定陣列”,可以通過修改陣列描述符中相關引數來更改(當然動態陣列也可以這樣改)。
只是,真有這種操作的必要 ???
uj5u.com熱心網友回復:
UBound 函式
回傳一個 Long 型資料,其值為指定的陣列維可用的最大下標。
語法
UBound(arrayname[, dimension])
UBound 函式的語法包含下面部分:
部分 描述
arrayname 必需的。陣列變數的名稱,遵循標準變數命名約定。
dimension 可選的;Variant (Long)。指定回傳哪一維的上界。1 表示第一維,2 表示第二維,如此等等。如果省略 dimension,就認為是 1。
說明
UBound 函式與 LBound 函式一起使用,用來確定一個陣列的大小。LBound 用來確定陣列某一維的上界。
對具有下述維數的陣列而言,UBound 的回傳值見下表:
Dim A(1 To 100, 0 To 3, -3 To 4)
陳述句 回傳值
UBound(A, 1) 100
UBound(A, 2) 3
UBound(A, 3) 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/54307.html
標籤:VBA
