Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Макрос по нарастающему итогу + ведение лога вводов значений

Автор iKriss, 19.08.2012, 21:54

« назад - далее »

iKriss

Привет всем!
Кое-как нарисовал свой первый более-менее осмысленный макрос, но появилась проблема - начальных познаний не хватает, чтобы усовершенствовать мою чудовищную конструкцию
В общем, вот текст макроса (в приложении есть табличка, где он используется)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
      With Target
         If .Address(False, False) = "B4" Then
            If IsNumeric(.Value) Then
               Application.EnableEvents = False
               Range("B12").Value = Range("B12").Value + .Value
               Range("D18").Value = Range("B12").Value - Range("F12").Value - Range("D27").Value
               Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1) = Now()
               Sheets(2).Cells(Rows.Count, 2).End(xlUp).Offset(1) = .Value
               Application.EnableEvents = True
               Range("$B$4").Select
               Selection.ClearContents
               Range("$C$7").Select
               Application.EnableEvents = True
            End If
         End If
         If .Address(False, False) = "C7" Then
         Application.EnableEvents = True
         Sheets(2).Cells(Rows.Count, 3).End(xlUp).Offset(1) = .Value
         Range("$C$7").Select
         Selection.ClearContents
         Range("$C$8").Select
         End If
         If .Address(False, False) = "C8" Then
         Sheets(2).Cells(Rows.Count, 4).End(xlUp).Offset(1) = .Value
         Range("$C$8").Select
         Selection.ClearContents
         End If
         
         If .Address(False, False) = "F4" Then
            If IsNumeric(.Value) Then
               Application.EnableEvents = False
               Range("F12").Value = Range("F12").Value + .Value
               Range("D18").Value = Range("B12").Value - Range("F12").Value - Range("D27").Value
               Sheets(2).Cells(Rows.Count, 5).End(xlUp).Offset(1) = Now()
               Sheets(2).Cells(Rows.Count, 6).End(xlUp).Offset(1) = .Value
               Application.EnableEvents = True
               Range("$F$4").Select
               Selection.ClearContents
               Range("$G$7").Select
               Application.EnableEvents = True
            End If
         End If
         If .Address(False, False) = "G7" Then
         Sheets(2).Cells(Rows.Count, 7).End(xlUp).Offset(1) = .Value
         Range("$G$7").Select
         Selection.ClearContents
         Range("$G$8").Select
         End If
         If .Address(False, False) = "G8" Then
         Sheets(2).Cells(Rows.Count, 8).End(xlUp).Offset(1) = .Value
         Range("$G$8").Select
         Selection.ClearContents
         Range("$G$8").Select
         End If
         
         If .Address(False, False) = "D24" Then
            If IsNumeric(.Value) Then
               Application.EnableEvents = False
               Range("D27").Value = Range("D27").Value + .Value
               Range("D18").Value = Range("B12").Value - Range("F12").Value - Range("D27").Value
               Sheets(2).Cells(Rows.Count, 10).End(xlUp).Offset(1) = Now()
               Sheets(2).Cells(Rows.Count, 11).End(xlUp).Offset(1) = .Value
               Application.EnableEvents = True
               Range("$D$24").Select
               Selection.ClearContents
               Worksheets("КАССА").Protect Password:="iriverh10", UserInterfaceOnly:=True
               Application.EnableEvents = True
            End If
         End If
      End With
End Sub


Вроде все работает, но есть необходимость в том, чтобы его довести
1. Необходимо, чтобы он срабатывал по нажатию кнопки и отправлял не по одному значению на второй лист, а одновременно три, причем требовал ввода именно трех (если меньше, то сообщение об ошибке), то есть мы вводим значения в ячейки B4, C7 и С8, после чего нажимаем кнопочку "Провести", после чего макрос прибавляет значение B4 к нарастающему итогу в ячейке B12, на основании которой рассчитывается значение ячейки D18, после чего значения из ячеек B4, С7 и С8 отправляются на второй лист, где одной строчкой вбиваются в табличку (в примере видно), после чего форма очищается. Та же история со второй формой, разве что значения из второй формы вычитаются из значения ячейки D18

Пожалуйста, я уже голову сломал, как это сделать, но слишком мало знаю о VBA =(((
Помогите!

Wasilic

Вот уже и собрался кнопки поставить, да не могу! Пароля не знаю.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Михаил С.

Где-то я сегодня уже этот вопрос встречал, и там было решение...
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

iKriss

Цитата: Wasilic от 19.08.2012, 22:36
Вот уже и собрался кнопки поставить, да не могу! Пароля не знаю.
простите =)
пароль iriverh10

iKriss

Цитата: Михаил С. от 20.08.2012, 00:06
Где-то я сегодня уже этот вопрос встречал, и там было решение...

не поможете линком? я не смог найти =( все ж по-разному пишут, не знаю, по каким словам искать =((

iKriss

Появилась мысль:
правильно ли, что для запуска макроса по кнопке достаточно добавить команду CommandButton1_Click() после слов Private Sub?

kuklp

Я тоже видел эту тему. И отвечал в ней. Вот файл с моим решением.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Wasilic

Учитывая что:
Цитата: iKriss от 19.08.2012, 21:54
слишком мало знаю о VBA =(((
предлагаю для тренировки пример с кнопками.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

iKriss

Благодарю, господа! Щас оба варианта затестим )

iKriss

Цитата: KuklP от 20.08.2012, 10:25
Я тоже видел эту тему. И отвечал в ней. Вот файл с моим решением.

Этот файлик уже смотрел, к сожалению, не разобрался в Вашем макросе, разве что взял оттуда команду для копирования строчек... хочется все же, чтобы по кнопочке происходило добавление, для этого и обновил тему!

iKriss

Цитата: Wasilic от 20.08.2012, 10:33
Учитывая что:
Цитата: iKriss от 19.08.2012, 21:54
слишком мало знаю о VBA =(((
предлагаю для тренировки пример с кнопками.

спасибо! то, что надо! сейчас быстренько допишем и все заработает!
только один вопрос - как доступиться к свойствам кнопки? (изменить положение, название и т.д.)
вышел в режим конструктора, тыкаю правой клавишей по кнопке и все равно не могу получить доступ к ней =(

iKriss


iKriss

Возник небольшой затуп, помогите, пожалуйста =)

PC = Sheets("Лог").Range("E" & Rows.Count).End(xlUp).Row + 1 - тут предполагается поиск первой пустой ячейки в столбце E, но почему-то ругается и подсвечивает желтым строчку =((

Что не так сделано?

Poltava

Синтаксис вроде бы правильный, а сказать больше без файла вам смогут только телепаты
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

iKriss