Я хотел бы создать код, который переносит содержимое выделенных ячеек из одной таблицы в другую на одном листе с содержимым, я использую кнопку для копирования содержимого, но мне бы хотелось создать макрос для переноса содержимого динамически, нажимая на кнопку, когда пользователь меняет содержимое выделенных ячеек первой таблицы, содержимое автоматически изменяется во второй таблице или снова нажимает кнопку.Как передать выделенные ячейки в Excel 2007 из одной таблицы в другую на одном листе?
Я использую этот код, чтобы выделить клетки
' Set of highlighted cells indexed by row number
Dim highlightedCells As New Collection
' Scan existing sheet for any cells coloured 'red' and initialise the
' run-time collection of 'highlighted' cells.
Private Sub Worksheet_Activate()
ActiveSheet.Unprotect Password:="[email protected]"
Dim existingHighlights As Range
' Reset the collection of highlighted cells ready to rebuild it
Set highlightedCells = New Collection
' Find the first cell that has its background coloured red
Application.FindFormat.Interior.ColorIndex = 3
Set existingHighlights = ActiveSheet.Cells.Find("", _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=True)
' Process for as long as we have more matches
Do While Not existingHighlights Is Nothing
cRow = existingHighlights.Row
' Add a reference only to the first coloured cell if multiple
' exist in a single row (will only occur if background manually set)
Err.Clear
On Error Resume Next
Call highlightedCells.Add(existingHighlights.Address, CStr(cRow))
On Error GoTo 0
' Search from the cell after the last match. Note an error in Excel
' appears to prevent the FindNext method from finding formats correctly
Application.FindFormat.Interior.ColorIndex = 3
Set existingHighlights = ActiveSheet.Cells.Find("", _
After:=existingHighlights, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=True)
' Abort the search if we've looped back to the top of the sheet
If (existingHighlights.Row < cRow) Then
Exit Do
End If
Loop
ActiveSheet.Protect Password:="[email protected]"
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ActiveSheet.Unprotect Password:="[email protected]"
Dim hCell As String
Dim cellAlreadyHighlighted As Boolean
hCell = ""
Err.Clear
On Error Resume Next
hCell = highlightedCells.Item(CStr(Target.Row))
On Error GoTo 0
If (hCell <> "") Then
ActiveSheet.Range(hCell).Interior.ColorIndex = 2
If (hCell = Target.Address) Then
Call highlightedCells.Remove(CStr(Target.Row))
Target.Interior.ColorIndex = 2
Else
Call highlightedCells.Remove(CStr(Target.Row))
Call highlightedCells.Add(Target.Address, CStr(Target.Row))
Target.Interior.ColorIndex = 3
End If
Else
Err.Clear
On Error Resume Next
highlightedCells.Remove (CStr(Target.Row))
On Error GoTo 0
Call highlightedCells.Add(Target.Address, CStr(Target.Row))
Target.Interior.ColorIndex = 3
End If
Cancel = True
ActiveSheet.Protect Password:="[email protected]"
End Sub
И я использую этот код, чтобы скопировать выделенные клетки:
Sub CopyCat()
ActiveSheet.Unprotect Password:="[email protected]"
Dim LR As Long, i As Long, j As Long
Dim c As Range
j = 1
LR = Range("A" & Rows.Count).End(xlUp).Row
For Each c In Worksheets("MB").Range("A1:O" & LR)
If c.Interior.ColorIndex = 3 Then
c.Copy Destination:=Worksheets("MB").Range("J" & j)
j = j + 1
End If
Next c
ActiveSheet.Protect Password:="[email protected]"
End Sub
Пожалуйста, помогите !!!!
Поскольку вы просто хотите изменить любые ячейки во второй таблице, когда ячейки в первой таблице изменены, почему бы не (во второй таблице) создать ссылку на исходные ячейки? Как и в вашем листе2, у вас есть ячейки, которые вы хотите обновить, связанные с их значением в Sheet1. Имеет ли это смысл? Таким образом, изменение значения в Sheet1 автоматически обновляет Sheet2, без необходимости использования макроса/VB. – BruceWayne
Не могли бы вы рассказать мне, как связать его? –