Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Макрос для заполнения следующей пустой ячейки, Просмотр диапазона ячеек и заполнение следующей пустой
 
Karataev, Я еще вернул ваше условие, которое выключает макрос если я не ввел данные первый раз:
Код
Sub Макрос()
    Dim boolIsEmpty As Boolean, i As Long
    For i = 2 To 66
        If Cells(i, "B").Value = "" Then
            Cells(i, "B").Value = InputBox("Введите данные 1:")
            If Cells(i, "B").Value = "" Then Exit Sub ' вот тут, а то мало ли передумаю вводить =D
            Cells(i, "B").Offset(0, 1).Value = InputBox("Введите данные 2:")
            boolIsEmpty = True
            Exit For
        End If
    Next i
    If boolIsEmpty = False Then
        MsgBox "Все ячейки заполнены!", vbExclamation
    End If
End Sub
Макрос для заполнения следующей пустой ячейки, Просмотр диапазона ячеек и заполнение следующей пустой
 
Sanja, Karataev, Так, а я даже не начинающий)) Я вот что могу найти и присобачить – нахожу и присобачиваю. Что не могу найти, пишу в форум и такие добрые люди, как вы помогают по кусочку). Я даже не любитель наверно)) но автоматизацию просто обожаю :excl:  :)
Большое вам спасибо за реализацию)
Макрос для заполнения следующей пустой ячейки, Просмотр диапазона ячеек и заполнение следующей пустой
 
Sanja, Karataev,

Ребята спасибо, скажите, а можно еще сделать так, чтобы он перед вводом данных уже в ячейку B"Х" он выбрал эту ячейку?

strInput.Select типа (чтобы она выделена была) - то именно селект не работает

Это нужно для того чтобы впилить еще мой код,
а мой код вводит остальные Инпутбоксы, ссылаяст при этом на выделенную ячейку типа:
Цитата
Selection.Offset(0, 1) = InputBox .....
Selection.Offset(0, 3) = InputBox .....
Selection.Offset(0, 5) = InputBox .....
и т.д.
А по скольку, если использовать strInput, например, то к нему уже не присобачить .Select  :(  
Макрос для заполнения следующей пустой ячейки, Просмотр диапазона ячеек и заполнение следующей пустой
 
Sanja,АААА)) за юмор ПЯТЬ!)
Макрос для заполнения следующей пустой ячейки, Просмотр диапазона ячеек и заполнение следующей пустой
 
Привет ;)

Помогите, пожалуйста написать код.
Смысл простой:
Нужно создать макрос, который я потом привяжу к кнопке, нажав на которую макрос "пробежится" по диапазону B2:B66 на предмет первой пустой ячейки в этом диапазоне, затем он выдаст диалоговое окно InputBox с просьбой ввести какие-либо данные. После того как я заполню ИнпутБокс данные введутся в пустую ячейку (первую после заполненных) этого диапазона.
Например в диапазоне B2:B66 все пусто, нажав на макрос, исходя из вышеописанной логики, он должен мне предложить ввести данные и затем поместить их в ячейку B2. Или если в этом диапазоне уже заняты ячейки B2:B23 (а остальные пустые вплоть до B66), например, то он(макрос) соответственно поместит введенные мной данные из IputBox'a в ячейку B24.

Причина сей просьбы в том, что я назначу на макрос горяч. сочетание клавиш, и мне не придется скролить и смотреть где там след пустая ячейка, а просто нажав комбинацию клавиш ввести данные и ВУАЛЯ.

:)Спасибо заранее!:D
Простое двойное условие, если активная ячейка пустая
 
Sanja,Спасибо) уже сделал, аналогичным образом, работает))
Простое двойное условие, если активная ячейка пустая
 
TSN, спасибо) Скажите, а если я хочу очистить не только активную ячейку, а еще несколько конкретных ячеек этой строки, то как мне реализовать и их очистку при нажатии Yes?
Я прошу прощения за наглость, просто пришел к выводу повесить манипуляции все на кнопки(макросы с шорт катами назначенными мной), и если раньше после очистки этой ячейки остальные в этой строке (-ах, если удаляю сразу несколько проектов (соответственно строк))  удалялись сами, благодаря прописанному коду в исходном тексте листа, то сейчас я решил завязать все в одно макросе и прикрепить его к шорт кату и кнопке.
Попытки присобачить сюда код с исходного текста, который позволял очищать остальные ячейки в строке по логике "если пусто, то...", не увенчались успехом.

То есть с учетом всех условий выше: если выбранный диапазон (то есть даже не одна ячейка может быть, то бишь selection) принадлежит к столбцу B (и тут можно даже опустить условие, если я выберу пустую ячейку, пес с ней, не страшно), то: 1) очистить выбранный диапазон 2) очистить соответствующие этому дипазону ячейки в столбцах A, C, E, G, I и K
То есть, я выбрал например диапазон B13:B25, макрос посмотрел, что главное условие выполнено и ячейки выделены только в столбце B (если нет, то пусть выводит сообщение "Выберете ячейку(диапазон) в колонке B и повторите действие еще раз"), он меня спрашивает "Данные этого проекта будут полностью удалены. Продолжить?" и если я жму да, то очищаются не только B13:B25, но и те же диапазоны в столбцах A, C, E, G, I и K

Макрос, срабатывающий на очистку. Защита от дурака
 
Привет. :)

Я все ломаю голову над одной задачей по защите от случайного удаления.

Суть:
Есть таблица с проектами. Уже все настроено настолько удобно, что прям страшно из-за такой степени автоматизации (шутка, мне это в кайф :D ).

Я ввожу в ячейку колонки B название проекта и дальше начинает работать макрос, благодаря которому надо просто вводить дальше данные по проекту и жмакать Enter после каждого введенного значения. Красота! Вся строка с этим проектом заполняется, проставляются значения в нужных ячейках, заранее заданных макросами, и заливка там где надо с цветом появляется.
Я решил сделать такую штуку с обратной силой, то есть если я удаляю название проекта, то и весь проект автоматом удаляется, то есть все ячейки очищаются и цвет заливки становится прежним. Супер!
Но потом я подумал, блин а если я нечаянно нажму на дэлит и весь проект похерится, и ctrl+z уже не поможет (проверено).

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

Но опять же НО(( У меня до всего этого дела была создана супер-мега кнопка, которая удаляет все и приводит таблицу к ее первозданному виду для того, чтобы можно было сохранить файл как новый для следующего отчетного месяца и начать работать по новой.
И я начал дико ржать когда он меня 66 раз (именно такой лимит строк под возможное количество проектов в месяц) спрашивал "вы точно хотите удалить проект"))))) ибо макрос то видит, что происходит пошаговая очистка всего и вся :D ))

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

Я думал сначала, а может я защищу лист и создам макрос который при заданных гор. клавишах будет вписывать название проекта в активную ячейку, а другой макрос таким же макаром ее будет очищать. Но фиг там был, макрос работает только на незащищенном листе, но попытка не пытка как говориться, теперь то я это точно знаю))) А было бы так круто если бы можно было запилить подобный макрос, который бы обходил защиту листа и вводил проект куда надо, а дэлитом при этом его не похеришь ибо лист защищен. Тут то я уж вряд ли бы случайно 3 клавиши вместе нажал (та самая комбинация гор. клавиш для макроса регистрации проекта).

В общем посоветуйте, можно ли запилить макрос против защиты листа для введения названия в ячейку, или можно ли запилить макрос, который автоматом жал бы за меня каждый раз кнопку -да-, если я решу нажать ту самую кнопку, которая все удаляет?

Или я в конец охерел и уже слишком много хочу от экселя и вба в частности)))? мне уже самому так кажется, но было бы так круто, если бы это желание можно было реализовать.

Спасибо за внимание и извините за лонгрид :D !
Простое двойное условие, если активная ячейка пустая
 
Цитата
SAS888 написал:
2. Использовать If IsEmpty(Selection) Then... в данном случае нельзя, т. к. в Selection могут оказаться как пустые, так и заполненные ячейки.
Тем не менее работает нормально (даже если выделять одновременно и пустые и непустые), но спасибо))
Простое двойное условие, если активная ячейка пустая
 
Спасибо)
Простое двойное условие, если активная ячейка пустая
 
Sanja, А если нужно не одну выбранную ячейку, а несколько удалить сразу, то на что нужно заменить ActiveCell?
ActiveRange видимо не бывает в природе)) Я попробовал во всяком случае, не получилось.
Изменено: idexter08 - 22.05.2017 23:48:55
Простое двойное условие, если активная ячейка пустая
 
Пхах)) сорян.
Афигенно! Все работает как надо!  8)
Благодарю!
Простое двойное условие, если активная ячейка пустая
 
Цитата
Sanja написал:Вариант
Че то не хочет
Изменено: idexter08 - 22.05.2017 23:48:27
Простое двойное условие, если активная ячейка пустая
 
Привет умные люди :) . Прошу помочь. Не такому умному мне  :D  нужно доработать простенький код следующего типа:
Код
Sub Удалить_проект()
    If IsEmpty(ActiveCell) = True Then
            MsgBox "Данные о проектах полностью удалены", 64
    Else
            Dim xx
                xx = MsgBox("Данные этого проекта будут полностью удалены. Продолжить?", vbYesNo)
                If xx = 7 Then: Exit Sub     'если нет, то не выполнять макрос
                If xx = 6 Then:              'если да, то:
                Selection.Value = Empty      'поскольку ячейка связанна с исходным кодом листа, то вся трока проекта с даннми будет очищена
    End If
End Sub
1) Сейчас макрос действует так:
Если активная ячейка пустая, то сообщить, что данные проекта удалены
В ином случае выполнять остальные строки кода.

2) А нужно чтобы было так:

Проверить находится ли активная ячейка в колонке B, если нет, то:
Вывести сообщение "Выберете ячейку с названием проекта в колонке B и повторите действие еще раз".
Если да, то:
И вот тут мы продолжаем то, что описано 1 пункте:
Если активная ячейка пустая, то сообщить, что данные проекта удалены
В ином случае выполнять остальные строки кода.

Заранее искренне благодарю!  :)
Изменено: idexter08 - 29.05.2017 21:25:37
Макрос для требования ввода данных, Зацикленное сообщение
 
Цитата
heso написал:
Посмотрите в сторону While...Wend.
Получилось) Спасбо heso, натолкнул в нужную сторону,
пошаманил (плюс немного изменил логику порядка) и вот такой код работает как надо:
Код
Dim xVal5 As String 'xVal5 для будущего заполнения ячейки
             Range("K" & cell.Row) = xVal5  'определяем в какую ячейку будет введено значение
             Range("K" & cell.Row) = InputBox("Введите Deadline", "Регистрация проекта", , 13000, 4000) 'при нажатии на кнопку с этим макросом будет выведено сообщение
    Do While Range("K" & cell.Row) = ""
             Range("K" & cell.Row) = InputBox("Вы не ввели Deadline, пожалуйста введите", "Регистрация проекта", , 13000, 4000)
    Loop
Макрос для требования ввода данных, Зацикленное сообщение
 
Привет Excel'тяне!  :)
Нужна помощь.

Суть.
Есть макрос в исходном тексте листа, который делает следующее:
Если я ввожу какое-либо значение в ячейку столбца B (название проекта), то выводится InputBox, который в свою очередь требует ввести данные для ячейки столбца K (дедлайн проекта) в той же строке, за тем после его ввода выводятся по порядку так же еще несколько InputBox'ов для ввода остальных значений (сколько поступит денег от заказчика и сколько необходимо заплатить одному или нескольким исполнителям) в ячейки других столбцов этой же строки.

Что нужно изменить.
Нужно сделать так, чтобы инпут боксы не схлопывались переходя на следующий инпут бокс по порядку пока не кончится последний (всего их 5 штук, в определенном порядке — дедлайн > доход > издержки1 > издержки2 > издержки3).
Ибо на данный момент, если не ввести в инпут бокс никакого значения и просто нажать ок или Esc, то макрос прекратится,
так как стоит после каждого инпут бокса If val = "" Then Exit Sub

А надо, но только для двух первых ( дедлайн > доход >) из них задать некий "цикл", т.е. вместо If val = "" Then Exit Sub написать такой код, который бы выводил этот же инпут бокс (например инпут бокс для дедлайн >) до тех пор пока не будет введено значение, как только значение будет введено, только после этого переходим к следующему инпут боксу, со следующим тоже самое, а в остальных трех не обязательно (так как бывают проекты без издержек)

То есть смысл в том, чтобы нечаянное нажатие Enter или Esc не обрекло на пропуск ввода необходимого значения, дабы не рисковать и избежать возможных потерь.

Надеюсь объяснил подробно. Буду благодарен доработке кода.
На данный момент (это не весь код с исходного листа, но та часть, которую необходимо изменить в соответствии с вышеописанным) код выглядит так:
Код
'Далее задаем параметры для выхода диалоговых окон, в которые будет предложенно ввести значения

Dim xVal1 As String 'xVal1 для будущего заполнения ячейки столбца E
Dim xVal2 As String 'xVal2 для будущего заполнения ячейки столбца C
Dim xVal3 As String 'xVal3 для будущего заполнения ячейки столбца G
Dim xVal4 As String 'xVal4 для будущего заполнения ячейки столбца I
Dim xVal5 As String 'xVal5 для будущего заполнения ячейки столбца K

xVal5 = InputBox("Введите Deadline", "Регистрация проекта", , 13000, 4000) 'при нажатии на кнопку с этим макросом будет выведено сообщение
        If xVal5 = "" Then Exit Sub 'если значение не будет указано, то при нажатии ОК - значение ячейки НЕ изменится
                Range("K" & cell.Row) = xVal5  'определяем в какую ячейку будет введено значение

xVal4 = InputBox("Введите бюджет проекта. ВНИМАНИЕ! Для десятичных значений использовать только «.»", "Регистрация проекта", , 13000, 4000) 'при нажатии на кнопку с этим макросом будет выведено сообщение
        If xVal4 = "" Then Exit Sub 'если значение не будет указано, то при нажатии ОК - значение ячейки НЕ изменится
                Range("I" & cell.Row) = xVal4  'определяем в какую ячейку будет введено значение

xVal1 = InputBox("Введите бюджет для Нурии", "Регистрация проекта", , 13000, 4000) 'при нажатии на кнопку с этим макросом будет выведено сообщение
        If xVal1 = "" Then Exit Sub 'если значение не будет указано, то при нажатии ОК - значение ячейки НЕ изменится
                Range("E" & cell.Row) = xVal1  'определяем в какую ячейку будет введено значение

xVal2 = InputBox("Введите бюджет для Татьяны", "Регистрация проекта", , 13000, 4000) 'при нажатии на кнопку с этим макросом будет выведено сообщение
         If xVal2 = "" Then Exit Sub 'если значение не будет указано, то при нажатии ОК - значение ячейки НЕ изменится
                Range("C" & cell.Row) = xVal2  'определяем в какую ячейку будет введено значение

xVal3 = InputBox("Введите бюджет для Unknown", "Регистрация проекта", , 13000, 4000) 'при нажатии на кнопку с этим макросом будет выведено сообщение
         If xVal3 = "" Then Exit Sub 'если значение не будет указано, то при нажатии ОК - значение ячейки НЕ изменится
                Range("G" & cell.Row) = xVal3  'определяем в какую ячейку будет введено значение
Автозаполнение даты, Доработка кода
 
idexter08, Sanja, кажется я решил обе проблемы :idea:
Дело в том что вы удалили ход For each cell in Target в начале и Next cell в конце

Таким образом вот код полностью удовлетворяющий все мои вышеописанные желания (без вас я бы не справился все равно, спасибо  :D):
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     
    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("B2:B66")) Is Nothing Then   'если измененная ячейка попадает в диапазон B2:B66
        If cell = Empty Then                                                    'если в B2:B66 пусто, то
            Target.Offset(, -1).Value = Empty                          'очищаем ячейку колонки А
            Target.Offset(, 3).Interior.ColorIndex = oldColor       'возвращаем нужный цвет в ячейку колонки Е
        
        Else 'в ином случае (если диапазон B2:B66 не пустой), то
            With Range("A" & cell.Row) 'вводим в ячейку, в столбец A дату
               .Value = Date
            With cell.Offset(0, 3)     'помечаем ячейку столбца E цветом
                  .Interior.ColorIndex = 22
            End With
          End With
       End If
    End If
  Next cell
End Sub

:excl: УРА!!! :excl:
Файл внутри, если что)
Автозаполнение даты, Доработка кода
 
idexter08, та же петрушка в обратную сторону:
Если вставлять не в одну ячейку, сразу в диапазон нескольких в колонке B, то ни даты не вставляются ни цветом ячейки в колонке Е не помечаются :cry:
Автозаполнение даты, Доработка кода
 
Sanja,  Еще все таки один момент :sceptic:
Если удалять по одной ячейке, то все работает, но если удалить диапазон из B2:B66, то не работает :(
Что в таком случае следует поменять в коде?
Автозаполнение даты, Доработка кода
 
Sanja, Спасибо большое :)

Я так понял, что после 11 строки идет ненужное, ибо работает все как надо с диапазоном строк 1-11.

Еще раз благодарю :excl: :excl: :excl:
Автозаполнение даты, Доработка кода
 
Привет.
Во-первых хочу сказать спасибо за тему (Автоматическая вставка текущей даты в ячейку при вводе данных) ;), которую в свое время создал Николай, да и вообще за весь его  :excl: проект по Экселю :excl:

Я немного доработал под себя код :oops: , добавив еще одно правило, а именно выделение ячейки цветом. То есть помимо внесения даты в ячейку столбца А на основании изменения ячейки столбца B, выделяется ячейка столбца E определенным цветом.
Тут все работает как надо.

Но я бы хотел сделать еще одно условие в этом коде (что у меня собственно и не выходит пока что) :( .
Суть такая :idea: :
Я ввел значение в ячейку столбца B и два описанных правила сработали, но если я удаляю значение в этой же (или любой другой) ячейке столбца B, то оба правила работают так же, ибо они ссылаются на любые изменения в столбце B :cry: (в т.ч. очистку). А я бы хотел, чтобы при удалении значения в этом пресловутом столбце B, правила для столбцов A и E - нивелировались 8) , то есть попросту отчищались от даты в столбце А и приходили к исходному цвету в столбце Е :) .

Файл с примером во вложении.
Код прилагаю ниже, буду рад вашей помощи :D
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     
    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("B2:B66")) Is Nothing Then  'если измененная ячейка попадает в диапазон B2:B66
            With Range("A" & cell.Row)         'вводим в ячейку, в столбец A дату
               .Value = Date
            
            End With
            
            With cell.Offset(0, 3)         'помечаем ячейку столбца E цветом
                  .Interior.ColorIndex = 22
                  
            End With
            
       End If
    
    Next cell
    
End Sub
Как активировать кнопку "Прогрессия"
 
Цитата
Казанский написал: Приложите файл, можно оставить один пустой лист, как я понял.
К сожалению не могу из-за конфидециальности содержимого. Удаляя это содержимое (дабы не переживать за конфидециальность) функция прогрессии начинает снова работать)) Так что чистоты эксперимента достичь не получается((
Какие могут быть факторы влияющие на активность кнопки прогрессия и на саму функцию?
Как активировать кнопку "Прогрессия"
 
Тупость конечно, но уменя не работает автозаполнение. Например пишу в первой ячейке 1 в нижней ячейке 2 - выделяю их и по навность пологаю что при протаскивании далее вниз получу 3, 4, 5 и т.д. Но он тупо повторяет 1, 2, 1, 2 и т.д. Посмотрел на меню Заполнить, а там оказывается не активна кнопка Прогрессия вообще. Как ее активировать?
При том это проблема в самом файле как я понял, ибо в других все ок, функция же поумолчанию работает изначально.
Офис pro 10.

Спасибо, извините за тупость.
Изменено: idexter08 - 11.11.2016 18:56:45
Как создать кликабельную ячейку со списком в Excel
 
Пример не совсем такой. Бегающий треугольник туда сюда честно говоря раздражает. плюс на гифке сначала выделение ячейки потом нажатие и список выпадает. А в примере сразу при выделении.
Изменено: idexter08 - 27.06.2016 15:12:21
Как создать кликабельную ячейку со списком в Excel
 
Сразу поясню, как создать выпадающий список я знаю, только я хочу не только на треугольник нажимать чтобы список выпадал, а прям на саму ячейку чтоб нажать и он так же выпадал. Просто мелкий треугольник не так удобно нажимать, нежели сразу на большую (относительно треугольника) ячейку.
Так точно можно, у меня рабочие доки такие, только они заблочены и я не имею возможности выяснить как это было сделано.
Спасибо умникам эксель заранее.
На гифке показано то что я имею в виду.
Как сделать функцию "Если" выполняющую много условий?
 
The_Prist, большое вам человеческое спасибо:)  Ломал голову часа 2 наверно с функцией Если, а тут вон оно как все просто оказывается, а я уж хотел чуть ли не код для собственной функции в бэйсике писать :))
Цитата
lethe пишет: =ОКРВВЕРХ(C3/1000;0,5)
Не, не. Я уже написал выше благодарность за ответ. Функция ВПР помогла)
Как сделать функцию "Если" выполняющую много условий?
 
Привет всем.
Непростая задача:
Есть значение, которое может быть меньше 500, или больше 500, но меньше 1000, или больше 1000, но меньше 1500, или больше 1500, но меньше 2000, или в то же время может иметь целые значения такие как , 500, 1000, 1500, 2000 и так далее.
Мне нужно написать формулу с несколькими лог выражениями и несколькими истинами соответственно В ОДНУ ЯЧЕЙКУ:
Если C3<500 то C3 = 0,5; если нет, то C3\1000 (делим на тысячу имеется в виду если C3 целое 500 ил 1000 или 1500 и т.д.)
Если C3>500 но C3<1000, C3=1; если нет, то C3\1000 и так далее далее и все эти если нужно впихнуть в одну ячейку например D3, так чтобы когда я ввожу в С3 865, то в D3 автоматом появлялось 1, если в C3 ввожу 389, то в D3 автоматом появлялось 0,5. Если ввожу в С3 1369, то в D3 автоматом появлялось 1,5, если в C3 ввожу 3889, то в D3 автоматом появлялось 4.
Надеюсь суть задачи я вам объяснил, очень хотелось бы создать такую формулу, она в принципе простая, но я не знаю как написать к ней код в макросах, а в стандартной функции если к сожалению можно написать только одно лог выражение и получить только одну истину или ложь.
Вот например чего я максимум добился =ЕСЛИ(И(C3>500;C3<1000);1;C3/1000) с помощью этой функции можно посчитать только от 501 до 999 чтоб он мне выдавал 1 в ячейке D3 но если я поставлю в C3 1265 к примеру он тупо поделит ее на тыщу даст в Д3 1,3, а мне нужно 1,5 в этом случае.

Спасибо за ранее)
Страницы: 1
Наверх