помогите разобраться

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
AcademiC
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 11.10.2007 (Чт) 15:54

помогите разобраться

Сообщение AcademiC » 11.10.2007 (Чт) 16:11

Сразу скажу что в программировании чайник.

Делаем в Excel сложные вычисления со множеством данных, до этого момента вполне справлялись штатными средствами: прописывали все вычисления через "функции".

Однако встала более сложная задача, не знаю как правильно описать - создать некую автоматизацию процесса.

Суть:
1. Есть книга со множеством вкладок, в данном случае интересуют лишь две: "Расчет" и "Выгодность".
2. На вкладке "Расчет" есть ряд формул которые выводят набор данных, в частности числовые данные в ячейки с А9 по AX9 (всего 50 ячеек).
3. На вкладке "Выгодность" также существует область, которая участвует в формуле вычисления, а именно: H587 по BE587 (также 50 ячеек).
4. На вкладке "Расчет" я создал кнопку (в Excel называется элемент управления формы) по нажатии на который запускается макрос, который и переносит все данные из одной вкладки в другую, НО!

Проблема:
Все бы хорошо - макрос выполняет свою функцию, но с одной оговоркой - он вставляет данные начиная с той ячейки (на вкладке "Выгодность") в который перед нажатием кнопки оставался курсор. А это меня категорически не устраивает - если не проследить или забыть - АБСОЛЮТНО ВСЕ расчеты во всей таблице летят в "тар-тарары".

Собственно вопрос: как можно сделать так, чтобы макрос вставлял данные НАЧИНАЯ с ячейки I587 (на вкладке "Вычмсления"), а не с какой-то другой, неважно где стоял курсор до нажатия на кнопку?

Ниже привожу сам макрос:

Код: Выделить всё
Sub peredacha_margi()
'
' peredacha_margi Макрос
'

'
    Range("A9:AX9").Select
    Selection.Copy
    Sheets("Выгодность").Select
    ActiveWindow.SmallScroll Down:=21
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=9
End Sub[code][/code][code][/code]

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 11.10.2007 (Чт) 23:57

Код: Выделить всё
Sub peredacha_margi()
  Sheets("Расчет").Select
    Range("A9:AX9").Select
    Selection.Copy
    Sheets("Выгодность").Select
    Range("I587").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End Sub


Вроде так .... пробуйте, во всяком случае ...
Сначала м выделяем вкладку Расчет, указываем, ячейки, копируем, затем выделяем вкладку "выгодность", указываем на ней ячейку ... и снова вставляем.

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

AcademiC
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 11.10.2007 (Чт) 15:54

Сообщение AcademiC » 12.10.2007 (Пт) 8:29

Сергей, спасибо большое, все стало так, как и должно быть.

...правда теперь иногда при открытии Excel зависает наглухо и приходится восстанавливать файл и уже потом открывать, но это уже наверняка не к вам.

Еще раз большое спасибо за помощь, теперь при необходимости смогу сам создавать однотипные объекты.

P.S. Еще если не затруднит - вопрос в догонку:
после выполнения макроса при переходе на вкладку "Расчет" ячейки которые были экспортированы остаются выделенными (т.е. горят пунктиром), и если случайно нажать любую клавишу - то все данные в них будут либо заменены на нажатую случайно букву/цифру... приходится вручную мышкой выбирать любую пустую ячейку и нажимать Delete (все эти операции выполняются по незнанию и чтобы убрать выделение этих ячеек). Можно ли каким-то образом дописать макрос, чтобы после его выполнения на вкладке "Расчеты" никакие ячейки выделены не были?

...как вариант можно наверное написать "перйти на вкладку "Расчеты" и нажать "Escape""... только я к сожалению не знаю синтаксиса Visual Basic, поэтому если не сложно - прошу помочь вас.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 12.10.2007 (Пт) 11:03

Код: Выделить всё
  Range("A1").Select
  Selection.Delete


этот код перейдет на ячейку A1 и удалит ... т.е. ваши действия повторит ..... его можно дописать в конец предыдущего макроса
а по поводу тормозов .... попробуейте так:




Код: Выделить всё
Sub peredacha_margi()
  On Error Resume Next
  With Sheets("Расчет")
    .Activate
    .Range("A9:AX9").Copy
  End With
  With Sheets("Выгодность")
    .Activate
    .Range("I587").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    '!!! выделяем A1 и нажимаем DEL
    DelRangeAdr = "A1"
    .Range(DelRangeAdr).Select
    .Range(DelRangeAdr).Delete
  End With
End Sub


этот код должен быстрее работать и без подвисаний ....кроме того потом он перемещает выделение на ячейку A1 и удалет из неё все. Если A1 не пустая ... замените "A1" в строке
DelRangeAdr = "A1" на какую-нить иную ячейку.

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

AcademiC
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 11.10.2007 (Чт) 15:54

Сообщение AcademiC » 12.10.2007 (Пт) 11:11

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

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 12.10.2007 (Пт) 11:23

Пожалуйста!
Если что обращайтесь.

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 100

    TopList