Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 23:11   #1
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию исправте код

У меня есть код:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)   
Dim vVal   
Dim StrVal As String   
Dim dDate As Date   
  
    If Target.Cells.Count > 1 Then Exit Sub   
    If Not Intersect(Target, Range("A2:A10")) Is Nothing Then   
        With Target   
        StrVal = Format(.Text, "000000")   
        If IsNumeric(StrVal) And Len(StrVal) = 6 Then   
            Application.EnableEvents = False   
            dDate = DateValue(Left(StrVal, 2) & "/" & Mid(StrVal, 3, 2) & "/" & Right(StrVal, 2))   
            .NumberFormat = "dd/mm/yyyy"   
            .Value = CDate(DateSerial(Year(dDate), Month(dDate), Day(dDate)))   
           End If   
        End With   
   End If  
Application.EnableEvents = True   
 
End Sub
При его использование у меня возникают некоторые проблемы: 1. В случае неправильного формата введенных данных (5809 вместо 050809) срабатывает ошибка и останавливается выполнения макроса, нужно чтобы вслучае неверного ввода данных срабатывал какой нибуть обработчик ошибок и не преривалась работа макроса. 2. После срабатывания стандартного обработчика ошибок VBA после того как нажимаю END начинает неправильно выводить даты с этим тоже нужно както справится. Помогиите кто может!!!

Последний раз редактировалось Screame; 20.08.2009 в 23:14.
Screame вне форума Ответить с цитированием
Старый 21.08.2009, 00:15   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
Вопрос

Не понимаю,как должен был работать код при пустом значении

Код:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim StrVal, sl As String
Dim dDate As Date
   
  
   If Target.Cells.Count > 1 Then Exit Sub
 
   
    If Not Intersect(Target, Range("A2:A10")) Is Nothing Then
        With Target
      
    StrVal = Target.Cells.Value
 
        If IsNumeric(StrVal) And Len(StrVal) = 6 Then

Application.EnableEvents = False

       sl = Left(StrVal, 2) & "." & Mid(StrVal, 3, 2) & "." & "20" & Right(StrVal, 2)
            On Error GoTo 10
            dDate = DateValue(sl)
       
            .Value = CDate(DateSerial(Year(dDate), Month(dDate), Day(dDate)))
            .NumberFormat = "dd/mm/yyyy"
            
       
           Else
           
          GoTo 10
               End If
           
        End With
   End If
 GoTo 20
10

Target.Cells.Value = ""
20
Application.EnableEvents = True
End Sub
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 21.08.2009 в 00:56.
doober вне форума Ответить с цитированием
Старый 21.08.2009, 09:44   #3
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

doober, Ваш код у меня вообще неработает, оставляет либо пустую ячейку, либо вводит совсем другую дату, а не ту что ввел. Помогите кто может!!!!!!!!!!
Screame вне форума Ответить с цитированием
Старый 21.08.2009, 10:29   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Работает нормально,посмотри ролик.
Вложения
Тип файла: rar Ролик.rar (218.6 Кб, 16 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 21.08.2009, 10:50   #5
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

теперь я вижу что не так посмотрите на пример!!!
Вложения
Тип файла: zip Код.zip (7.7 Кб, 11 просмотров)
Screame вне форума Ответить с цитированием
Старый 21.08.2009, 11:10   #6
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Кажись так.
Код:
Private Sub Worksheet_Change(ByVal Target As Range)   
Dim vVal   
Dim StrVal As String   
Dim dDate As Date   
  
    If Target.Cells.Count > 1 Then Exit Sub   
    If Target = "" Then Exit Sub 
    If Not Intersect(Target, Range("A2:A10")) Is Nothing Then   
        With Target     
        If IsNumeric(Target) And Len(Target) = 6 Then   
            Application.EnableEvents = False   
            StrVal = Format(.Text, "000000") 
            dDate = DateValue(Left(StrVal, 2) & "/" & Mid(StrVal, 3, 2) & "/" & Right(StrVal, 2))   
            .NumberFormat = "dd/mm/yyyy"   
            .Value = CDate(DateSerial(Year(dDate), Month(dDate), Day(dDate)))   
           End If   
        End With   
   Else
        msgbox "Введенные данные должны быть числом и содержать только 6 символов!",vbcritical,"Ошибка ввода"
        Application.EnableEvents = False 
        Target = ""
   End If  
Application.EnableEvents = True   
 
End Sub
а по второму вопросу, просто необходимо заново включить отслеживание событий
Код:
Application.EnableEvents = True
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 21.08.2009 в 11:13.
The_Prist вне форума Ответить с цитированием
Старый 21.08.2009, 11:44   #7
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

The_Prist сжальтесь надо мной, тоже самое, если я ввожу например 05.08.09 получается 50809, хотя должно получится 05.08.2009, дата необязательно должна начинатся с 05 также могут быть и другие числа например 06, 07, 08, и т.д.
Screame вне форума Ответить с цитированием
Старый 21.08.2009, 11:57   #8
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Вы напишите какие комбинации будут вводится. А то Вы пишите
Цитата:
"ввожу 05.08.09 и получается 50809"
код это не обработает.
Вы с точками вводите? Для чего Вы планируете использовать код? Переводить введенные без точек числа в даты?
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 21.08.2009, 12:06   #9
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

да хотелось както чтоб по проще даты было вводить набрал число и вот тебе дата, так намного проще чем вводить каждый раз 12/08/09, особенно с ноута, когда пальцы привыкли к обыкновенной клаве!
Screame вне форума Ответить с цитированием
Старый 21.08.2009, 12:21   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Исправил,теперь работает правильно
Вложения
Тип файла: rar Код.rar (7.8 Кб, 16 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправте ошибки Roman Общие вопросы .NET 4 15.06.2009 17:51
исправте чуток задачку Настенька..Блонди Помощь студентам 1 12.05.2009 13:26
Исправте ошибки в проге для Делфи! Toxass Общие вопросы Delphi 2 17.12.2008 02:01
исправте задачу Екатерина А. Паскаль, Turbo Pascal, PascalABC.NET 10 09.12.2008 22:48
Исправте ошибку(оператор case и if) neomaximus Помощь студентам 9 29.11.2008 11:36