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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 16:51   #1
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию Закрытая книга

Имеется функция, с помошью которой данные из одной книги качаются в другую. Function VLOOKUP2(Table As Range, SearchColumnNum As Integer, SearchValue As Variant, _
N As Integer, ResultColumnNum As Integer)
Dim i As Integer
Dim iCount As Integer

For i = 1 To Table.Rows.Count
If Table.Cells(i, SearchColumnNum) = SearchValue Then
iCount = iCount + 1
End If
If iCount = N Then
VLOOKUP2 = Table.Cells(i - 2, ResultColumnNum)
Exit For
End If
Next i
End Function

Проблема в том, что если исходная книга закрыта, то вместо данных, вычесленных по этой функции появляется ошибка #NAME или #VALUE...
Belokuraya вне форума Ответить с цитированием
Старый 30.07.2009, 17:03   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Попробуйте так
Код:
Function VLOOKUP2(Table As Variant, SearchColumnNum As Integer, SearchValue As Variant, _
                N As Integer, ResultColumnNum As Integer)
    Dim i As Integer
    Dim iCount As Integer

    Select Case TypeName(Table)
    Case "Range"
        For i = 1 To Table.Rows.Count
            If Table.Cells(i, SearchColumnNum) = SearchValue Then
                iCount = iCount + 1
            End If
            If iCount = N Then
                VLOOKUP2 = Table.Cells(i - 2, ResultColumnNum)
                Exit For
            End If
        Next i
    Case "Variant()"
        For i = 1 To UBound(Table)
            If Table(i, SearchColumnNum) = SearchValue Then
                iCount = iCount + 1
            End If
            If iCount = N Then
                VLOOKUP2 = Table(i - 2, ResultColumnNum)
                Exit For
            End If
        Next i
    End Select
End Function
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 30.07.2009 в 17:07.
The_Prist вне форума Ответить с цитированием
Старый 30.07.2009, 17:11   #3
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Если не секрет, почему здесь
Код:
Table(i - 2, ResultColumnNum)
i-2? ведь при таком раскладе вернет не указанный номер вхождения, а указанный минус 2.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 30.07.2009, 17:34   #4
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию

В этом-то вся суть использования такой функции, а не vlookup, чтобы выводить значение из ячейки на две выше найденной.
Попробую ваш код, спасибо, завтра результат скажу=)
Belokuraya вне форума Ответить с цитированием
Старый 31.07.2009, 14:59   #5
Belokuraya
Пользователь
 
Регистрация: 27.04.2009
Сообщений: 41
По умолчанию

Спасибо огромное, всё работает=)
Belokuraya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос и книга GES Microsoft Office Excel 0 29.07.2009 17:32
Книга по Delphi ViNcHeStEr Свободное общение 2 28.04.2009 16:20
Книга по С# Arhe Общие вопросы C/C++ 3 02.10.2008 22:06
Адресная книга Snake_ua PHP 6 26.02.2008 09:40