Страница: 1 |
Вопрос: InputBox, выделить диапазон | Добавлено: 31.07.07 18:31 |
Автор вопроса: ![]() |
Здравствуйте.
Есть простая задача. 1. Посредством InputBox пользователь вводит номер первой и последней строки нужного диапазона. 2. Далее надо выделить ячейки первого столбца между введенными строками и посчитать сумму. 3. Затем сдвинуть диапазон на 3 столбца вправо и опять посчитать сумму в этом диапазоне. 4. Повторить 3 действие еще 2 раза, сдвиную диапазон вправо на 2 и 3 столбца. 5. Записать полученные суммы в соответствующие ячейки на другом листе. Лист1 То есть пользователь ввел номер первой строки (5) и второй (9). Выделился диапазон A5:A9. Суммировать диапазон. Сдвинуть на D5:D9. Суммировать. Сдвинуть на F5:F9. Суммировать. И т.д. сколько нужно раз. Запомнить суммы (просто присвоить их переменным?). На листе Лист2 вставить сумму диапазона A5:A9 в ячейку B2, D5:D9 в E2 и т.д. Все. Помогите, плиз такое реализовать. Пробовал так: Sub Macro1() S1 = InputBox("Номер первой строки диапазона:") S2 = InputBox("Номер второй строки диапазона:") Range(Cells(S1, 1), Cells(S2, 1)).Selected End Sub Пишет: Object doesn't support this property or method. И еще вопрос, как сделать такое: Sub Macro1() Col1 = InputBox("Номер столбца диапазона:") Srt1 = InputBox("Номер строки диапазона:") Range(Col1, Srt1).Activate End Sub Если так - пишет: Methon 'Range' of object '_Global' failed Спасибо. |
Ответы | Всего ответов: 10 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 82 |
Профиль | Цитата | #1 | Добавлено: 31.07.07 18:50 |
Чтобы выделить надо просто Select, а не Selected
Попробуйте что-нибудь такое Sub Macro1()
Dim S1&, S2&, iCol& S1 = InputBox("Номер первой строки диапазона:" ![]() S2 = InputBox("Номер второй строки диапазона:" ![]() iCol = 1 Sheets("Лист2" ![]() ![]() iCol = iCol + 3 Sheets("Лист2" ![]() ![]() iCol = iCol + 2 Sheets("Лист2" ![]() ![]() End Sub |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #2 | Добавлено: 31.07.07 21:38 |
Вот, что было нужно:
Sub WorkMacro1() S1 = CInt(InputBox("Первая строка диапазона:" ![]() S2 = CInt(InputBox("Последняя строка диапазона:" ![]() Range(Cells(S1, 1), Cells(S2, 1)).Select A1 = Application.Sum(Range(Cells(S1, 1), Cells(S2, 1))) A2 = Application.Sum(Range(Cells(S1, 1), Cells(S2, 1)).Offset(0, 1)) A3 = Application.Sum(Range(Cells(S1, 1), Cells(S2, 1)).Offset(0, 2)) Sheets("Лист2" ![]() Range("B2" ![]() Range("C2" ![]() Range(" ![]() ![]() End Sub Спасибо за помощь. А вот еще вопрос: Узнали имя текущего листа и присвоили значение переменной N. N = ActiveSheet.Name А теперь, если N равно Иванов, то выводим A1, A2, A3 сюда: Range("B2" ![]() Range("C2" ![]() Range(" ![]() ![]() А если N равно Петров, то сюда: Range("B3" ![]() Range("C3" ![]() Range(" ![]() ![]() Как такое сделать? Подскажите пожалуйста. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #3 | Добавлено: 31.07.07 22:20 |
Вопрос снимается - разобрался. Вот полный модуль.
Sub WorkMacro1() N = ActiveSheet.Name S1 = CInt(InputBox("Первая строка диапазона:" ![]() S2 = CInt(InputBox("Последняя строка диапазона:" ![]() Range(Cells(S1, 1), Cells(S2, 1)).Select 'Range(Cells(S1, 1), Cells(S2, 1)).Activate A1 = Application.Sum(Range(Cells(S1, 1), Cells(S2, 1))) 'Range(Cells(S1, 1), Cells(S2, 1)).Offset(0, 4).Select A2 = Application.Sum(Range(Cells(S1, 1), Cells(S2, 1)).Offset(0, 1)) 'Range(Cells(S1, 1), Cells(S2, 1)).Offset(0, 6).Select A3 = Application.Sum(Range(Cells(S1, 1), Cells(S2, 1)).Offset(0, 2)) If N = "Иванов" Then Sheets("Лист2" ![]() Range("A2" ![]() Range("B2" ![]() Range("C2" ![]() Range(" ![]() ![]() Else If N = "Петров" Then Sheets("Лист2" ![]() Range("A3" ![]() Range("B3" ![]() Range("C3" ![]() Range(" ![]() ![]() Else If N = "Сидоров" Then Sheets("Лист2" ![]() Range("A4" ![]() Range("B4" ![]() Range("C4" ![]() Range(" ![]() ![]() End If End If End If End Sub А как сделать так, чтобы не появлялось окно об ошибке (Run-Time Error '13': Type mismatch), когда жмешь Cancel или закрываешь форму InputBox? А то пользователь нажмет Debug, вызовет редактор VBA и испугается ![]() |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 82 |
Профиль | Цитата | #4 | Добавлено: 31.07.07 22:50 |
http://www.vbnet.ru/forum/show.aspx?id=145359 |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 82 |
Профиль | Цитата | #5 | Добавлено: 31.07.07 22:54 |
Зачем вы применяете метод Select в своём макросе?
Range(Cells(S1, 1), Cells(S2, 1)).Select Sheets("Лист2" ![]() ??????? Это замедляет работу вашего макроса и является плохим тоном в программировании под Excel выделять объекты там, где можно обойтись без этого. Попробуйте переписать ваш код без использования метода Select. Если не получится, мы вам поможем. Жду ваших сообщений. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #6 | Добавлено: 01.08.07 00:17 |
Range.Select для того, чтобы человек видел, какой он именно диапазон выделил (для контроля так сказать). А Sheet.Select чтобы человек попадал сразу после отработки макроса на лист с результатами.
А вот с окном ошибки не разобрался ![]() Нет какой-нибудь простого оператора, чтобы при появлении этого окна - нажал ESC и оно пропало. Было бы хорошо ![]() Спасибо. |
Номер ответа: 7 Автор ответа: ![]() ![]() Вопросов: 1 Ответов: 125 |
Профиль | Цитата | #7 | Добавлено: 01.08.07 01:00 |
Универсально_не_особо_здоровый_обход_ошибок:
On Error Resume Next
|
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #8 | Добавлено: 01.08.07 01:09 |
On Error Resume Next
Спасибо, пойдет ![]() Я думал, что данная строчка - часть цикла и отдельно ее пользовать не получится. А надо было просто попробовать ![]() |
Номер ответа: 9 Автор ответа: ![]() ![]() Вопросов: 1 Ответов: 125 |
Профиль | Цитата | #9 | Добавлено: 01.08.07 03:38 |
А почему вы не обрабатываете кнопку Cancel? Справка VBA: "...If the user clicks Cancel, the function returns a zero-length string (""![]() If InputBox("lkhjl"
![]() MsgBox "Nothing" Else MsgBox "OK" End If |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 201502381 Вопросов: 15 Ответов: 737 |
Профиль | Цитата | #10 | Добавлено: 01.08.07 17:32 |
If InputBox("lkhjl" Это неправильный код, ибо InputBox при нажатии Cancel вернет не "", а vbNullString — это разные вещи. Правильнее будет так:
![]() MsgBox "Nothing" Else MsgBox "OK" End If If strptr(InputBox("lkhjl"
![]() MsgBox "Nothing" Else MsgBox "OK" End If |
Страница: 1 |
|