Нужно при нажатии на определенное поле листа1 (строка спецификации) открыть лист2 со списком позиций и скопировать от туда значение обратно на лист спецификации.
Сам сделал так:
на листе спецификации при выборе ячейки из определенного массива вызываю функцию открытия листа2
Код |
---|
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Adres As String
If Not Intersect(Target, Range("$b$12:$g$29" ;) ) Is Nothing Then
Call Module1.Open_niz
End If
End Sub |
Код |
---|
Sub Open_niz()
Sheets(Sheets("Спецификация").Cells(6, 4).Value).Select
MsgBox "Выбирите элемент", vbSystemModal, ""
End Sub |
На листе2 так же при выборе ячейки, копирую ее, открываю снова спецификацию и вставляю.
Код |
---|
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Adres2 As String
If Not Intersect(Target, Range("$a$1:$a$100")) Is Nothing Then
Adres2 = ActiveCell.Address
Call Module1.past_in_spec
End If
End Sub
|
Код |
---|
Sub past_in_spec()
Dim Target As Range
Selection.Copy
Sheets("Спецификация").Select
ActiveSheet.Paste
MsgBox "Элемент вставлен", vbSystemModal, ""
End Sub
|
Функция ВПР подставляет цену
Вопрос
Можно ли это все сделать одним макросом, что бы проверку диапазона и копирование данных с последующей вставкой, не нужно было писать в каждом листе.
Т. е. Выбираю лист с которого буду вставлять данные в ячейке "D6" в спецификации, затем выбираю ячейку в которую надо вставить данные - при этом открывается выбранный в "D6" лист, на нем кликаю по ячейке с данными, если эти данные из правильного диапазона, то этот лист закрывается и данные вставляются в спецификацию. При этом, если я просто открою лист с данными и буду выбирать там ячейки, то они никуда вставляться не будут.
Офис 2003!
Списком и Проверкой пользоваться не могу, тк листов с позициями несколько (25), на каждом много разных позиций (более 2000) - в общем пробовал делать - пользоваться крайне неудобно.