Замена диапазонов местами (для ПРОФИ)

Программирование на Visual Basic for Applications
GUR
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 10.11.2005 (Чт) 14:39

Замена диапазонов местами (для ПРОФИ)

Сообщение GUR » 14.11.2005 (Пн) 12:28

Знатоки, подскажите пожалуйста, можно ли написать такой макрос, который бы менял местами два любых выделенных диапазона в Excel (т.е. выделяю, скажем, F8:F11 и J2:J5, затем запускаю макрос и значения, форматы, примечания и т.д. в этих диапазонах меняются местами.) ??? Подскажите как это написать. Заранее благодарен.

Железяка
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 06.12.2005 (Вт) 10:40

Сообщение Железяка » 06.12.2005 (Вт) 10:47

Здравствуйте GUR. У меня точно такая же задача - необходимо поменять 2 выделенных диапазона местами. По видимому мы решаем одно и то же. Я ее еще не решил и не решал :), но я предполагаю что надо сделать отдельную форму с двумя RefEdit'ами и туда вводить начальный и конечный диапазоны. А потом по нажатию кнопки обычным циклом пройтись по этим диапазонам и поменять каждую ячейку местами.
Если Вы уже решили эту задачу, то не могли бы показать решение? ;) Заранее спасибо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.12.2005 (Вт) 11:01

Копай в сторону Areas, в несвязанных диапазонах их будет больше одного.
Lasciate ogni speranza, voi ch'entrate.

Железяка
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 06.12.2005 (Вт) 10:40

Сообщение Железяка » 06.12.2005 (Вт) 12:00

Предварительное решение задачи
На форме располагаем два RefEdita'а и кнопку. Обработчик кнопки:

Код: Выделить всё
Private Sub CommandButton1_Click()
    Set RangeA = Range(RefEdit1.Text)
    Set RangeB = Range(RefEdit2.Text)
   
    RangeC = RangeA.Formula
    RangeA.Formula = RangeB.Formula
    RangeB.Formula = RangeC
End Sub


Однако ЕНта штуковина работает только с цельными областями одинакового размера :(
Копирование стилей оформления ячеек я так подозреваю можно сделать таким же способом.

2 alibek Спасибо именно начав копать в Areas я, как ни странно, нашел такое решение.

Попробую сдать в таком виде, авось пройдет ;)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.12.2005 (Вт) 17:00

Код: Выделить всё
dim d as boolean, r1 as range, r2 as range

d=application.displayalerts
application.displayalerts=false

set r1=selection.areas(1)
set r2=selection.areas(2)

with thisworkbook.worksheets.add
  r1.copy .cells(r1.cells(1).row, r1.cells(1).column)
  r2.copy r1
  .cells(r1.cells(1).row, r1.cells(1).column).copy r2 
  .delete
end with

application.displayalerts=d
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Железяка
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 06.12.2005 (Вт) 10:40

Сообщение Железяка » 06.12.2005 (Вт) 21:20

Ого! Ни шиша не понял =), но все-равно спасибо. Буду разбираться.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 94

    TopList