希望有人能帮助我......
如果我有这 4 个单元格,则每次我将一个值输入到其中任何一个单元格中时,它都会在同一工作簿的另一张表上创建一个日志。
例如,如果我在工作表 1 上有单元格 B1、C2、B3 和 A2。如果我在其中一个单元格中输入一个值并按下回车键,相同的值将显示在工作表 2 的单元格 A2 上。回到工作表 1,在我按下回车键并在 4 个单元格之一中输入一个值之后,该值将消失并等待我向这 4 个单元格中的任意一个输入下一个值。因此顺序是...在工作表 1 的 4 个单元格之一中输入一个值,它会自动记录到工作表 2 的 A2 中。工作表 1 上的下一个值将记录到工作表 2 的 A3 上并沿着工作表 2 的行向下移动...每次我按下回车键时(请记住,在我按下回车键后,工作表 1 上的 4 个单元格中的任意一个的值都需要消失)。
答案1
最简单的方法是将Worksheet_Change
函数放入工作表代码中,Sheet1
通过右键单击“Sheet1”选项卡并选择查看代码。
解释
我们可以使用类似这样的方法来跟踪 Sheet1 中的更改:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
MsgBox ("Value changed")
End If
End Sub
这只是在工作表中查找更改,并将更改作为变量返回Target
。然后我们使用在表单中返回的
更改地址来检查更改的地址。然后, 一个简单的语句检查目标是否是我们指定的任何单元格。Target.Address
$A$1
If
现在我们需要将值传到另一张表。
首先我需要一些变量。我将它们称为 rSave(保存值的范围)和 iRow(捕获最后使用的行的整数)。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer, rSave As Range
Set rSave = Worksheets("Sheet2").Range("A1")
If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
iRow = rSave(Rows.Count).End(xlUp).Row
rSave.Offset(iRow).Value = Target.Value
'Target.Value = ""
End If
End Sub
我们将范围变量设置为我们想要开始输出数字的单元格上方。
我们检查更改并设置iRow
为 Sheet2 中列的最后使用的行。
我们用行偏移范围iRow
并写入目标数字。
然后,我们想将 Sheet1 中的值重新设置为零。但是,这会触发我们正在跟踪的单元格的变化,并基本上会导致无限循环。
为了解决这个问题,我们首先检查单元格是否为空,然后再试一次。
最后我们得到这样的结果:
实际答案
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer, rSave As Range
Set rSave = Worksheets("Sheet2").Range("A1")
If Target.Address = "$B$1" Or Target.Address = "$C$2" Or Target.Address = "$B$3" Or Target.Address = "$A$2" Then
If Target.Value <> "" Then
iRow = rSave(Rows.Count).End(xlUp).Row
rSave.Offset(iRow).Value = Target.Value
Target.Value = ""
End If
End If
End Sub
祝你好运!
请注意,这将保存任何事物在 Sheet1 的单元格中输入。您可以通过And
在 处添加 来限制此操作If Target.Value <> "" Then
,并检查更多条件,例如特定数字或类似条件。