首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

VB 數組部分修改後,如何獲取修改下標及關聯其餘部分

     編輯:程式設計疑難解答

VB/VBA 中,數組部分元素被修改後,若需知悉哪些下標被修改並關聯處理其餘元素,可通過自定義結構體 + ByRef 參數實現。

方案:封裝數組與修改追蹤

' 定義結構體
Type ArrayTracker
  Data() As Variant   ' 原始數據
  ModifiedIndexes As Collection  ' 存儲被修改的下標
End Type

' 修改函數:ByRef 傳遞結構體,記錄下標
Sub ModifyArray(ByRef tracker As ArrayTracker, index As Long, newValue As Variant)
  If index >= LBound(tracker.Data) And index <= UBound(tracker.Data) Then
    tracker.Data(index) = newValue
    tracker.ModifiedIndexes.Add index  ' 記錄修改下標
  End If
End Sub

' 使用示例
Dim tracker As ArrayTracker
ReDim tracker.Data(1 To 10)
Set tracker.ModifiedIndexes = New Collection

' 初始化
For i = 1 To 10: tracker.Data(i) = i: Next

' 修改部分元素
ModifyArray tracker, 3, 99
ModifyArray tracker, 7, 88

' 獲取修改下標
Dim idx As Variant
For Each idx In tracker.ModifiedIndexes
  Debug.Print "Modified index: " & idx & ", New value: " & tracker.Data(idx)
Next

' 其餘元素關聯處理(如乘 2)
For i = LBound(tracker.Data) To UBound(tracker.Data)
  If Not IsInCollection(tracker.ModifiedIndexes, i) Then
    tracker.Data(i) = tracker.Data(i) * 2
  End If
Next

輔助函數:判斷下標是否在集合中

Function IsInCollection(col As Collection, val As Long) As Boolean
  On Error Resume Next
  Dim dummy As Variant
  dummy = col.Item(CStr(val))  ' Collection 用鍵存取,需轉字符串
  IsInCollection = (Err.Number = 0)
  On Error GoTo 0
End Function

替代方案:使用類模塊

更面向對象的方式:創建 CArrayWrapper 類,封裝數組、修改日誌、事件通知,支持 WithEvents 實時響應修改。

總結

  • VB 原生數組無修改通知機制。
  • 用 結構體 + ByRef 封裝數據與修改下標集合。
  • 修改時同步記錄下標,後續可遍歷集合區分「已修改」與「未修改」元素分別處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved