Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2013, 00:52   #1
Арианна
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 25
По умолчанию Ошибка в макросе

Здравствуйте. Я впервые работаю с VBA и довольно плохо в нем разбираюсь. У меня вот такое задание:
Написать макрос, вычисляющий значение функции ЗаработнаяПлата(Оклад, Стаж):

Cтаж Доплата
менее 5 лет 5%
5 лет 6%
6 лет 7%
от 7 до 10 лет 10%
от 10 до 25 лет 20%
более 25 лет 30%
Результат вывести на рабочем листе.

Я написала код:
Sub plata()
Function ЗаработнаяПлата(Оклад, Стаж)
Select Case Стаж
Case Is < 5
ЗаработнаяПлата = Оклад * 0.05 + Оклад
Case 5
ЗаработнаяПлата = Оклад * 0.06 + Оклад
Case 6
ЗаработнаяПлата = Оклад * 0.07 + Оклад
Case 7 To 10
ЗаработнаяПлата = Оклад * 0.1 + Оклад
Case 10 To 25
ЗаработнаяПлата = Оклад * 0.2 + Оклад
Case Is > 25
ЗаработнаяПлата = Оклад * 0.3 + Оклад
End Select
End Function
End Sub

В чем моя ошибка?
Арианна вне форума Ответить с цитированием
Старый 14.10.2013, 01:18   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Что ж Вы все в кучу свалили? Попробуйте так:
Код:
Sub plata()
msgbox ЗаработнаяПлата(300, 8)
End Sub

Function ЗаработнаяПлата(Оклад, Стаж)
Select Case Стаж
Case Is < 5
ЗаработнаяПлата = Оклад * 0.05 + Оклад
Case 5
ЗаработнаяПлата = Оклад * 0.06 + Оклад
Case 6
ЗаработнаяПлата = Оклад * 0.07 + Оклад
Case 7 To 10
ЗаработнаяПлата = Оклад * 0.1 + Оклад
Case 10 To 25
ЗаработнаяПлата = Оклад * 0.2 + Оклад
Case Is > 25
ЗаработнаяПлата = Оклад * 0.3 + Оклад
End Select
End Function
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 14.10.2013, 09:16   #3
Арианна
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 25
По умолчанию

Хороший вариант, но мне нужно, чтобы считалось от таблицы. Может нужно в самом макросе указать границы таблицы? Я правда не знаю
Арианна вне форума Ответить с цитированием
Старый 14.10.2013, 09:23   #4
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

ну так давайте в точку вызова
msgbox ЗаработнаяПлата(300, 8)
в цикле или как там у вас (не видя файла сказать сложно) данные из таблицы
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 14.10.2013, 09:24   #5
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

А я и подавно не знаю. Покажите таблицу, покажите желаемый результат.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 14.10.2013, 09:26   #6
Арианна
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 25
По умолчанию

Ну, таблица предполагается большая...
Арианна вне форума Ответить с цитированием
Старый 14.10.2013, 09:27   #7
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Хороший вариант
Вариант не хороший, а ПРАВИЛЬНЫЙ, согласно Вашего задания
Цитата:
Написать макрос, вычисляющий значение функции ЗаработнаяПлата(Оклад, Стаж)
А все что у Вас дальше
Цитата:
мне нужно, чтобы считалось от таблицы
так об этом у Вас ни слова
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 14.10.2013, 09:28   #8
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Да не надо нам большую. Пример, строк на 15-20.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 14.10.2013, 09:32   #9
Арианна
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 25
По умолчанию

Имя Оклад Стаж ЗаработнаяПлата
Петренко 2000 4
Макаров 2000 5
Сучкин 2000 6
Ведковский 2000 10
Камилин 2000 30

Пока примерно такая таблица. А результат должен быть на рабочем листе
Арианна вне форума Ответить с цитированием
Старый 14.10.2013, 09:36   #10
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Ну вот зачем! Что теперь мне с экрана на лист заносить? Нельзя было в файле пример выложить? Пишите в D2:
=ЗаработнаяПлата(B2, C2)
и протягивайте вниз.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в макросе сравнения таблиц ZorDMV Microsoft Office Excel 8 01.05.2013 11:41
Ошибка в макросе runik Microsoft Office Excel 5 19.11.2012 17:28
ВПР в макросе (где-то ошибка) Флина Microsoft Office Excel 3 26.01.2011 04:55
Ошибка в макросе по переносу данных Richard123 Microsoft Office Excel 2 19.01.2011 09:16
Почему, ошибка в макросе valerij Microsoft Office Excel 8 27.02.2010 01:48