Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Перерасчёт всего диапазона, 3 ощибки в коде ВБА
 
Помогите пожалуйста. Свои ошибки вижу, но связи со скудоумием, ничего переделать не могу.
В этом куске. Вторая строчка - Взят для расчёта весь диапазон
(Cells(3, 13), Cells(RS, 13)). И всё пересчитывается после каждого клика, по новой.
Как только я ввожу ещё одно условие -
'And i.Offset(0, 1).Value = "". Всё перестаёт работать.

Вторая ошибка- Поиск проводится только по ячейке С2. Не нравится мне X = Range("AS2:AS63").Find(Range(Cells(1 + s, 3)).Value).Row
Так наверное не пишется Find(Range(Cells(.   Если Find(Range( " ")- то работает.
И третья. - Если Y = Range("AV1:CO1").Find(Range("I2").Value).Column. - такого столбца не существует ,то как отключить ошибку?
Спасибо.
Код
RS = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
  For Each i In Range(Cells(3, 13), Cells(RS, 13))
  If i.Value <> "" Then k = k + 1
  'And i.Offset(0, 1).Value = ""
 
   A = Cells(2, 10).Value
 Cells(k + 2, 14).Value = Cells(k + 2, 13).Value * A
  Next i
MsgBox "Не пустых ячеек " & k
Select Case Worksheets(4).Range("B2").Value
  Case Is = "ТП"
 'For s = 0 To 15
      'If Worksheets(4).Cells(2 + s, 3).Value <> "" Then s = s + 1
      
        ' X = Range("AS2:AS63").Find(Range(Cells(1 + s, 3)).Value).Row
        'IsError(ПоискРабот1) Then
        X = Range("AS2:AS63").Find(Range("C2").Value).Row
         Y = Range("AV1:CO1").Find(Range("I2").Value).Column
   
         Range(Cells(X, Y + 1), Cells(X, Y + 4)).Copy
          RS1 = Cells(Rows.Count, 14).End(xlUp).Row + 1

          Cells(RS1, 10).PasteSpecial Paste:=xlPasteValues

           Cells(RS1, 14).Value = A * Cells(RS1, 13).Value
    
         'Next s
     End Select
   
  '  MsgBox (Range(Cells(RS1, 14)).Value)
 
 End Sub
 
Цитата
ASDpp написал: 'And i.Offset(0, 1).Value = "". Всё перестаёт работать.
А Вы что - в цикл это пихаете?
Цитата
Вторая ошибка-
Тут всё нормально. Просто если значение не найдено, то будет ошибка. Раз Вы не проверяете, нашлось ли значение, то всегда будет ошибка.
Цитата
И третья.
См. вторую ошибку.
There is no knowledge that is not power
 
По третьему - см. help:
Код
Visual Basic for Applications

With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
Ключевое If Not c Is Nothing Then
А файл не помог - ну очень лениво разбираться в том, что не работает вообще... Где там sheets(4)?
 
Цитата
Hugo написал:
По третьему - см. help:
А к чему этот велосипед, если автору нужно лишь найти первое значение?
There is no knowledge that is not power
 
Hugo
Пример с FindNext не очень удачный, т.к. значение 2 заменится на 5
и цикл не достигнет firstAddress
 
'And i.Offset(0, 1).Value = "". Всё перестаёт работать.
Да толкаю в цикл- нельзя ?

А со вторым случаем, а так ничего и не понял.

Полный файл сейчас выложу. Он у меня большой. Можно в архиве?
Код работает , только немного криво, и как паралитик, дергаясь.
Изменено: ASDpp - 13 Мар 2015 22:17:10 (замена файла)
 
Я написал что нужно понять и взять из хелпа - как обнаружить что ничего не нашлось.

По второй ошибке - "не нравится" это не ошибка :)

Если файл работает правильно - ну и пусть работает, объёмы небольшие, можно не вылизывать, особо "криминального" ничего нет.
Ошибки если вдруг не найдётся обработайте только. Если есть такая возможность.
Следующий код напишите лучше.
А чтоб не дёргалось - отключайте в начале application.screenupdating=false
Изменено: Hugo - 13 Мар 2015 22:06:55
 
Цитата
[USER=20]Kuzmic Hugo
Пример с FindNext не очень удачный, т.к. значение 2 заменится на 5
и цикл не достигнет firstAddress
Кузмич,это не мой пример.
Это Билловы люди писали. :)
Страницы: 1
Читают тему (гостей: 1)