Страницы: 1
RSS
Как заставить Exel считать ячейки
 
Всем доброго времени суток! Подскажите пожалуйста вот по какому вопросу: Есть макрос:

Копирует выделенное на другой лист. Как дописать макрос так, чтобы Exel понимал, сколько ячеек выделено (3 или 10 например) и в строке "Range("A1:B1";)." писал соответствующий диапазон длинной в 3 - "Range("A1:С1";)." или 10"Range("A1:J1";)." ячеек?
Все ячейки находятся в одной строке.

Код
Sub
    Selection.Copy
    Sheets("Лист3".Select
    Range("A1:B1".Select
    ActiveSheet.Paste
End Sub
 
А Excel это додумывает за вас. Достаточно указать левую верхнюю ячейку, куда будут вставляться данные. По коду есть замечания:
1. Старайтесь обходить стороной Activecell, Activesheet  и прочие активные объекты.
2. Даже не думайте использовать метод Select в подобных этой ситуациях
3. Скопировать можно все в одну строку, главное чтобы Selection был правильный (чтобы это был объект Range, и чтобы у этого объекта была только одна область (свойство areas объекта Range)).
Я написал проверку на случай если активное выделение не является областью на листе (например, может быть выделен график или какая-то другая фигура).
Код
Sub someRandomRoutine()

   If TypeName(Selection) <> "Range" Then Exit Sub
   Selection.copy Worksheets("Лист3").Range("A1")

End sub
Изменено: Все_просто - 26.05.2015 23:36:01
С уважением,
Федор/Все_просто
 
Цитата
Все_просто написал: Достаточно указать левую верхнюю ячейку, куда будут вставляться данные.
не всегда
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Спасибо большое за пояснение. Все работает! Можно еще дополнить макрос пожалуйста?
Код
Sub Макрос3()
'
    Selection.Copy
    Sheets("Лист1").Select
    Range("A3").Select
    ActiveSheet.Paste
End Sub


Помогите пожалуйста новичку.
Надо чтобы при выполнении макроса данные каждый раз копировались  в первую пустую ячейку третьей строки.
Вот мой пример.  
Изменено: AlehinAlSerg - 28.05.2015 21:14:43
 
Что собираетесь копировать?
 
Номер колонки, где в 3-й строке будет пустая ячейка вот такой:
Код
L = Cells(3, Columns.Count).End(xlToLeft).Column + 1

 
Юрий М,  ячейки будут содержать текст.

Грубо говоря - выделяем ячейку 1 и 3 на втором листе, жмем кнопку, содержимое копируется в третью строку первого листа в первую пустую ячейку этой самой строки.
Простите за сумбур.  
 
Цитата
МВТ написал:
1L = Cells(3, Columns.Count).End(xlToLeft).Column + 1
А куда вставить эту строку? Можно целиком макрос увидеть?  
 
МВТ, можете готовый вариант макроса написать? пожалуйста!  
 
AlehinAlSerg, если я правило понял Вашу задачу, то примерно так
Код
Sub Копирование()
Dim L As Long
With Sheets("Лист1")
    L = .Cells(3, Columns.Count).End(xlToLeft).Column
    If Not (L = 1 And IsEmpty(.Cells(3, L))) Then L = L + 1
    Selection.Copy Destination:=.Cells(3, L)
End With
End Sub

UPD
Если надо ставить границы на скопированный фрагмент, то вот так
Код
Sub Копирование()
Dim L As Long, Rng As Range
Set Rng = Selection
With Sheets("Лист1")
    L = .Cells(3, Columns.Count).End(xlToLeft).Column
    If Not (L = 1 And IsEmpty(.Cells(3, L))) Then L = L + 1
    Selection.Copy Destination:=.Cells(3, L)
    .Cells(3, L).Resize(Rng.Rows.Count, Rng.Columns.Count).Borders.LineStyle = 1
End With
End Sub


Изменено: МВТ - 28.05.2015 22:15:54
 
Да! Оно! Огромное спасибо, МВТ, !!)))))))
Страницы: 1
Наверх