макрос для автоматической подстановка даты при вводе числа в строку

Автор andrei915, 09.03.2012, 22:17

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

andrei915

подробнее во вложенном файле.
частично я решил вопрос, но не до конца.
помогите пожалуйста.

Wasilic

Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

andrei915

Да, Василичь, похоже что именно так мне и нужно было.
Спасибо!
Сразу видно мастер экселя и к тому же оперативно.
Буду дальше разбираться.

Wasilic

Цитата: andrei915 от 10.03.2012, 00:03
Буду дальше разбираться.
Разбирайтесь. И код сократите до:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Cells.Count > 1 Then Exit Sub
  Application.EnableEvents = False
  If Not Application.Intersect(Range("C10:T10"), Target) Is Nothing Then
    If Cells(9, Target.Column) = 0 And Cells(10, Target.Column) > 0 Then Cells(9, Target.Column) = Date
  End If
  If Not Application.Intersect(Range("C12:T12"), Target) Is Nothing Then
    If Target > 0 Then Cells(11, 1) = Date
  End If
  Application.EnableEvents = True
End Sub
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

andrei915

При сокращении перестала обновляться ячейка т.е. при вводе значения в ячейке отображается ##### надо растягивать колонку.
как это исправить?

kuklp

  If Not Application.Intersect(Range("C10:T10"), Target) Is Nothing Then
    If Cells(9, Target.Column) = 0 And Cells(10, Target.Column) > 0 Then Cells(9, Target.Column) = Date: Target.EntireColumn.AutoFit
  End If

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

andrei915

Теперь при вводе отрицательного числа обновление не происходит.
и в excel 2007 с поддержкой макросов этот код почему-то не работает, а тот который в моем примере и отредактированный василичем тот работает.
в чем причина?

Wasilic

Цитата: andrei915 от 16.03.2012, 14:09
при вводе отрицательного числа обновление не происходит.
В макросе идет проверка на ввод > 0, всего то и нужно заменить на  <> 0
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Cells.Count > 1 Then Exit Sub
 Application.EnableEvents = False
 If Not Application.Intersect(Range("C10:T10"), Target) Is Nothing Then
   If Cells(9, Target.Column) = 0 And Cells(10, Target.Column) <> 0 Then Cells(9, Target.Column) = Date
 End If
 If Not Application.Intersect(Range("C12:T12"), Target) Is Nothing Then
   If Target <> 0 Then Cells(11, 1) = Date
 End If
 Application.EnableEvents = True
End Sub

Цитироватьэтот код почему-то не работает,
Какой этот?  Если тот что выложил KuklP, то этот код часть моей процедуры, в которой он дописал автоматическое увеличение ширины колонки. И етс-но, вне процедуры этот код работать не будет.
А ширину колонки один раз можно и ручками выставить!
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

andrei915

  If Not Application.Intersect(Range("C10:T10"), Target) Is Nothing Then

("C10:T10") - ограничивает до 20 колонки (Т)
исправил на ("10:10") всё заработало!
вот что получилось в итоге :
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Cells.Count > 1 Then Exit Sub
  Application.EnableEvents = False
  If Not Application.Intersect(Range("10:10"), Target) Is Nothing Then
    If Cells(9, Target.Column) = 0 And Cells(10, Target.Column) <> 0 Then Cells(9, Target.Column) = Date: Target.EntireColumn.AutoFit
  End If
  If Not Application.Intersect(Range("12:12"), Target) Is Nothing Then
    If Target > 0 Then Cells(11, 1) = Date: Target.EntireColumn.AutoFit
  End If
  Application.EnableEvents = True
End Sub

всем спасибо!
все ответы пригодились

Wasilic

Цитата: andrei915 от 17.03.2012, 14:57
("C10:T10") - ограничивает до 20 колонки (Т)
исправил на ("10:10") всё заработало!
И теперь по всей 9-й строке, где надо и где не  надо будет выбрасывать дату.  :) Хозяин барин!
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

andrei915

Цитата: Wasilic от 17.03.2012, 15:03
Цитата: andrei915 от 17.03.2012, 14:57
("C10:T10") - ограничивает до 20 колонки (Т)
исправил на ("10:10") всё заработало!
И теперь по всей 9-й строке, где надо и где не  надо будет выбрасывать дату.  :) Хозяин барин!


а на 9 строке кроме дат ничего и нету
в идеале конечно надо  от 7-й колонки 9-й строки до ограничения самого экселя т. е. чтоб до 7-й колонки макрос не работал а от 7-й работал.
не подскажете как это прописать?

Wasilic

Цитата: andrei915 от 17.03.2012, 15:31
в идеале конечно надо  от 7-й колонки 9-й строки до ограничения самого экселя т. е. чтоб до 7-й колонки макрос не работал а от 7-й работал.
не подскажете как это прописать?
Ну 7-я колонка это G, а последняя IV. Так и введите
If Not Application.Intersect(Range("G10:IV10"), Target) Is Nothing Then
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

andrei915

Цитата: Wasilic от 17.03.2012, 22:47
Цитата: andrei915 от 17.03.2012, 15:31
в идеале конечно надо  от 7-й колонки 9-й строки до ограничения самого экселя т. е. чтоб до 7-й колонки макрос не работал а от 7-й работал.
не подскажете как это прописать?
Ну 7-я колонка это G, а последняя IV. Так и введите
If Not Application.Intersect(Range("G10:IV10"), Target) Is Nothing Then

уже разобрался - так и сделал, только последняя колонка у меня (16384) это XFD10
всем спасибо!