Страницы: 1
RSS
Наращивание даты при создании листа
 
Здравствуйте! подскажите пожалуйста код который:
Создает лист с именем которое берется из А1 в формате "Д". На
новом листе дата в А1 должна наращиваться на 1 день
 
так?
Код
Sub Кнопка1_Щелчок()
  Dim ws As Worksheet
  Set ws = Sheets(Sheets.Count)
  With Worksheets.Add(, ws)
    .Name = Day(ws.Cells(1, 1))
    ws.Cells(1, 1).Copy .Cells(1, 1)
    .Cells(1, 1) = .Cells(1, 1) + 1
  End With
End Sub
 
Что-то не работает. Что делаю не так?. [img]https://image.ibb.co/gYBMry/IMG_20180719_213224.jpg[/img]
 
Скачал Ваш файл, вставил в модуль макрос Казанского, запустил - всё работает.
 
Dobepman, попробуйте удалить пробелы до и после строк, выделенных красным.
 
Казанский, Спасибо код заработал, но не так как ожидалось.
 
Цитата
Dobepman написал:
берется из А1 в формате "Д".
а что должно получиться для числа 30 в формате "Д"? попробуйте ячейке назначить формат "Д" и посмотрите, что получится. Это я к тому, что если в ячейку записывать вместо дат всякое барахло, то вполне ожидаемо, что и на выходе макрос Вам сделает не то, что Вы хотите.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, барахла нет в ячейке только дата. На случай неадекватного поведения usera нужно предусмотреть проверку ввода только даты, я только не знаю как (вопрос не главный, второстепенный). Вопросов много. Поэтому спрашиваю основной минимум необходимый для работы.
Изменено: Dobepman - 24.07.2018 10:54:03
 
Цитата
Dobepman написал:
предусмотреть проверку ввода только даты, я только незнаю как.
Данные - проверка данных - тип данных=дата.
 
Цитата
Dobepman написал:
барахла нет в ячейке только дата.
Код Казанского берёт дату с последнего листа, а в примере со скриншота последним является не лист "1", а лист "Лист1", а там в ячейке 1:1 пусто, то есть 00.01.1900, для функции DAY это есть бред (день не может быть 0) вот и получаем на выходе "неосмысленное" 30.
Изменено: Мартын - 24.07.2018 11:01:38
 
Мне кажется нужно с активного листа брать дату, а новый (вставляемый) лист должен появлятся за активным а не последним т.е. он всегда предпоследний. Но я понятию не имею как прописать это в коде.
 
я думаю надо пробежаться по всем листам и выбрать макс дату а затем добавить месяц или день  
 
Цитата
Dobepman написал:
а новый (вставляемый) лист должен появлятся за активным а не последним
ну это не сложно,
Код
Set ws = ActiveSheet

но все ж зависимость должна быть от максимальной даты, тогда можно получить перед вставкой листа так
Код
  Last = Application.Evaluate("=MAX(" & Sheets(1).Name & ":" & Sheets(Sheets.Count).Name & "!A1)")
По вопросам из тем форума, личку не читаю.
 

Оказывается нужен не новый лист т.к. он пустой. А нужно копировать текущий (активный) на котором все есть для работы. Помогите пожалуйста подкорректировать код.

 
Код
Sub Macro1()
    ActiveSheet.Copy After:=ActiveSheet
    With ActiveSheet
        .Name = Day(.Range("A1"))
        .Range("A1") = .Range("A1") + 1
    End With
End Sub
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо ответ подошел
 
27 Июля решение - 5 декабря благодарность. Оперативно...
Dobepman, а самому, без напоминаний, отписываться в своих темах никак? Ведь невежливо так. И это ещё мягкая формулировка.
Страницы: 1
Наверх