Есть XLS файл, состоящий из 2х листов. В 1-м листе - готовое коммерческое предложение, в котором я ввожу код товара и автоматически вставляется строка со 2-го листа, содержащая характеристики данного товара, соответстующие введеному коду. Вопрос: Скажите пожалуйста, можно ли сделать так, чтобы вставлялась не одна строка, а несколько строк по одному коду, допустим 10 строк, т.к. Характеристики товара состоят из нескольих строк (параметров) ? Спасибо.
Есть XLS файл, состоящий из 2х листов. В 1-м листе - готовое коммерческое предложение, в котором я ввожу код товара и автоматически вставляется строка со 2-го листа, содержащая характеристики данного товара, соответстующие введеному коду. Вопрос: Скажите пожалуйста, можно ли сделать так, чтобы вставлялась не одна строка, а несколько строк по одному коду, допустим 10 строк, т.к. Характеристики товара состоят из нескольих строк (параметров) ? Спасибо.lin
Вопрос: Скажите пожалуйста, можно ли сделать так, чтобы вставлялась не одна строка, а несколько строк по одному коду, допустим 10 строк, т.к. Характеристики товара состоят из нескольих строк (параметров) ?
Вопрос: Скажите пожалуйста, можно ли сделать так, чтобы вставлялась не одна строка, а несколько строк по одному коду, допустим 10 строк, т.к. Характеристики товара состоят из нескольих строк (параметров) ?
Хотя если делать макрос для конкретного файла и столбца - можно всё написать иначе и проще. По событию изменения ячейки ищем значение в базе, копируем всё что есть правее от найденной строки до строки с следующим значением. Или пока не кончится база.
Вот, код в модуль первого листа: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim x As Range, r1 As Range, r2 As Range
If Target.Column = 1 Then If Target.Cells.Count = 1 Then
Set x = Sheets(2).Columns(1).Find(Target, , , xlWhole) If Not x Is Nothing Then Set r1 = Target Set r2 = x Do r2.Offset(, 1).Copy r1.Offset(, 1) r2.Offset(, 2).Copy r1.Offset(, 2) 'или если не нужны форматы: 'r1.Offset(, 1) = r2.Offset(, 1) 'r1.Offset(, 2) = r2.Offset(, 2) Set r1 = r1.Offset(1) Set r2 = r2.Offset(1) Loop While Len(Trim(r2.Value)) = 0 And Len(Trim(r2.Offset(, 1).Value)) > 0 End If Application.ScreenUpdating = True Application.EnableEvents = True End If End If End Sub
[/vba] Или если действительно нужно строки вставлять (кроме первой!): [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim x As Range, r1 As Range, r2 As Range
If Target.Column = 1 Then If Target.Cells.Count = 1 Then
Set x = Sheets(2).Columns(1).Find(Target, , , xlWhole) If Not x Is Nothing Then Set r1 = Target Set r2 = x Do r2.Offset(, 1).Copy r1.Offset(, 1) r2.Offset(, 2).Copy r1.Offset(, 2) 'или если не нужны форматы: 'r1.Offset(, 1) = r2.Offset(, 1) 'r1.Offset(, 2) = r2.Offset(, 2) r1.Offset(1).EntireRow.Insert Set r1 = r1.Offset(1) Set r2 = r2.Offset(1) Loop While Len(Trim(r2.Value)) = 0 And Len(Trim(r2.Offset(, 1).Value)) > 0 r1.EntireRow.Delete End If Application.ScreenUpdating = True Application.EnableEvents = True End If End If End Sub
Хотя если делать макрос для конкретного файла и столбца - можно всё написать иначе и проще. По событию изменения ячейки ищем значение в базе, копируем всё что есть правее от найденной строки до строки с следующим значением. Или пока не кончится база.
Вот, код в модуль первого листа: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim x As Range, r1 As Range, r2 As Range
If Target.Column = 1 Then If Target.Cells.Count = 1 Then
Set x = Sheets(2).Columns(1).Find(Target, , , xlWhole) If Not x Is Nothing Then Set r1 = Target Set r2 = x Do r2.Offset(, 1).Copy r1.Offset(, 1) r2.Offset(, 2).Copy r1.Offset(, 2) 'или если не нужны форматы: 'r1.Offset(, 1) = r2.Offset(, 1) 'r1.Offset(, 2) = r2.Offset(, 2) Set r1 = r1.Offset(1) Set r2 = r2.Offset(1) Loop While Len(Trim(r2.Value)) = 0 And Len(Trim(r2.Offset(, 1).Value)) > 0 End If Application.ScreenUpdating = True Application.EnableEvents = True End If End If End Sub
[/vba] Или если действительно нужно строки вставлять (кроме первой!): [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim x As Range, r1 As Range, r2 As Range
If Target.Column = 1 Then If Target.Cells.Count = 1 Then
Set x = Sheets(2).Columns(1).Find(Target, , , xlWhole) If Not x Is Nothing Then Set r1 = Target Set r2 = x Do r2.Offset(, 1).Copy r1.Offset(, 1) r2.Offset(, 2).Copy r1.Offset(, 2) 'или если не нужны форматы: 'r1.Offset(, 1) = r2.Offset(, 1) 'r1.Offset(, 2) = r2.Offset(, 2) r1.Offset(1).EntireRow.Insert Set r1 = r1.Offset(1) Set r2 = r2.Offset(1) Loop While Len(Trim(r2.Value)) = 0 And Len(Trim(r2.Offset(, 1).Value)) > 0 r1.EntireRow.Delete End If Application.ScreenUpdating = True Application.EnableEvents = True End If End If End Sub