如何编辑在Excel中通过macros代码显示的单元格中的信息?

我有一个macros,因此当您在sheet1上突出显示一行时,macros将从此行获取所有信息,并在sheet2上自行显示此信息。 如果突出显示sheet1上的不同行,sheet2上的信息将更改为显示该行中的信息。

我的问题是,如果我更改sheet2上显示的信息,它不会更改sheet1上的信息。 有没有一种方法可以添加此function?

我目前有以下代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim myList If Target.Address <> Target.EntireRow.Address Then Exit Sub If Target.Rows.Count > 1 Then Exit Sub myList = [{"B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","B13","B14","B15"}] '<- adjust to your need With Target.EntireRow For i = 1 To UBound(myList) Sheets("sheet2").Range(myList(i)).Value = .Cells(i).Value Next End With End Sub 

任何帮助都是极好的! 🙂

在将sheet1行复制到sheet2之后,还可以logging这些值来自的原始行。 然后,您可以添加一个额外的macros,将sheet2值与sheet1中的值进行比较 – 然后可以迁移任何更改。

一个可能的基本stream程:

  • 将sheet1行复制到sheet2(当前macros)
  • 将sheet1行#复制到sheet2(即一行向下)
  • 在sheet2上进行更改
  • 将sheet2行复制到sheet1行(使用sheet2上保存的行号) – >这里假定不会对sheet1进行任何更改。

您正在使用Worksheet_SelectionChange事件macros来识别何时已select完整的单个行。 您需要为Sheet2的Worksheet_Change事件macros来识别B1:B15范围中的值何时已被更改,并将更改传递给Sheet1。

由于Worksheet_Change是在值更改时触发的,因此您需要禁用Application.EnableEvents属性,以便在从Sheet1的Worksheet_SelectionChange子项写入值时不会触发它。

你将需要一些公共variables。 一个要记住更改的位置应该返回到另一个位置以查找Sheet2上的目标单元格。 这些只能在模块代码表中公开。

Book1 – Module1(Code)

 Option Explicit Public Const sRNG As String = "B1:B15" Public rRNG As Range 

我已经对原始的Worksheet_SelectionChange做了一些小的修改,并增加了对事件处理的禁用。

Book1 – Sheet1(Code)

 Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count = Columns.Count And Target.Rows.Count = 1 And _ CBool(Application.CountA(Target)) Then '<~~ one complete non-blank row On Error GoTo bm_Safe_Exit Application.EnableEvents = False With Sheet2.Range(sRNG) Set rRNG = Target.Cells(1, 1).Resize(.Columns.Count, .Rows.Count) .Cells = Application.Transpose(rRNG.Value) End With End If bm_Safe_Exit: Application.EnableEvents = True End Sub 

工作表.CodeName属性用于标识Sheet2,因为如果工作表通常被重命名,这不会更改。

对于如何计划确定一行以便将值返回给它们,有一点是不清楚的。 我已经使用了在Module1中声明的公共范围typesvariables来logging值从Sheet1传输到Sheet2的最后一个位置。 Sheet2上的更改将把它们返回到最后logging的位置。

Book1 – Sheet2(Code)

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range(sRNG)) Is Nothing Then Debug.Print rRNG.Address(0, 0, external:=True) On Error GoTo bm_Safe_Exit Application.EnableEvents = False rRNG = Application.Transpose(Range(sRNG).Value) End If bm_Safe_Exit: Application.EnableEvents = True End Sub 

请注意,“记住”的位置只在内存中。 closures并重新打开工作手册有效地“清零”。 除非您有来自Sheet1的新加载的值,否则不要在Sheet2上进行更改。