Страницы: 1
RSS
использование функции Find в коде VBA
 
Уважаемые гуру форума. Укажите, где я сделал ошибку. Ситуация такая: на листе «смета» в указанном диапазоне должен вызываться InputBox, в тексте которого должна содержаться информация с соседнего листа. Пытаюсь этого добиться я так:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range(Cells(11, 5), Cells(15, 6))) Is Nothing Then
        Dim k As Long
        If Cells(10, ActiveCell.Column) > 0 Then
                Set r = Sheets("Остатки").Range("B2:B20").Find(Cells(10, ActiveCell.Column) & "/" & Format(Cells(6, ActiveCell.Column), "0.00"))
            If Not r Is Nothing Then k = r.Offset(, 5).Value
            InputBox ("Сколько?" & vbCrLf & "Остаток" & vbCrLf & Cells(10, ActiveCell.Column) & vbCrLf & "сейчас " & k)
        Else
            MsgBox "Сначала укажите товар!"
        End If
    End If
End Sub
Но сейчас InputBox выдает значение k = 0 и я никак не могу понять, где я допустил ошибку. В прилагаемом примере, для яблок правильный ответ должен быть = 12, для огурца = 13. Данные для поиска на листе «Остатки» будут именно в виде результата формулы СЦЕПИТЬ («товар/цена»), сделал так для уникальности позиций. Заранее спасибо всем откликнувшимся.
 
вы пишете
Цитата
Column) & "/" & Format
, а в таблице яблоки100,00.
 
Цитата
plex написал: где я допустил ошибку
на листе нет "/", в макросе есть
на листе - запятая, в макросе - точка.

вот так работает:
Код
Set r = Sheets("Остатки").Range("b2:b20").Find(Cells(10, ActiveCell.Column) & Replace(Format(Cells(6, ActiveCell.Column), "0.00"), ".", ","))


ну и для метода Find я бы советовал указывать дополнительные параметры.
иначе - те параметры, что вы не указали в коде явно, останутся такими, какими были при последнем поиске (ручном или другим макросом)
в том числе - "ячейка целиком", "учитывать регистр" и т.д.

в справке подробно описано.
Изменено: ikki - 10.07.2015 13:43:31
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
iki, вроде бы и замечания по коду понял и увидел, и суть Вашего кода и рекомендаций понял, и свой пример упростил,
Код
Set r = Sheets("Остатки").Range("B2:B20").Find(Cells(10, ActiveCell.Column) & Cells(6, ActiveCell.Column))
а все равно не работает (по-прежнему k = 0). Уважаемые гуру, пожалуйста, исправьте код в прилагаемом файле, а уж по образцу, я надеюсь сам смогу перенести код в рабочий файл (предполагается также проверка вводимого через InputBox числа на непревышение остатка)
 
открыл файл все работает.
 
Цитата
V написал: открыл файл все работает.
Уважаемый, V, у Вас работает появление InputBox (это-то и у меня работает) или в этом самом InputBox отображается правильный остаток по выбранному товару (если так, то тем более ничего не понимаю)?
 
Цитата
ikki написал: ну и для метода Find я бы советовал указывать дополнительные параметры.
Вот так работать будет.
Код
Set r = Sheets("Остатки").Range("B2:B20").Find(Cells(10, ActiveCell.Column) & _
Cells(6, ActiveCell.Column), , xlValues, xlWhole)
 
Спасибо большое, Doober, наконец-то заработало!
Страницы: 1
Читают тему
Наверх