Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: VBA в Excel: копирование данных с помощь массива?? Добавлено: 24.03.06 00:34  

Автор вопроса:  den
Всем доброго времени суток.
Вопрос по VBA.
Есть лист Excel. Есть два столбца с данными (текстовые).
Необходимо в столбце В просмотреть определённый диапазон (напр. "В1:В200").
Есть условие, выбирать ячейку содержащую значение "*отдел*".
В общем, примерно так:
Sub search()
    Worksheets("лист2").Activate
    For Each cell In Range("b1:b200")
        If cell = "отдел" Then 'если значение в ячейке = "отдел"
        cell.Select
        ActiveCell.Offset(0, -1).Select 'сдвигаемся на одну ячейку влево
        Selection.Copy 'копируем данные в этой ячейке (текст)
        Workbooks("Фонды.xls").Worksheets("Sheet1").Activate 'открываем книгу-получатель
        Range("b6").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        ActiveCell.Offset(1, 0).Select
        Workbooks("макрос.xls").Worksheets("лист2").Activate
        End If
        Next cell
End Sub

Всё бы хорошо, но уже при втором проходе цикла, в момент когда мы переходим в книгу-получатель данных,
снова активируется ячейка "В6", и ранее вставленные в неё данные затираются.
Может быть создать массив, и в него вставлять скопированную ячейку? Но как это сделать?
Можно, конечно, создать временный лист, в него вставлять скопированные данные,
из временного листа скопировать в книгу-получатель, и в конце удалить этот лист.
Но получается много кода, да и примитивно. Хочется как-то красиво сделать.

Заранее огромное спасибо.
Денис.

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 Дмит



Вопросов: 11
Ответов: 160
 Web-сайт: dimit.pochta.ru
 Профиль | | #1
Добавлено: 24.03.06 08:30
Можно так:
Sub search()
Dim i As Long, rg As Range
i = Workbooks("Фонды.xls";).Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row + 1
    Worksheets("лист1";).Activate
    For Each rg In Range("b1:b200";)
        If rg = "отдел" Then 'если значение в ячейке = "отдел"
            rg.Offset(0, -1).Copy Workbooks("Фонды.xls";).Worksheets(1).Cells(i, 2)
            i = i + 1
        End If
    Next
End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам