Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Как поступить при сообщении об ошибке Добавлено: 26.02.10 13:38  

Автор вопроса:  oleg
Добрый день. Данный макрос блокирует в таблице данные, по принципу сравнения столбцов с текущей датой. У меня возникла проблема: нужно установить "перекресток" если (if) в таблице нет аналога текущей даты, то закрыть книгу и выдыть MsgBox, иначе (else) дальше продолжается процедура с блокировками ячеек. Вроде задача из разряда детсадика, а что-то затупил на полнуюю.
Спасибо за помощь.




Sub BlockEarlierDates(theSheetName As String, theRow As String)
  Dim todayColumn As Integer 'номер колонки с сегодняшней датой
  Dim theSheet As Worksheet 'рабочий лист
  'запоминаем рабочий лист
   Set theSheet = ThisWorkbook.Worksheets(theSheetName)
  'вычисляем колонку с сегодняшней датой, MATCH(TODAY()-1 это на день меньше текущей даты, если плюс больше
  todayColumn = CInt(Application.Evaluate("MATCH(TODAY()-1, " & theSheet.Name & "!" & theRow & ", 0)"))
  Debug.Print todayColumn
  'разблокируем лист
  theSheet.Unprotect
  'блокируем предыдущие даты
  Range(theSheet.Cells(1, 1), theSheet.Cells(ROWS_AMOUNT, todayColumn - 1)).Locked = True
  'разблокируем сегодняшнюю и последующие даты
  Range(theSheet.Cells(1, todayColumn), theSheet.Cells(ROWS_AMOUNT, COLUMNS_AMOUNT)).Locked = False
  'блокируем лист
  theSheet.Protect

End Sub

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #1 Добавлено: 26.02.10 14:38
  1. ...
  2.   todayColumn=-1
  3.   todayColumn = CInt(Application.Evaluate("MATCH(TODAY()-1, " & theSheet.Name & "!" & theRow & ", 0)"))
  4.   Debug.Print todayColumn
  5.   
  6.   If todayColumn<>-1 then
  7.     'разблокируем лист
  8.     theSheet.Unprotect
  9.     'блокируем предыдущие даты
  10.     Range(theSheet.Cells(1, 1), theSheet.Cells(ROWS_AMOUNT, todayColumn - 1)).Locked = True
  11.     'разблокируем сегодняшнюю и последующие даты
  12.     Range(theSheet.Cells(1, todayColumn), theSheet.Cells(ROWS_AMOUNT, COLUMNS_AMOUNT)).Locked = False
  13.  
  14.     'блокируем лист
  15.     theSheet.Protect
  16.  
  17.   Else
  18.     MsgBox "Текущая дата не найдена"
  19.     ThisWorkbook.Close SaveChanges:=False
  20.   End If
  21.   ...



Вот что-то такое наверно ?

Ответить

Номер ответа: 2
Автор ответа:
 oleg



Вопросов: 12
Ответов: 23
 Профиль | | #2 Добавлено: 26.02.10 14:59
Спасибо большое, одну вещь поправил: todayColumn=-1 после того, как запомнили лист, тогда все работает.
Еще раз спасибо, а то в такие дебри лез.

Ответить

Номер ответа: 3
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #3 Добавлено: 26.02.10 15:03
Пожалуйста.
Истина где-то рядом. :-) Бывает...Запрограммировался :-)

Ответить

Номер ответа: 4
Автор ответа:
 oleg



Вопросов: 12
Ответов: 23
 Профиль | | #4 Добавлено: 26.02.10 15:14
Чет я поторопился, проверял на отключенных макросах. Теперь при любых датах вылетает "дата не найдена". В чем засада? Еще раз help.

Ответить

Номер ответа: 5
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #5 Добавлено: 27.02.10 08:28
А что у тебя выдает
  1. todayColumn = CInt(Application.Evaluate("MATCH(TODAY()-1, " & theSheet.Name & "!" & theRow & ", 0)"))
при нахождении и ненахождении нужной колонки ?
Там принцип был, что сначала заведомо не найдено. А после MATCH что-то может быть найдено.Похоже поторопилась немного. Попробуй вот так поправить:
  1. ...
  2. todayColumn=iif(CInt(Application.Evaluate("MATCH(TODAY()-1, " & theSheet.Name & "!" & theRow & ", 0)"))>0, CInt(Application.Evaluate("MATCH(TODAY()-1, " & theSheet.Name & "!" & theRow & ", 0)")),-1)
  3. Debug.Print todayColumn

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам