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

Вход

Регистрация

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

 

= Мир MS Excel/Автоматическое добавление столбца - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическое добавление столбца (Макросы/Sub)
Автоматическое добавление столбца
Новичёк Дата: Четверг, 13.08.2015, 14:11 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 2 ±
Замечаний: 0% ±

Здравствуйте. Была такая тема на другой ветке: http://www.excelworld.ru/forum/2-18583-1
Вопрос остался открытым, а здесь будет актуальнее, раз это решается с помощью макроса.
Было предложено решение:[vba]
Код
Private Sub Workbook_Open()
Call insCln
End Sub

Public Sub insCln()
Const fDone = "!"
Const lName = "buff"
      If Sheets(lName).Cells(1, 1).Value <> fDone Then
      If Date >= #8/1/2015# Then
          Sheets(lName).Cells(1, 1).Value = fDone
          Sheets("Лист1").Columns(3).Insert: Cells(1, 3) = Date
          ThisWorkbook.Save
          End If
      End If
End Sub
[/vba]

Вариант подходит, только надо вставлять не один столбец, а после каждой следующей даты. Я попробовал методом научного тыка(не специалист по макросам) доработать. Получилось следующее:
[vba]
Код


Option Explicit

Private Sub Workbook_Open()
Call insCln
End Sub

Public Sub insCln()
Const fDone = "!"
Const lName = "buff"
If Sheets(lName).Cells(1, 1).Value <> fDone Then
If Date >= #8/1/2015# Then
Sheets(lName).Cells(1, 1).Value = fDone
Sheets("Лист1").Columns(3).Insert: Cells(1, 3) = Date
If Date >= #8/11/2015# Then
Sheets(lName).Cells(1, 1).Value = fDone
Sheets("Лист1").Columns(4).Insert: Cells(1, 4) = "Новый столбец"
ThisWorkbook.Save
End If
End If
End If
End Sub
[/vba]

Но так не работает. Может подскажет кто, где ошибка? Надо, что бы столбец вставлялся после второго, следующий после третьего, следующий после четвёртого и т.д. Главное, чтобы только один раз по-прошествии каждой даты, прописанной в макросе. Спасибо.
К сообщению приложен файл: AddColumn_II.xls (39.5 Kb)
 
Ответить
СообщениеЗдравствуйте. Была такая тема на другой ветке: http://www.excelworld.ru/forum/2-18583-1
Вопрос остался открытым, а здесь будет актуальнее, раз это решается с помощью макроса.
Было предложено решение:[vba]
Код
Private Sub Workbook_Open()
Call insCln
End Sub

Public Sub insCln()
Const fDone = "!"
Const lName = "buff"
      If Sheets(lName).Cells(1, 1).Value <> fDone Then
      If Date >= #8/1/2015# Then
          Sheets(lName).Cells(1, 1).Value = fDone
          Sheets("Лист1").Columns(3).Insert: Cells(1, 3) = Date
          ThisWorkbook.Save
          End If
      End If
End Sub
[/vba]

Вариант подходит, только надо вставлять не один столбец, а после каждой следующей даты. Я попробовал методом научного тыка(не специалист по макросам) доработать. Получилось следующее:
[vba]
Код


Option Explicit

Private Sub Workbook_Open()
Call insCln
End Sub

Public Sub insCln()
Const fDone = "!"
Const lName = "buff"
If Sheets(lName).Cells(1, 1).Value <> fDone Then
If Date >= #8/1/2015# Then
Sheets(lName).Cells(1, 1).Value = fDone
Sheets("Лист1").Columns(3).Insert: Cells(1, 3) = Date
If Date >= #8/11/2015# Then
Sheets(lName).Cells(1, 1).Value = fDone
Sheets("Лист1").Columns(4).Insert: Cells(1, 4) = "Новый столбец"
ThisWorkbook.Save
End If
End If
End If
End Sub
[/vba]

Но так не работает. Может подскажет кто, где ошибка? Надо, что бы столбец вставлялся после второго, следующий после третьего, следующий после четвёртого и т.д. Главное, чтобы только один раз по-прошествии каждой даты, прописанной в макросе. Спасибо.

Автор - Новичёк
Дата добавления - 13.08.2015 в 14:11
miver Дата: Четверг, 13.08.2015, 14:22 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
следующей даты
Это как ? После каждой или после текущей. Как определить при открытии книги после какой даты вставить столбец ?
 
Ответить
Сообщение
следующей даты
Это как ? После каждой или после текущей. Как определить при открытии книги после какой даты вставить столбец ?

Автор - miver
Дата добавления - 13.08.2015 в 14:22
KSV Дата: Четверг, 13.08.2015, 17:37 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Добрый день!
Можно так: [vba]
Код
Private Sub Workbook_Open()
     Dim i&, n&, aDates(): aDates = Array(#8/1/2015#, #8/11/2015#, #8/21/2015#) ' здесь прописываете все свои даты
     With Лист1
         For i = 0 To UBound(aDates)
             If aDates(i) > Date Then Exit For
             If WorksheetFunction.CountIf(.UsedRange.Rows(1), aDates(i)) = 0 Then
                 n = .UsedRange.Columns.Count
                 .Columns(n).Insert
                 .Cells(1, n) = aDates(i)
             End If
         Next
     End With
End Sub
[/vba]
Без скрытых листов, доп. ячеек и прочих "хитростей".
К сообщению приложен файл: 2112998.xls (38.0 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеДобрый день!
Можно так: [vba]
Код
Private Sub Workbook_Open()
     Dim i&, n&, aDates(): aDates = Array(#8/1/2015#, #8/11/2015#, #8/21/2015#) ' здесь прописываете все свои даты
     With Лист1
         For i = 0 To UBound(aDates)
             If aDates(i) > Date Then Exit For
             If WorksheetFunction.CountIf(.UsedRange.Rows(1), aDates(i)) = 0 Then
                 n = .UsedRange.Columns.Count
                 .Columns(n).Insert
                 .Cells(1, n) = aDates(i)
             End If
         Next
     End With
End Sub
[/vba]
Без скрытых листов, доп. ячеек и прочих "хитростей".

Автор - KSV
Дата добавления - 13.08.2015 в 17:37
Новичёк Дата: Среда, 19.08.2015, 13:33 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 2 ±
Замечаний: 0% ±

KSV, спасибо, но попробовал прописать ещё пару дат, открываются всё равно только две.
К сообщению приложен файл: 4598270.xls (38.0 Kb)
 
Ответить
СообщениеKSV, спасибо, но попробовал прописать ещё пару дат, открываются всё равно только две.

Автор - Новичёк
Дата добавления - 19.08.2015 в 13:33
KSV Дата: Среда, 19.08.2015, 17:40 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Естественно! Ваша следующая дата должна добавиться только послезавтра :)
т.к.
надо вставлять не один столбец, а после каждой следующей даты


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеЕстественно! Ваша следующая дата должна добавиться только послезавтра :)
т.к.
надо вставлять не один столбец, а после каждой следующей даты

Автор - KSV
Дата добавления - 19.08.2015 в 17:40
Новичёк Дата: Среда, 19.08.2015, 18:51 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 2 ±
Замечаний: 0% ±

KSV, мои извинения. Действительно ещё не дожили до того радостного момента. :D
А по примеру огромное спасибо, работает как и хотелось.
И маленький вопрос вдогонку: Что надо вставить вместо aDates(i), что бы формат даты был либо месяц:год, либо просто год?
 
Ответить
СообщениеKSV, мои извинения. Действительно ещё не дожили до того радостного момента. :D
А по примеру огромное спасибо, работает как и хотелось.
И маленький вопрос вдогонку: Что надо вставить вместо aDates(i), что бы формат даты был либо месяц:год, либо просто год?

Автор - Новичёк
Дата добавления - 19.08.2015 в 18:51
KSV Дата: Среда, 19.08.2015, 20:30 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Не совсем понял, что вы имеете ввиду...
Если в первой ячейке нового, вставляемого, столбца должно быть только значение года (из наступившей даты), то вместо: [vba]
Код
.Cells(1, n) = aDates(i)
[/vba] напишите: [vba]
Код
.Cells(1, n) = Year(aDates(i))
[/vba], если какого-то другого года, то так: [vba]
Код
.Cells(1, n) = 2016
[/vba]
А если нужно просто отображать эту дату в формате ММ.ГГГГ, то перед или после вышеупомянутой строки добавьте еще одну: [vba]
Код
.Cells(1, n).NumberFormat = "mm/yyyy"
[/vba] или "mmm yyyy" - чтобы отображать "авг 2015", или "mmmm yyyy" - чтобы отображать "Август 2015", или "yyyy" - чтобы отображать только год, и т.д.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеНе совсем понял, что вы имеете ввиду...
Если в первой ячейке нового, вставляемого, столбца должно быть только значение года (из наступившей даты), то вместо: [vba]
Код
.Cells(1, n) = aDates(i)
[/vba] напишите: [vba]
Код
.Cells(1, n) = Year(aDates(i))
[/vba], если какого-то другого года, то так: [vba]
Код
.Cells(1, n) = 2016
[/vba]
А если нужно просто отображать эту дату в формате ММ.ГГГГ, то перед или после вышеупомянутой строки добавьте еще одну: [vba]
Код
.Cells(1, n).NumberFormat = "mm/yyyy"
[/vba] или "mmm yyyy" - чтобы отображать "авг 2015", или "mmmm yyyy" - чтобы отображать "Август 2015", или "yyyy" - чтобы отображать только год, и т.д.

Автор - KSV
Дата добавления - 19.08.2015 в 20:30
Новичёк Дата: Понедельник, 14.09.2015, 13:40 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 2 ±
Замечаний: 0% ±

Спасибо, KSV,
 
Ответить
СообщениеСпасибо, KSV,

Автор - Новичёк
Дата добавления - 14.09.2015 в 13:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическое добавление столбца (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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