Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/104: Рейтинг темы: голосов - 104, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
1

Скопировать строку из одного листа в другой (Excel)

18.12.2010, 21:39. Показов 21405. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не понимаю почему работат.
Visual Basic
1
2
Worksheets('Work').Range(Cells(2, 1), Cells(2, 14)).Copy
Worksheets('Work').Range(Cells(31, 1), Cells(31, 14)).PasteSpecial

Visual Basic
1
2
Worksheets('Base').Range(Cells(2, 1), Cells(2, 14)).Copy
Worksheets('Work').Range(Cells(31, 1), Cells(31, 14)).PasteSpecial
нет.
Всё прописано в work(List1).
Base(List1).- Другой лист.
Короче. Надо скопировать ряд из одного листа в другой.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2010, 21:39
Ответы с готовыми решениями:

Скопировать строку из одного листа в другой
Осуществляют поиск записей с совпадениями. Если оно есть, то строку нужно скопировать на созданный...

Скопировать определенные данные с одного листа на другой
Исходный файл:Есть некий файл с огромным количеством данных.Первый столбец данных это...

Скопировать определенные данные с одного листа на другой
Здравствуйте,давно читаю и впервые понадобилась помощь,нужно чтобы с одного листа с определенного...

Скопировать одинаковые данные с одного листа на другой
Вроде выражение правильное, но не работает. Столбы под соответствующими именами. Копировать...

20
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.12.2010, 03:06 2
Вы забыли инструкцию Select или Activate
Visual Basic
1
2
3
4
Worksheets('Base').Range(Cells(2, 1), Cells(2, 14)).Copy
Worksheets('Work').Activate ' вариант I
Worksheets('Work').Select   ' вариант II
Worksheets('Work').Range(Cells(31, 1), Cells(31, 14)).PasteSpecial
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
19.12.2010, 18:09  [ТС] 3
Activate Точно отпадает.
Прикинь! Один запрос на 500 записей.
500 раз визуально прыгнуть из одного окна в другое.
А Select не работает.
Мне надо прописать в work(list1)
А прыгать в Base(list2)
Visual Basic
1
2
3
4
5
6
Private Sub CommandButton3_Click()
Worksheets('Base').Select
Worksheets('Base').Range(Cells(2, 1), Cells(2, 14)).Copy
Worksheets('Work').Select
Worksheets('Work').Range(Cells(31, 1), Cells(31, 14)).PasteSpecial
End Sub
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.12.2010, 18:36 4
Вы спросили, почему не работает Ваш код, и я ответил, что
Paste нужно применять только в активном листе, поэтому я и предложил инструкцию Select, Activate (что в данном случае одно и тоже)
----------------------------------------
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
19.12.2010, 20:48  [ТС] 5
Неужели никак иначе.
Exel когда переносит, то всякая хрень перел глазами не маячит.
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.12.2010, 21:39 6
Можно и иначе, советую более внимательно ознакомиться с help.
Вот самый примитивный пример :
Worksheets('Work').Cells(1) = Worksheets('Base').Cells(1)
будет работать независимо от того в каком листе этой рабочей книги Вы находитесь.
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
20.12.2010, 09:55 7
Так чтобы не маячило, может надо
Application.ScreenUpdating = False
в начале поставить?
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
20.12.2010, 20:04  [ТС] 8
Да отлично я это знаю.
Мне для Range надо!!!!!
Worksheets('Work').Range(Cells(2, 1), Cells(2, 2)) = Worksheets('Base').Range(Cells(2, 1), Cells(2, 2))
Не работает!
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
21.12.2010, 05:25 9
А так?
Range(Worksheets('Work').Cells(2, 1), Worksheets('Work').Cells(2, 2)).Value = Range(Worksheets('Base').Cells(2, 1), Worksheets('Base').Cells(2, 2)).Value
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
21.12.2010, 22:56  [ТС] 10
НЕ...
я это естественно пробывал.
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
22.12.2010, 07:06 11
А вот так ...
iLists = Array('Base', 'Work')
Worksheets(iLists).FillAcrossSheets Worksheets('Base').Range('A2:B2')
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
22.12.2010, 20:06  [ТС] 12
Visual Basic
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
31
32
33
34
35
36
Private Sub cmdProv_Click()
'Dim iLists
'iLists = Array('Base', 'Work')
'Мне во что надо. В цикле!!!
'Worksheets(iLists).FillAcrossSheets Worksheets('Base').Range(Cells(i, n), Cells(i+15, n)).Value
'Не работает!
 
'Я тут прикинул. Если функцию найти не можем,то надо написать самому.
Dim iLists
iLists = Array('Base', 'Work')
'm = 'A7: IV7' Копируем всю седьмую полосу!
Call mat(0, 7, 256, 7, iLists, 'Base')
'Это конечно бред. Но он работает. Может пригодиться кому-либо.
'Можете продолжать копать дальше. Найдёте скиньте!!! Please! Хватит извращений.
End Sub
Private Sub mat(num_1 As Integer, num_2 As Long, num_3 As Integer, _
num_4 As Long, listNom, ListName As String) 'wishco@yandex.ru 14.10.2004
If num_1 > 256 Or num_3 > 256 Then MsgBox 'Out of range': Exit Sub
Dim m As String: Dim m2 As String: Dim m3 As String
Dim n_1 As Integer: Dim num0 As Integer
num0 = num_1
met:
For n_1 = 0 To 8
    If num0 > 25 Then
    num0 = num0 - 26
    Else: If n_1 <> 0 Then n_1 = n_1 - 1
    Exit For: End If
Next n_1
If n_1 <> 0 Then: m = Chr(n_1 + 64)
 If num0 <> 0 Then
 m = m & Chr(num0 + 64)
 Else: m = m & Chr(65): End If
If m2 = '' Then m2 = m: m = '': num0 = num_3: GoTo met
m3 = m2 & num_2 & ':' & m & num_4
Worksheets(listNom).FillAcrossSheets Worksheets(ListName).Range(m3)
End Sub
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
22.12.2010, 22:58 13
А вот так :
Visual Basic
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
Sub ExtremePerverts()
 
iRow = 2: iCol = 2
 
iColTemp = iNameColumn(iRow, iCol)
iDiapazon = iColTemp & iRow & ':' & iColTemp & iRow + 2
 
iLists = Array('Base', 'Work')
Worksheets(iLists).FillAcrossSheets Worksheets('Base').Range(iDiapazon)
 
End Sub
 
Function iNameColumn(iRow, iCol)
 
iAddress = Cells(iRow, iCol).Column
 
iAdr = Cells(iRow, iCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)
 
If iAddress > 26 Then
   iNameColumn = Left(iAdr, 2)
Else
   iNameColumn = Left(iAdr, 1)
End If
 
End Function
'хотя в Excel наверняка существует функция возвращающая имя столбца,
'если известен его номер (Count)
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
23.12.2010, 18:14  [ТС] 14
У тебя код побыстрее, но у меня для Rows и Cols, в функции содержатся все операторы.
Сделай также, и проставь переменные. И я возьму твой код.
Скажу заранее спасибо.

Кстати. Ссылка на адрес... это черевато крахом Exel.
У меня пару раз вылетал в исправлении кода. Давай дорабатывай.
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
24.12.2010, 01:41 15
Этот код я написал специально для Вас, и в свете вышеописанных задач он свою функцию выполняет на 100%.
P.S. Что касается моей функции, то я в ней Const не увидел.
А проблему с Office можно свести к минимуму если поставить не ставить ломаные версии.
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
24.12.2010, 11:29  [ТС] 16
У меня сверху стоит Option Explicit
и если необъявлять не все переменные, то и происходит ошибка.
А в сумме с запросом к адресу, то вылетает ошибка типа GPF.

Ну мне покрайней мере надо было
iAddress = Cells(iRow, iCol).rows

Не. Дописал бы.. Самому пригодилось бы...
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
24.12.2010, 14:01  [ТС] 17
Я тут к твоему коду присмотрелся и написал...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CommandButton2_Click()
Call iCopyRows(5, 2, 1, 14, 'Base', 'work')
'5-номер копируемого ряда из Base,2-номер вставляемого ряда в work
'1-14 Размер ряда.
End Sub
 
Sub iCopyRows(iRow, i2Row, iCol, i2Col, listCopy, ListPaste)
Dim iAdr1 As String, iAdr2 As String, iAdr3 As String, iAdr4 As String
iAdr1 = Cells(iRow, iCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)
iAdr2 = Cells(iRow, i2Col).Address(RowAbsolute:=False, ColumnAbsolute:=False)
iAdr3 = Cells(i2Row, iCol).Address(RowAbsolute:=False, ColumnAbsolute:=False)
iAdr4 = Cells(i2Row, i2Col).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Worksheets(listCopy).Range(iAdr1 & ':' & iAdr2).Copy
Worksheets(ListPaste).Range(iAdr3 & ':' & iAdr4).PasteSpecial
End Sub
0
0 / 0 / 1
Регистрация: 11.10.2010
Сообщений: 48
24.12.2010, 19:51 18
А вот так не проще ли будет ?
Visual Basic
1
2
3
4
5
Dim i As Integer
 For i = 1 To 14
  Worksheets('Work').Cells(31, i) = Worksheets('Base').Cells(2, i).Value
 Next
End Sub
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
24.12.2010, 22:08  [ТС] 19
По моему мой код побыстрее...
Как узнать что нет?
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
25.12.2010, 01:21 20
Снимаю шляпу перед Dimakart. Я этот код хотел оставить напоследок, как мега извращение. Теперь снова придётся придумывать что-то более извращённое.
Проверить быстроту работы кода, можно :
1) включив в программу таймер
2) засечь время в начале и в конце работы программы, а разница между ними собственно говоря и есть время работы программы.
P.S. Но вариант с таймером проще.
0
25.12.2010, 01:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2010, 01:21
Помогаю со студенческими работами здесь

Как скопировать данные из одного листа Excel на другой в Java?
Как скопировать данные из одного листа Excel на другой в Java?

Как скопировать значения столбца из одного листа в другой?
Здравствуйте! Написал код, который копирует значения столбца &quot;Центр питания&quot; листа &quot;Каскад&quot; на...

Как скопировать данные с одного листа и вставить в другой
Необходимо средствами VBA Excel скопировать данные ФИО(записано в одной ячейке), нужно скопировать...

Скопировать данные с одного листа на другой с сохранением всего форматирования
Всем привет. Есть 2 файла: общий и свод. В файле общий есть следующие листы: макросы, общий1,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru