Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Добавление врачей - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Добавление врачей (Word)
Добавление врачей
IIOB Дата: Вторник, 01.09.2015, 11:32 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Добрый день! Есть мед клиника, штат врачей (часто изменяется). Написал макрос считающий зарплату врачей и формирующий отчет. Но ввиду постоянно изменяющегося штата врачей постоянно приходится допиливать макрос. Хотел бы услышать Ваши предложения, как этого можно избежать. Файл с макросом более 5 мб, прикрепить не могу. Вот сам макрос
[vba]
Код
Private Sub CommandButton1_Click()
Dim sdate As String
Dim dodate As String
Dim s As Single
Dim d As Single
Dim sym As Single
Dim ms As String
Dim d1 As String
Dim d2 As String
Dim d3 As String
Dim d4 As String
Dim d5 As String
Dim d6 As String
Dim sym2 As Single
Dim sym3 As Single
Dim sym4 As Single
Dim minus As Single
d1 = CStr(TextBox1.Text)
d2 = CStr(TextBox2.Text)
d3 = CStr(TextBox3.Text)
sdate = d1 & "." & d2 & "." & d3
dodate = CStr(TextBox4.Text) & "." & CStr(TextBox5.Text) & "." & CStr(TextBox6.Text)
For i = 4 To 65536
If CStr(Cells(i, 1)) = sdate Then s = i
If CStr(Cells(i, 1)) = dodate Then d = i
If s <> 0 And d <> 0 Then GoTo 10
Next
10
sym = 0
ms = ""
For i = 2 To 32
For j = s To d
sym = sym + CSng(Cells(j, i))
Next
If Cells(3, i) = 1 Then minus = CSng(InputBox("Введите минуc по " & Cells(1, i)))
sym2 = sym - minus
minus = 0
sym2 = sym2 * CSng(Cells(2, i)) / 100
sym3 = sym3 + sym2
ms = ms & CStr(Cells(1, i)) & Space(15 - Len(Cells(1, i))) & vbTab & CStr(sym) & Space(8 - Len(CStr(sym))) & vbTab & CStr(sym2) & vbCrLf
Cells(i - 1, 36) = Cells(1, i)
Cells(i - 1, 37) = CSng(sym)
Cells(i - 1, 38) = CSng(sym2)
sym = 0
Next
MsgBox (ms)
Range(Cells(1, 34), Cells(32, 36)).Select
Cells(31, 34) = "Зарплата всего"
Cells(31, 36) = CSng(sym3)
Cells(32, 34) = "Зарплата стоматологи"
Cells(32, 36) = CSng(Cells(1, 36)) + CSng(Cells(2, 36)) + CSng(Cells(3, 36)) + CSng(Cells(4, 36)) + CSng(Cells(5, 36))
Selection.PrintOut Copies:=1, Collate:=True
Selection.Clear
UserForm1.Hide
End Sub
[/vba]
[moder]Код нужно оформлять тегами (кнопка #)!
Поправила.[/moder]


Сообщение отредактировал Manyasha - Вторник, 01.09.2015, 11:36
 
Ответить
СообщениеДобрый день! Есть мед клиника, штат врачей (часто изменяется). Написал макрос считающий зарплату врачей и формирующий отчет. Но ввиду постоянно изменяющегося штата врачей постоянно приходится допиливать макрос. Хотел бы услышать Ваши предложения, как этого можно избежать. Файл с макросом более 5 мб, прикрепить не могу. Вот сам макрос
[vba]
Код
Private Sub CommandButton1_Click()
Dim sdate As String
Dim dodate As String
Dim s As Single
Dim d As Single
Dim sym As Single
Dim ms As String
Dim d1 As String
Dim d2 As String
Dim d3 As String
Dim d4 As String
Dim d5 As String
Dim d6 As String
Dim sym2 As Single
Dim sym3 As Single
Dim sym4 As Single
Dim minus As Single
d1 = CStr(TextBox1.Text)
d2 = CStr(TextBox2.Text)
d3 = CStr(TextBox3.Text)
sdate = d1 & "." & d2 & "." & d3
dodate = CStr(TextBox4.Text) & "." & CStr(TextBox5.Text) & "." & CStr(TextBox6.Text)
For i = 4 To 65536
If CStr(Cells(i, 1)) = sdate Then s = i
If CStr(Cells(i, 1)) = dodate Then d = i
If s <> 0 And d <> 0 Then GoTo 10
Next
10
sym = 0
ms = ""
For i = 2 To 32
For j = s To d
sym = sym + CSng(Cells(j, i))
Next
If Cells(3, i) = 1 Then minus = CSng(InputBox("Введите минуc по " & Cells(1, i)))
sym2 = sym - minus
minus = 0
sym2 = sym2 * CSng(Cells(2, i)) / 100
sym3 = sym3 + sym2
ms = ms & CStr(Cells(1, i)) & Space(15 - Len(Cells(1, i))) & vbTab & CStr(sym) & Space(8 - Len(CStr(sym))) & vbTab & CStr(sym2) & vbCrLf
Cells(i - 1, 36) = Cells(1, i)
Cells(i - 1, 37) = CSng(sym)
Cells(i - 1, 38) = CSng(sym2)
sym = 0
Next
MsgBox (ms)
Range(Cells(1, 34), Cells(32, 36)).Select
Cells(31, 34) = "Зарплата всего"
Cells(31, 36) = CSng(sym3)
Cells(32, 34) = "Зарплата стоматологи"
Cells(32, 36) = CSng(Cells(1, 36)) + CSng(Cells(2, 36)) + CSng(Cells(3, 36)) + CSng(Cells(4, 36)) + CSng(Cells(5, 36))
Selection.PrintOut Copies:=1, Collate:=True
Selection.Clear
UserForm1.Hide
End Sub
[/vba]
[moder]Код нужно оформлять тегами (кнопка #)!
Поправила.[/moder]

Автор - IIOB
Дата добавления - 01.09.2015 в 11:32
Manyasha Дата: Вторник, 01.09.2015, 11:53 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Без файла не очень понятно какое место макроса Вам нужно переделать, и что конкретно Вы меняете при добавлении новых врачей.

Урежьте файл до нескольких строк и выложите сюда.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеБез файла не очень понятно какое место макроса Вам нужно переделать, и что конкретно Вы меняете при добавлении новых врачей.

Урежьте файл до нескольких строк и выложите сюда.

Автор - Manyasha
Дата добавления - 01.09.2015 в 11:53
IIOB Дата: Вторник, 01.09.2015, 14:19 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Отправил на почту, оставил по 3-4 строки, все равно 1.5мб весит
[moder]файл прикладывать нужно сюда!
Заархивируйте его и приложите к сообщению[/moder]
К сообщению приложен файл: 9293322.rar (38.9 Kb)


Сообщение отредактировал IIOB - Вторник, 01.09.2015, 14:26
 
Ответить
СообщениеОтправил на почту, оставил по 3-4 строки, все равно 1.5мб весит
[moder]файл прикладывать нужно сюда!
Заархивируйте его и приложите к сообщению[/moder]

Автор - IIOB
Дата добавления - 01.09.2015 в 14:19
IIOB Дата: Вторник, 01.09.2015, 15:03 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
приложил
[moder]Файл Excel, почему вопрос в разделе по Word? Переношу в ВОПРОСЫ ПО EXCEL[/moder]


Сообщение отредактировал Pelena - Вторник, 01.09.2015, 15:33
 
Ответить
Сообщениеприложил
[moder]Файл Excel, почему вопрос в разделе по Word? Переношу в ВОПРОСЫ ПО EXCEL[/moder]

Автор - IIOB
Дата добавления - 01.09.2015 в 15:03
IIOB Дата: Вторник, 01.09.2015, 16:02 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
весь вопрос в этом месте
[vba]
Код
For i = 2 To 32
For j = s To d
sym = sym + CSng(Cells(j, i))
Next
If Cells(3, i) = 1 Then minus = CSng(InputBox("Введите минуc по " & Cells(1, i)))
sym2 = sym - minus
minus = 0
sym2 = sym2 * CSng(Cells(2, i)) / 100
sym3 = sym3 + sym2
ms = ms & CStr(Cells(1, i)) & Space(15 - Len(Cells(1, i))) & vbTab & CStr(sym) & Space(8 - Len(CStr(sym))) & vbTab & CStr(sym2) & vbCrLf
Cells(i - 1, 36) = Cells(1, i)
Cells(i - 1, 37) = CSng(sym)
Cells(i - 1, 38) = CSng(sym2)
sym = 0
Next
[/vba]
так как количество столбцов изменяется при добавлении нового врача, то и первый цикл надо постоянно поправлять, а за ним и место для формирования шаблона для печати
[vba]
Код
Range(Cells(1, 34), Cells(32, 36)).Select
Cells(31, 34) = "Зарплата всего"
Cells(31, 36) = CSng(sym3)
Cells(32, 34) = "Зарплата стоматологи"
Cells(32, 36) = CSng(Cells(1, 36)) + CSng(Cells(2, 36)) + CSng(Cells(3, 36)) + CSng(Cells(4, 36)) + CSng(Cells(5, 36))
Selection.PrintOut Copies:=1, Collate:=True
Selection.Clear
UserForm1.Hide
[/vba]
 
Ответить
Сообщениевесь вопрос в этом месте
[vba]
Код
For i = 2 To 32
For j = s To d
sym = sym + CSng(Cells(j, i))
Next
If Cells(3, i) = 1 Then minus = CSng(InputBox("Введите минуc по " & Cells(1, i)))
sym2 = sym - minus
minus = 0
sym2 = sym2 * CSng(Cells(2, i)) / 100
sym3 = sym3 + sym2
ms = ms & CStr(Cells(1, i)) & Space(15 - Len(Cells(1, i))) & vbTab & CStr(sym) & Space(8 - Len(CStr(sym))) & vbTab & CStr(sym2) & vbCrLf
Cells(i - 1, 36) = Cells(1, i)
Cells(i - 1, 37) = CSng(sym)
Cells(i - 1, 38) = CSng(sym2)
sym = 0
Next
[/vba]
так как количество столбцов изменяется при добавлении нового врача, то и первый цикл надо постоянно поправлять, а за ним и место для формирования шаблона для печати
[vba]
Код
Range(Cells(1, 34), Cells(32, 36)).Select
Cells(31, 34) = "Зарплата всего"
Cells(31, 36) = CSng(sym3)
Cells(32, 34) = "Зарплата стоматологи"
Cells(32, 36) = CSng(Cells(1, 36)) + CSng(Cells(2, 36)) + CSng(Cells(3, 36)) + CSng(Cells(4, 36)) + CSng(Cells(5, 36))
Selection.PrintOut Copies:=1, Collate:=True
Selection.Clear
UserForm1.Hide
[/vba]

Автор - IIOB
Дата добавления - 01.09.2015 в 16:02
Manyasha Дата: Вторник, 01.09.2015, 17:09 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
IIOB, проверяйте.
Правок немного, смотрите комментарии.
К сообщению приложен файл: 8181342.rar (35.1 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеIIOB, проверяйте.
Правок немного, смотрите комментарии.

Автор - Manyasha
Дата добавления - 01.09.2015 в 17:09
IIOB Дата: Вторник, 01.09.2015, 17:19 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
спасибо за быстрый ответ
Еще вопрос, пользователь, который заполняет таблицу очень неграмотный и может случайно перетащить ячейку
возможно сделать защиту от перетаскивания ячейки или случайного изменения данных в листе

Правки ШИКАРНЫ и элегантны, только касаемо столбца А он у меня в оригинале заполнен до конца датами (тут оставил свой вариант), по поводу проверки на 0 полностью согласен, проглядел(
[moder]Про работу макроса при защите листа ищите в поиске. Таких тем много обсуждалось.[/moder]


Сообщение отредактировал Manyasha - Вторник, 01.09.2015, 17:37
 
Ответить
Сообщениеспасибо за быстрый ответ
Еще вопрос, пользователь, который заполняет таблицу очень неграмотный и может случайно перетащить ячейку
возможно сделать защиту от перетаскивания ячейки или случайного изменения данных в листе

Правки ШИКАРНЫ и элегантны, только касаемо столбца А он у меня в оригинале заполнен до конца датами (тут оставил свой вариант), по поводу проверки на 0 полностью согласен, проглядел(
[moder]Про работу макроса при защите листа ищите в поиске. Таких тем много обсуждалось.[/moder]

Автор - IIOB
Дата добавления - 01.09.2015 в 17:19
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Добавление врачей (Word)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!