返回列表 上一主題 發帖

[發問] VBA 中計算數值問題

我想請問超級版主, 如果用VBA語法, 如何判斷矩陣中的任一數值被改變, 並且能夠讓它重新計算1.............1........3.......2........(1*1*3*2)
1.............1....... 2......1.........(1*1*3*1)
1/3.....1/2.......1.......3........(1/3*1/2*1*3)
再麻煩您~~

TOP

回復 11# temple
  1. '**************'工作表上數值的變動*************************
  2. Option Explicit
  3. Private Sub Worksheet_Change(ByVal Target As Range)
  4.     Application.EnableEvents = False
  5.     If Not Intersect(Range("a1:e3"), Target.Cells(1)) Is Nothing Then
  6.         '數值的改變在 "a1:e3" 的範圍中
  7.         Ex_工作表上的重算
  8.     End If
  9.     Application.EnableEvents = False
  10. End Sub
  11. Sub Ex_工作表上的重算()
  12.     Dim myarray1(), ar(), i As Integer
  13.     With Range("a1:d3")
  14.         For i = 1 To .Rows.Count
  15.             Rows(i).Cells(1, "E") = Application.Product(.Rows(i))
  16.         Next
  17.     End With
  18. End Sub
  19. '*************'陣列數值改變 *******************************
  20. Option Explicit
  21. Dim Ar_Key As String, myarray1()
  22. Sub Ex()
  23.     Dim i As Integer, S As String
  24.     myarray1() = Range("a1:d3").Value   '陣列數值
  25.     For i = 1 To UBound(myarray1)
  26.         S = S & Join(Application.Index(myarray1, i), ",") & ","
  27.     Next
  28.     If S <> Ar_Key Then  '比對陣列數值
  29.         Ex_重算
  30.         Ex_陣列紀錄
  31.     End If
  32. End Sub
  33. Sub Ex_重算()
  34.     Dim myarray1(), ar(), i As Integer
  35.     myarray1() = Range("a1:d3").Value
  36.    
  37.     ReDim ar(1 To UBound(myarray1))
  38.     For i = 1 To UBound(ar)
  39.         ar(i) = Application.Product(Application.Index(myarray1, i))
  40.     Next
  41.     Range("e1:e3") = Application.WorksheetFunction.Transpose(ar)
  42. End Sub
  43. Private Sub Ex_陣列紀錄()  '
  44.     Dim i As Integer
  45.     myarray1() = Range("a1:d3").Value
  46.     Ar_Key = ""
  47.     For i = 1 To UBound(myarray1)
  48.         Ar_Key = Ar_Key & Join(Application.Index(myarray1, i), ",") & ","
  49.         '陣列資料紀錄下來
  50.     Next
  51. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

超級版主, 真的是太感謝你了!!!

TOP

超級版主您好,

因為我的權限有限, 無法將程式檔案附加上來, 也無法傳短消息給您, 我仍然有矩陣計算問題想請教您, 不曉得應該怎麼處理, 方便給我您的 email? 或是有其它方式? 麻煩您

TOP

超級版主您好,
我的問題是: 變更數值時, 沒有辦法進行重算, 不曉得是哪裡出了問題
Matrix.rar (5.57 KB)

TOP

超級版主您好, 我發現檔案中的語法好像沒有被儲存起來,所以用pdf 檔把語法複製下,再請您幫我看看,
有問題的語法.pdf (49.64 KB)

TOP

回復 16# temple
Matrix.xlsx  沒有巨集的Excel 檔
Matrix.xlsm  有巨集的Excel 檔
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

超級版主您好, 我選"excel活頁簿" 或"啟用巨集的活頁簿", 都無法儲存語法, 不知道為什麼?  只能附上 pdf檔給您

TOP

超級版主您好,之前可能是我在存檔時步驟上有問題, 或是自己粗心, 今天又試了一次存 .xlsm 就有儲存到語法, 可是, 在更改元素後仍然無法重算, 不曉得是不是事件沒有建立的緣因, 請超級版主指點 new matrix.rar (12.19 KB)

TOP

回復 19# temple
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Application.EnableEvents = False  '停止觸發事件
  3.     If Not Intersect(Range("b2:e5"), Target.Cells(1)) Is Nothing Then
  4.         '數值的改變在 "a1:e3" 的範圍中
  5.         Ex_工作表上的重算
  6.     End If
  7.     Application.EnableEvents = True    '要會回復能觸發事件
  8.     'Application.EnableEvents = False  '這裡錯誤
  9.    
  10. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 有時當思無時苦,好天要積雨來糧。
返回列表 上一主題