Excel 使用宏更新数据

Excel 使用宏更新数据,excel,vba,Excel,Vba,我想将工作表中记录的数据更新到另一工作表中的另一个主副本。我的问题是,我如何使它,使我可以采取的记录在工作表上,并更新,因为我想它? 到目前为止,我只能更新最后一行,即使我在代码中更改了行号。你知道我为什么和如何解决它吗 代码如下所示 Private Sub CommandButton1_Click() Dim Name As String Dim Problem As Integer Worksheets("Sheet1").Select Name = Range("C4") Prob

我想将工作表中记录的数据更新到另一工作表中的另一个主副本。我的问题是,我如何使它,使我可以采取的记录在工作表上,并更新,因为我想它? 到目前为止,我只能更新最后一行,即使我在代码中更改了行号。你知道我为什么和如何解决它吗

代码如下所示

Private Sub CommandButton1_Click()


Dim Name As String
Dim Problem As Integer


Worksheets("Sheet1").Select
Name = Range("C4")
Problem = Range("D4")
Worksheets("Sheet2").Select
Worksheets("Sheet2").Range("B4").Select
If Worksheets("Sheet2").Range("B4").Offset(1, 0) <> "" Then
Worksheets("Sheet2").Range("B4").End(xlDown).Select
End If
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = Name
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Problem
Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("C4").Select
End Sub
Private子命令按钮1\u单击()
将名称设置为字符串
作为整数的Dim问题
工作表(“表1”)。选择
名称=范围(“C4”)
问题=范围(“D4”)
工作表(“表2”)。选择
工作表(“表2”)。范围(“B4”)。选择
如果工作表(“表2”).范围(“B4”).偏移量(1,0)”,则
工作表(“表2”)。范围(“B4”)。结束(xlDown)。选择
如果结束
ActiveCell.Offset(1,0)。选择
ActiveCell.Value=Name
ActiveCell.Offset(0,1)。选择
ActiveCell.Value=问题
工作表(“表1”)。选择
工作表(“表1”)。范围(“C4”)。选择
端接头
Sheet1:插入新数据并按update。这将向表2发送值

表2:数据在此更新。例如,我想回到这个列表的中间,编辑其中的一个,例如jo的条目

现在我明白了:)


这没有经过测试,但应该起作用

首先,您所说的“记录的数据”是什么意思?你是说“宏录制”吗?还有,你是在说工作表还是工作簿?不,例如,在代码中,我把名字和问题作为变量。现在,我从某处得到了这两个变量的数据,我想使用Sheet1,将我的数据插入到Sheet2中,最终它将有这两个变量的完整数据列表。这是可以实现的,但假设我想编辑一张旧唱片。如何引用旧记录并根据需要进行编辑?现在,它只能添加到列表中,但我无法编辑。它们是同一工作簿中的两张工作表。谢谢我认为你必须发布工作表的结构,因为覆盖单元格而不知道那些“旧记录”是如何定位的只是猜测:)此外。。。您的代码中确实充满了
。请选择看起来不太好的
。好的,我会把它挂起来。嗯,我是一个初学者,所以我不太确定我还能做些什么。汉克斯·诺尔德,我刚刚试过。它确实指向特定的名称,但无论我在RRY中键入了什么值,该值都会更改为0,因为它寻址了错误的范围:)正确的值是B5和C5,表示“名称”和“问题”。编辑了我的答案是的,现在可以修改了。谢谢!但是,新条目的名称和值将相互偏移。与名称相比,问题条目位于下一行只是好奇,如果我的工作表的名称和范围与我今天的不同,除了进入宏本身之外,是否可以更改?假设您有10个工作表。。。你会把所有的可能性都嵌套在一个If中吗?
Private Sub CommandButton1_Click()

Dim Name As String
Dim Problem As Integer
Dim Source As Worksheet, Target As Worksheet
Dim ItsAMatch As Boolean
Dim i As Integer

Set Source = ThisWorkbook.Worksheets("Sheet1")
Set Target = ThisWorkbook.Worksheets("Sheet2")
Name = Source.Range("B5")
Problem = Source.Range("C5")

Do Until IsEmpty(Target.Cells(5+i,2)) ' This will loop down through non empty cells from row 5 of column 2 
    If Target.Cells(5+i,2) = Name Then
        ItsAMatch = True 
        Target.Cells(5+i,3) = Problem ' This will overwrite your "Problem" value if the name was already in the column
        Exit Do
    End If
    i = i+1
Loop

' This will write new records if the name hasn't been already found
If ItsAMatch = False Then
    Target.Cells(5,2).End(xlDown).Offset(1,0) = Name
    Target.Cells(5,2).End(xlDown).Offset(0,1) = Problem
End If

Set Source = Nothing
Set Target = Nothing

End Sub