VBA有關儲存格變更

2012-11-04 9:00 am
我想知道如果某一儲存格內容變更,
如何可以在另一工作表內以表格方式儲存其變更的內容?

即是假設
工作表1的A1的內容變更了,
工作表2的A2會儲存第1次變更的內容,
然後工作表1的A1的內容再變時,
工作表2的A3會儲存第2次變更的容。

回答 (2)

2012-11-05 6:23 am
✔ 最佳答案
就你的假設,在VISUAL BASIC 選 "工作表1 " 輸入以下程式碼(如圖):
(第一次輸入已經會在 "工作表2的A1" UPDATE)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then
x = Application.WorksheetFunction.CountA(Sheets(2).[a:a]) + 1
Sheets(2).Cells(x, 1) = Sheets(1).[a1]
End If
End Sub


圖片參考:http://imgcld.yimg.com/8/n/HA00726953/o/20121104221654.jpg
2012-11-05 8:42 pm
我相信你的問題是想要在另一個工作表內加入一個所有Change的Log List
如果我誤解了, 請別介意:

語法如下, 請Copy到用 戶使用的Sheet(s) 的"Macro vba"裹.
在有vba的Sheet中打東西試試:

Private Sub Worksheet_Change(ByVal Target As Range)
'Mrl System Limited - Morris Leung
Dim ChkA As Boolean
Dim ObjA As Object
Dim TmpA, TmpB, TmpSeq As Integer
TmpB = 100 'Recorded Number of Row
ChkA = True
For Each i In Sheets
If i.Name = "Log" Then
ChkA = False
Set ObjA = i
Exit For
End If
Next
If ChkA Then
Set ObjA = Sheets.Add
ObjA.Name = "Log"
End If
If ObjA.Cells(ObjA.Cells.EntireRow.Count, 1).End(-4162).Row >= TmpB Then
ObjA.Range(ObjA.Cells(1, 1), ObjA.Cells(Target.Cells.Count, 1)).EntireRow.Delete
TmpA = ObjA.Cells(ObjA.Cells.EntireRow.Count, 1).End(-4162).Row + 1
Else
TmpA = ObjA.Cells(ObjA.Cells.EntireRow.Count, 1).End(-4162).Row + 1
End If
TmpSeq = ObjA.Cells(TmpA - 1, 2).Value + 1
For Each i In Target.Cells
ObjA.Cells(TmpA, 1).Value = Now()
ObjA.Cells(TmpA, 2).Value = TmpSeq
ObjA.Cells(TmpA, 3).Value = Me.Name
ObjA.Cells(TmpA, 4).Value = i.Address
ObjA.Cells(TmpA, 5).Value = i.Value
TmpA = TmpA + 1
Next
End Sub


收錄日期: 2021-04-13 19:05:57
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20121104000051KK00032

檢視 Wayback Machine 備份