Страница: 1 |
|
Вопрос: InputBox, выделить диапазон
|
Добавлено: 31.07.07 18:31
|
|
Автор вопроса: VBACool
|
Здравствуйте.
Есть простая задача.
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
Спасибо.
Ответить
|
Номер ответа: 1 Автор ответа: Pavel
Вопросов: 0 Ответов: 82
|
Профиль | | #1
|
Добавлено: 31.07.07 18:50
|
Чтобы выделить надо просто Select, а не Selected
Попробуйте что-нибудь такое
Sub Macro1()
Dim S1&, S2&, iCol&
S1 = InputBox("Номер первой строки диапазона:"
S2 = InputBox("Номер второй строки диапазона:"
iCol = 1
Sheets("Лист2" .Cells(2, iCol + 1).Value = Application.Sum(Sheets("Лист1" .Range(Cells(S1, iCol), Cells(S2, iCol)))
iCol = iCol + 3
Sheets("Лист2" .Cells(2, iCol + 1).Value = Application.Sum(Sheets("Лист1" .Range(Cells(S1, iCol), Cells(S2, iCol)))
iCol = iCol + 2
Sheets("Лист2" .Cells(2, iCol + 1).Value = Application.Sum(Sheets("Лист1" .Range(Cells(S1, iCol), Cells(S2, iCol)))
End Sub
Ответить
|
Номер ответа: 2 Автор ответа: VBACool
Вопросов: 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".Select
Range("B2" = A1
Range("C2" = A2
Range("2" = A3
End Sub
Спасибо за помощь.
А вот еще вопрос:
Узнали имя текущего листа и присвоили значение переменной N.
N = ActiveSheet.Name
А теперь, если N равно Иванов, то выводим A1, A2, A3 сюда:
Range("B2" = A1
Range("C2" = A2
Range("2" = A3
А если N равно Петров, то сюда:
Range("B3" = A1
Range("C3" = A2
Range("3" = A3
Как такое сделать? Подскажите пожалуйста.
Ответить
|
Номер ответа: 3 Автор ответа: VBACool
Вопросов: 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".Select
Range("A2" = N
Range("B2" = A1
Range("C2" = A2
Range("2" = A3
Else
If N = "Петров" Then
Sheets("Лист2".Select
Range("A3" = N
Range("B3" = A1
Range("C3" = A2
Range("3" = A3
Else
If N = "Сидоров" Then
Sheets("Лист2".Select
Range("A4" = N
Range("B4" = A1
Range("C4" = A2
Range("4" = A3
End If
End If
End If
End Sub
А как сделать так, чтобы не появлялось окно об ошибке (Run-Time Error '13': Type mismatch), когда жмешь Cancel или закрываешь форму InputBox?
А то пользователь нажмет Debug, вызовет редактор VBA и испугается
Ответить
|
Номер ответа: 7 Автор ответа: bi-lya
Вопросов: 1 Ответов: 125
|
Профиль | | #7
|
Добавлено: 01.08.07 01:00
|
Универсально_не_особо_здоровый_обход_ошибок:
On Error Resume Next
Ответить
|
Номер ответа: 9 Автор ответа: bi-lya
Вопросов: 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" = "" Then
MsgBox " Nothing"
Else
MsgBox "OK"
End If
Ответить
|
Номер ответа: 10 Автор ответа: shuffle
Администратор
ICQ: 201502381
Вопросов: 15 Ответов: 737
|
Профиль | | #10
|
Добавлено: 01.08.07 17:32
|
If InputBox("lkhjl" = "" Then
MsgBox " Nothing"
Else
MsgBox "OK"
End If Это неправильный код, ибо InputBox при нажатии Cancel вернет не "", а vbNullString — это разные вещи. Правильнее будет так:
If strptr(InputBox("lkhjl" ) = 0 Then
MsgBox " Nothing"
Else
MsgBox "OK"
End If
Ответить
|
Страница: 1 |
Поиск по форуму