Набор даты в Excel

Программирование на Visual Basic for Applications
jojo
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 19.07.2004 (Пн) 11:18

Набор даты в Excel

Сообщение jojo » 29.07.2005 (Пт) 9:57

Нужно сделать макрос чтобы при вколачивании 8 знаков или 6 цифра преоразовалась к формату даты с разделителями . или - как в 1С бухгалтерии.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.07.2005 (Пт) 11:14

Код: Выделить всё
private sub worksheet_change(byval tagret as excel.range)
  static dont as boolean
 
  if not dont then
    if isnumeric(target.value) then
      select case len(target.value)
      case 8
        dont=true
        target.value=dateserial(cint(right$(target.value,4)), cint(mid$(target.value,3,2)), cint(left$(target.value,2)))
        dont=false
      case 6
        dont=true
        target.value=dateserial(cint(right$(target.value,2)), cint(mid$(target.value,3,2)), cint(left$(target.value,2)))
        dont=false
      end select
    end if
  end if
end sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

jojo
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 19.07.2004 (Пн) 11:18

Сообщение jojo » 29.07.2005 (Пт) 11:30

работает :)
и если у меня не один столбец с датами а несколько
и еще столбцы не смежные
в других столбцах не нужно меять формат !
как тогда?

jojo
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 19.07.2004 (Пн) 11:18

Сообщение jojo » 29.07.2005 (Пт) 11:34

У меня счас вариант ...он меняет формат везде где попало ..
мне нужно только в конкретных столбцах !!!

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim s As String
Dim Separator

Separator = "."
Target.Cells(1, 1).NumberFormat = "General"
'If Target.Left = NeedColumn Then
If Len(Target.Cells(1, 1)) = 8 Then
s = Target.Cells(1, 1)
Target.Cells(1, 1) = Mid(s, 1, 2) + Separator + Mid(s, 3, 2) + Separator + Mid(s, 5, 4)
Target.Cells(1, 1).NumberFormat = "m/d/yyyy"
End If
'End If
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.07.2005 (Пт) 11:41

Код: Выделить всё
private sub worksheet_change(byval tagret as excel.range)
  static dont as boolean
 
  if not dont then
    select case target.column
    case 1,2,3
      if isnumeric(target.value) then
        select case len(target.value)
        case 8
          dont=true
          target.value=dateserial(cint(right$(target.value,4)), cint(mid$(target.value,3,2)), cint(left$(target.value,2)))
          dont=false
        case 6
          dont=true
          target.value=dateserial(cint(right$(target.value,2)), cint(mid$(target.value,3,2)), cint(left$(target.value,2)))
          dont=false
        end select
      end if
    end select
  end if
end sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

jojo
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 19.07.2004 (Пн) 11:18

Сообщение jojo » 29.07.2005 (Пт) 13:35

доделал напильником получилось круто спасибо большое


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

    TopList