powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
14 сообщений из 14, страница 1 из 1
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37244379
rubberman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Есть перечень текстовых значений:
Код: plaintext
1.
2.
3.
4.
5.
6.
-128360150
-055454152354
543213541
8732216841
5416884321
-45378498
...
Это серийные номера диска С, собранные с разных компов для привязки файла и значений этих много.

На ум ничего не приходит кроме как разделить их с помощью OR:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub Run()
    If Drive_C_SerialNumber = "-128360150" Or Drive_C_SerialNumber = "8732216841" Then ' и т.д. по всему списку
    MsgBox "Значение найдено"
    Else: MsgBox "Нет значения"
    End If
End Sub

Function Drive_C_SerialNumber() As String
    Drive_C_SerialNumber = CreateObject("scripting.filesystemobject").GetDrive("c:\").SerialNumber
End Function
но это бред полный. Помогите программно прописать, что если значение найденное функцией Drive_C_SerialNumber полностью совпало с одним из значений списка, то TRUE, иначе FALSE.

Значения могу хранить на листе, но лучше бы в проекте VBA, можно даже внутри модуля Run().

Помогите пожалуйста!

Спасибо.
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37244393
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rubberman,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    If Drive_C_SerialNumber = "-128360150" Then
    MsgBox "Значение найдено"
    ElseIf Drive_C_SerialNumber = "-128360150" Then
    MsgBox "Значение найдено"
     ................
     и т. д.
    Else: MsgBox "Нет значения"
    End If

Можно и еще по изящней, но я понял, что это не критично
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37244468
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну скажем...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SerialNumbers( 0 ) = " "
SerialNumbers( 1 ) = "-128360150"
SerialNumbers( 2 ) = "-055454152354"
'...
SerialNumbers(N- 1 ) = "56432181"
SerialNumbers(N) = " "

'...

If Instr(Join(SerialNumbers, " "), " " & Drive_C_SerialNumber & " ") >  0  Then ...
Можно убрать их в коллекцию (сериал - ключ) и делать выборку из коллекции, обрабатывая ошибку отсутствия.
Да вариантов - миллион...
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37244594
rubberman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,

Спасибо. Только вот значений под сотню.

Akina,

Спасибо. Заработало.
Еще интересно, как реализовать это с помощью коллекции. Можете помочь?
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37244619
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rubberman...
Еще интересно, как реализовать это с помощью коллекции. Можете помочь?
лучше (красивше) - Scripting.Dictionary
http://msdn.microsoft.com/en-us/library/x4k5wbx4

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim d   ' Create a variable.
Set d = CreateObject("Scripting.Dictionary")
d.Add "-128360150"   ' Add some keys and items.
d.Add "-055454152354"
d.Add ...
' ...
If d.Exists(Drive_C_SerialNumber) Then
' ...

зы
буквально вот на прошлой недели "разбился" вот с такой проверкой
rubberman
Код: plaintext
1.
2.
3.
Function Drive_C_SerialNumber() As String
    Drive_C_SerialNumber = CreateObject("scripting.filesystemobject").GetDrive("c:\").SerialNumber
End Function

у человека тупо небыло диска С !
были Д и Е (системный !!! )

так что рекомендую
Код: plaintext
1.
  Set fso = CreateObject("Scripting.FileSystemObject") 'New FileSystemObject
  Result = fso.Drives(fso.GetDriveName(Environ("windir"))).SerialNumber
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37244623
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и с массивом, тоже вариант вполне так ничего
Код: plaintext
1.
2.
3.
4.
5.
6.
  Dim V, V1
  V = Array("1", "2", "3")
  V1 = Filter(V, "1")
  Debug.Print UBound(V1)
  V1 = Filter(V, "0")
  Debug.Print UBound(V1)
Код: plaintext
1.
  0  
- 1  
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37244641
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Спасибо. Только вот значений под сотню.

я и не трицал, что есть много способов, а какакя разница сколько значений, всё равно их все записывать нужно или в других вариантах не нужно?, эту то строку MsgBox "Значение найдено"
100 раз писать не надо
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37244770
NullUzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как-то так.
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37245955
rubberman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

Спасибо. Отлично. С все массивом получилось на ура, только с:qwerty112Set d = CreateObject("Scripting.Dictionary")
d.Add "-128360150" ' Add some keys and items.
d.Add "-055454152354"
d.Add ...получилось, что при использовании словаря ему нужны 2 значения, причем поиск выполняется по первому.
Заработало так:
Код: plaintext
1.
2.
3.
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "-1998291944", "a" ' user1
    d.Add "-128360150", "b" ' user2
    d.Add ...
И ООООгромнейший СЭНКС за Environ("windir") - взял в оборот!
Кстати, по привязке ведь можно использовать серийник BIOS-а, ProcessorsID, MAC addresses. Собрать то их я собрал, но значений чаще всего бывает несколько и функция добавляет дополнительно пустую строку, даром не нужную. Вот, к примеру, коллекция MAC addresses:
Код: plaintext
1.
2.
3.
4.
5.
00:50:56:C0:00:01
00:26:18:F1:36:B7
00:50:56:C0:00:08
00:FF:F1:9B:A6:B8

... собранная функцией от EducatedFool:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Function Get_All_MAC_Addresses() As Collection
    Set Get_All_MAC_Addresses = New Collection: On Error Resume Next
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colAdapters = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

    For Each objAdapter In colAdapters
        If Not IsNull(objAdapter.IPAddress) Then
            For i =  0  To UBound(objAdapter.IPAddress)
                Get_All_MAC_Addresses.Add objAdapter.MacAddress(i), objAdapter.MacAddress(i)
            Next
        End If
    Next
End Function

Function test_Get_All_MAC_Addresses() As String
    For Each i In Get_All_MAC_Addresses
    i = Trim(i)
    txt4 = txt4 & i & vbNewLine
    Next
    test_Get_All_MAC_Addresses = txt4
End Function
Знает кто-нибудь, как эти адреса использовать для привязки файла? И в те ли дебри я ползу?
Сегодня, к примеру, собрал инфу с ещё 3 компов. Результат: У всех одинаковые серийники Диска С, одинаковые ProcessorsID, только MAC addresses и Comp/Host name разные. Что за мистика не понял. Причем файл, который собирает значения не сохраняется и значения от предыдущего пользователя висеть не должны.

Основной вопрос: "Как и к какой железяке привязаться, да покрепче?" )))))

NullUzer,
Спасибо. Супер. Как я понял - ищет по неразрывному диапазону. Отличная штука.

Ципихович Эндрю,
В самообучательных целях интересно узнать, как обработать массу значений с помощью циклов и массивов.

!!! ВСЕМ, ВСЕМ, ВСЕМ, КТО ОТКЛИКНУЛСЯ, ОГРОМНОЕ СПАСИБО !!!
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37245982
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rubberman,
>В самообучательных целях интересно узнать, как обработать массу значений с помощью циклов и массивов.
Оба-на, интересно, а почему именно ко мне обратились?
Поясняю, циклов и массивов? неа палец устаёт, иначе мазилка, линейка и книга по ВБА
Я юзаю Ворд, всё через Вариаблес, вещь!
и через то где есть Екстиз-Существовать
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37245985
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно моё сообщение
"эту то строку MsgBox "Значение найдено" 100 раз писать не надо"
поняли как это делается???
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37246057
rubberman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,

Ципихович Эндрю"эту то строку MsgBox "Значение найдено" 100 раз писать не надо"
поняли как это делается??? Понял :))

Ципихович Эндрюмазилка, линейка и книга по ВБА Этим и обучаюсь :))
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37246209
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Public Function inlist(s As Variant, ParamArray spisok() As Variant) As Boolean
inlist = False
 For Each elem In spisok
      If elem = s Then
         inlist = True
         Exit For
      End If
 Next
End Function

Применение:
Код: plaintext
1.
2.
if inlist(моя_переменная,значение1,значение2,значение3,.....,значениеN) then
       инструкции
end if

Перевел на VBA из FoxPro
...
Рейтинг: 0 / 0
Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
    #37246329
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112
Код: plaintext
1.
  Set fso = CreateObject("Scripting.FileSystemObject") 'New FileSystemObject
  Result = fso.Drives(fso.GetDriveName(Environ("windir"))).SerialNumber

Гм... мало ли кто и что в среде напашет - тем более что переменная-то не сказать что критичная для работы самОй системы.
Немного надёжнее что-нить типа
Код: plaintext
1.
set WshShell = WScript.CreateObject("WScript.Shell")
strSystemDrive = Left(WshShell.SpecialFolders("Fonts"),  3 )
а ещё лучше за API подёргать либо в реестре покопаться...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помоготе, плиз!!! Если значение присутствует в списке то TRUE, иначе FALSE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]