Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / скопировать значение в первую пустую строку / 7 сообщений из 7, страница 1 из 1
13.04.2010, 18:21
    #36577178
ffflake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать значение в первую пустую строку
Помогите пожалуйста, скопировать выбранные строки одной книги в другую

Есть следующий макрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
For i =  1  To  20 
     If Cells(i,  24 ).Text =  1  Then
     Rows(i).Select
    Selection.Copy
    Windows("обработка макросом.xlsx").Activate
    Range("A1").Select
    ActiveSheet.Paste
    Windows("Аладдин.xls").Activate
     End If
    Next i
как в макросе написать, чтобы найденную строку по условию, вставлял в другую книгу первую пустую строку
...
Рейтинг: 0 / 0
13.04.2010, 20:13
    #36577388
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать значение в первую пустую строку
как-то так. по крайней мере, смысл должен быть ясен.. должно работать, поменяйте названия книг и листов.
Код: plaintext
1.
2.
3.
4.
For i =  1  To  20 
If thisworkbook.worksheets("Лист1").Cells(i,  24 ).value =  1  Then
workbook("обработка макросом.xlsx").worksheets("Лист1").Cells(i,  24 ).value = workbook("Аладдин.xls").worksheets("Лист1").Cells(i,  24 ).value
End If
Next i
...
Рейтинг: 0 / 0
13.04.2010, 20:23
    #36577399
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать значение в первую пустую строку
тут много и более действенных примеров на форуме, поищите.
в данном обе книги должны быть открыты. и это самый "тупой" перенос циклом...

если имеете дело с большими объемами данных (от 20 тысяч + частые запуски), логичнее пользоваться MS Query
...
Рейтинг: 0 / 0
13.04.2010, 21:23
    #36577469
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать значение в первую пустую строку
Вообще-то эти строки с введением последней заполненной (вернее первой пустой ячейки в первом столбце) можно заменить на
Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  1  To  20 
If Cells(i,  24 ).Text =  1  Then
Rows(i).Copy Target_.Cells(iLastRow,  1 )
iLastRow = Cells(Target_.Rows.Count,  1 ).End(xlUp).Row +  1 
End If
Next i

Ну а целиком весь код будет таким:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Option Explicit

Sub CopyData()
Dim wb As Workbook
Dim obr As Boolean ' is open "обработка макросом.xlsx"
Dim ObrMa As Workbook ' будет обработка макросом.xlsx Workbook
Dim iLastRow As Long
Dim Target_ As Worksheet, sh As Worksheet
Dim i As Integer

Set sh = ActiveSheet

For Each wb In Workbooks
If wb.Name = "обработка макросом.xlsx" Then obr = True: Set ObrMa = wb: Exit For
Next

If obr = False Then Set ObrMa = Workbooks.Open(ThisWorkbook.Path & "\" & "обработка макросом.xlsx", ReadOnly:=False)

Set Target_ = ObrMa.Sheets( 1 )
iLastRow = Target_.Cells(Target_.Rows.Count,  1 ).End(xlUp).Row +  1 

For i =  1  To  20 
If sh.Cells(i,  24 ).Text =  1  Then
sh.Rows(i).Copy Target_.Cells(iLastRow,  1 )
iLastRow = Target_.Cells(Target_.Rows.Count,  1 ).End(xlUp).Row +  1 
End If
Next i

End Sub


Рассчитано, что обработка макросом.xlsx уже открыт, а если неоткрыт, он откроется, если лежит рядом с файлом с этим кодом. Правда, если там такого файла нет, то будет ошибка.
Код запускать при активном листе, откуда надо копировать.
Код в работе проверил на xls в 2000. Единственное - чистый лист заполняет со 2-ой ячейки. Если надо непременно с 1-ой, тогда до цикла задать iLastRow = 1. Но тогда всегда первую строку всегда будет копировать в первую строку, а остальные в первую пустую.
Можно вот это
Код: plaintext
1.
iLastRow = Target_.Cells(Target_.Rows.Count,  1 ).End(xlUp).Row +  1 
определять непосредственно перед копированием, но тогда скопировать в первую строку листа уже никак не получится.
...
Рейтинг: 0 / 0
14.04.2010, 09:45
    #36577860
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать значение в первую пустую строку
ffflake,

Модератор: для форматирования кода используйте тег SRC.
...
Рейтинг: 0 / 0
14.04.2010, 17:15
    #36579080
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать значение в первую пустую строку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
For i =  1  To  20 
     If Cells(i,  24 ).Text =  1  Then
        Select case (u is nothing)
               Case false
                  set u=Application.Union(u,Rows(i)
               Case else
                  set u=Rows(i) 
        End select
    End if
Next i
set wb=Workbooks.Open <FileName>
set r=wb.Worksheets(<index>).Range("A1")
u.copy r
wb.Close SaveChanges:=True
...
Рейтинг: 0 / 0
14.04.2010, 17:18
    #36579089
zchvv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скопировать значение в первую пустую строку
Эх...! Скобочку пропустил!:(
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / скопировать значение в первую пустую строку / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]