Страницы: 1
RSS
Excel 2007. Трабла с циклом.
 
Во вложении файлик с одним макросом  
В цикле пробегаю по ячейкам A4:A1952 и ищу совпадение с ячейкой A2, дабы потом выполнить определенные действия.  
В excel 2003 эта конструкция нормально работала, а в 2007 совпадений не находит.  
 
Помогите найти где беда, плиз.
 
У меня всё находит - excel 2007  
(для этого кода версия excel не важна)  
 
Public Sub AddRowToDB_Click()  
   Dim c As Range, firstAddress As Variant  
   'ищем нужную дату  
   For Each c In Worksheets("Лист1").Range("A4:A1952")  
       If c.Value = Worksheets("Лист1").Range("A2").Value Then  
           firstAddress = c.Address  
           Exit For  
       End If  
   Next  
   MsgBox firstAddress  
End Sub  
 
выдаёт результат $A$199  
 
 
вот более простой способ:  
 
Sub AddRowToDB_2_Click()  
   On Error Resume Next  
   firstAddress = Range("A4:A1952").Find([a2]).Address 'ищем нужную дату
   MsgBox firstAddress  
End Sub
 
нашел у себя где беда.  
Если в ячейке А2 стоит просто дата в формате дд.мм.гггг, то все ОК  
но если в ячейке А2 стоит линк на другую ячейку, в которой дата и время в формате дд.мм.гггг чч:мм:сс, то макрос уже не работает (((  
как тут быть? как я понимаю именно в форматах и беда...
 
ну, батенька развеж, 15.03.2010 равно 15.03.2010 07:00 ?  
забыли как ексель работает с датами?)  
 
 
Public Sub AddRowToDB_Click()  
Dim c As Range, firstAddress As Variant  
   'ищем нужную дату  
               For Each c In Worksheets("Лист1").Range("A198:A1952")  
                   If Round(c.Value, 0) = Round(Worksheets("Лист1").Range("A2").Value, 0) Then  
                       firstAddress = c.Address  
                       MsgBox firstAddress  
                       Exit For  
                   End If  
               Next  
End Sub
 
Public Sub AddRowToDB_Click()  
Dim c As Range, firstAddress As Variant  
   'ищем нужную дату  
               For Each c In Worksheets("Лист1").Range("A198:A1952")  
                   If Format(c.Value, "DD.MM.YY") = Format(Worksheets("Лист1").Range("A2").Value, "DD.MM.YY") Then  
                       firstAddress = c.Address  
                       MsgBox firstAddress  
                       Exit For  
                   End If  
               Next  
End Sub  
 
либо так) что вообщем одно и то же только в профиль
 
Dophin, спасибо!  
Заработало...
 
второй даже лучше - не будет косяков с неверным окргулением.  
 
А вообще чего find ом не пользуетесь? намного ж быстрее
 
{quote}{login=Dophin}{date=07.04.2010 05:25}{thema=}{post}второй даже лучше - не будет косяков с неверным окргулением.  
 
А вообще чего find ом не пользуетесь? намного ж быстрее{/post}{/quote}  
меня вполне устраивает текущая скорость.  
Выборка данных из 176 баз данных Access существенно дольше происходит )
Страницы: 1
Читают тему
Наверх