我有一个宏,所以当你在sheet1上突出显示一行时,宏会从该行中获取所有信息并在sheet2上自行显示。如果在sheet1上突出显示另一行,则sheet2上的信息将更改为显示该行的信息。
我的问题是,如果我更改了sheet2上显示的信息,它不会更改sheet1上的信息。有没有办法添加这个功能?
目前我有以下代码:
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
任何帮助都会很棒! :)
答案 0 :(得分:0)
将sheet1行复制到sheet2后,您还可以记录值来自的原始行#。然后,您可以添加一个额外的宏,将sheet2值与sheet1中的值进行比较 - 然后可以迁移任何更改。
可能的基本流程:
答案 1 :(得分:0)
您当前正在使用Worksheet_SelectionChange事件宏来识别何时选择了完整的单行。 Sheet2需要Worksheet_Change事件宏来识别B1:B15范围内的值何时更改并将更改传递回Sheet1。
由于Worksheet_Change是在值更改时触发的,因此当您从Sheet1的Worksheet_SelectionChange子句写入值时,您需要禁用Application.EnableEvents property,以便不触发。
您将需要几个公共变量。一个要记住应该返回更改的位置,另一个用于在Sheet2上找到目标单元格。这些只能在模块代码表中公开。
Book1 - Module1(代码)
Option Explicit
Public Const sRNG As String = "B1:B15"
Public rRNG As Range
我对原始的Worksheet_SelectionChange进行了一些小修改,并添加了禁用事件处理功能。
Book1 - Sheet1(代码)
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 property用于识别 Sheet2 ,因为如果通常重命名工作表,则不会更改。
关于如何识别行以在更改后返回值时,有点不清楚。我使用了Module1中声明的公共范围类型变量来记录值从Sheet1传输到Sheet2的最后位置。 Sheet2上的更改会将它们返回到最后记录的位置。
Book1 - Sheet2(代码)
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
请注意,“记住的”位置仅在内存中。有效地关闭并重新打开工作簿会使其“归零”。除非Sheet1中有新加载的值,否则不要对Sheet2进行更改。