Board logo

標題: [發問] 請問如何將變動的數值在另一頁紀錄?(請幫忙修改,謝謝) [打印本頁]

作者: Brandy    時間: 2012-12-18 11:58     標題: 請問如何將變動的數值在另一頁紀錄?(請幫忙修改,謝謝)

我想在Monitor頁的第二列數值改變時,在History頁貼上,並且一直往下紀錄,如同券商軟體的分時明細

如果我在Monitor頁裡的A2打123,然後再改成456,
則在History頁裡出現 456
                                          123
請問這一段要怎麼改
[attach]13588[/attach]

Private Sub Worksheet_Change(ByVal Target As Range)
    ThisWorkbook.Sheets("History").Rows("2:2").Insert Shift:=xlDown
    Sheets("Monitor").Rows("2:2").Copy
    Sheets("History").Rows("2:2").PasteSpecial PasteValues
    Application.CutCopyMode = False
End Sub
作者: GBKEE    時間: 2012-12-18 13:31

回復 1# Brandy
工作表1模組的程式碼  :需將這程式碼複製到工作表1(Monitor)模組中
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim A As Integer
  3.     If Target.Address(0, 0) = "A2" Then
  4.         With Sheets("History")
  5.             '*** 則在History頁裡出現 456***
  6.             '如: 從不含.[B2] 開始
  7.             A = .Cells(.Rows.Count, "B").End(xlUp).Row
  8.             A = IIf(A <= 2, 3, A + 1)
  9.              .Cells(A, "B") = Target
  10.         End With
  11.     End If
  12. End Sub
複製代碼

作者: stillfish00    時間: 2012-12-18 13:46

回復 1# Brandy
這行錯了
Sheets("History").Rows("2:2").PasteSpecial PasteValues
應是
Sheets("History").Rows("2:2").PasteSpecial xlPasteValues

或改成這樣
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address(0, 0) = "A2" Then     '判斷當A2有變動時
  3.         Sheets("Monitor").Rows("2:2").Copy
  4.         Sheets("History").Rows("2:2").Insert Shift:=xlDown
  5.         Application.CutCopyMode = False
  6.     End If
  7. End Sub
複製代碼

作者: Brandy    時間: 2012-12-18 16:43

回復 2# GBKEE


    謝謝您的回覆,請問如果是整列之中只要有一格有變化要怎麼改呢?
   還有我在儲存格貼上券商的rtd如下
=RTD("money.excel",,"*SYSTEM","ServerTime")
我知道儲存格沒變化,所以不會有效果
那怎麼讓它也能一樣複製貼上在新的一列
謝謝
作者: GBKEE    時間: 2012-12-18 16:48

回復 4# Brandy
  1. If Target.Row = 2 Then  '修改看看
複製代碼

作者: Brandy    時間: 2012-12-18 17:02

回復 3# stillfish00


    謝謝您的回覆,請問如果是第二列或是第三列的任何一個儲存格有變化的話,要怎麼改,謝謝
作者: stillfish00    時間: 2012-12-18 19:56

回復 6# Brandy
我是不曉得券商RTD是怎麼工作的
本來想回答:
If Target.Row = 2 Or Target.Row = 3 Then
但是其實這還要看你變動的儲存格是怎麼給值的 , 以及你觸發的需求
如 [A1:C2] 一個一個Cell給值跟範圍給值(如[A1:C2]=Array(1, 2, 3, 4, 5, 6)) ,
它觸發Worksheet_Change的次數不一樣 ,
當然Target也不一樣 (可能單格或多格)
比較保守的方法是利用Intersect判斷比較不會漏掉 , 如:
If Not Application.Intersect(Range("2:3"), Target) Is Nothing Then
但還是老話 , 要看實際使用時的觸發需求




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)