powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Использование функции MATCH (ПОИСКПОЗ)?
11 сообщений из 11, страница 1 из 1
Использование функции MATCH (ПОИСКПОЗ)?
    #34085202
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знатоки подскажите можно ли обойти вывод сообщения об отсутствии в книге листа.
Проблема вот какая нужно узнать строку в которой находится искомый текст не открывая книгу MS Excel.
Вот код он работает, но есть проблемка если в книге на которую ссылается формула нет указанного листа Excel выдает сообщение "Выберите лист для обновления" и список листов в книге. Можно ли как-нибудь обрубить отображение этого сообщения?

//
Dim i As Integer
Application.DisplayAlerts = False
For i = 1 To 100
ActiveCell.FormulaR1C1 = "=MATCH(R3C1,[Книга3.xls]Лист4!C" & CStr(i) & ",0)"
Debug.Print ActiveCell.FormulaR1C1
Debug.Print ActiveCell.Value
If IsError(ActiveCell.Value) = False Then
ActiveCell.Value = ActiveCell.Value
Exit For
End If
Next i
Application.DisplayAlerts = True
//

Спасибо!
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085229
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть возможно узнать есть ли лист с нужным названием в книге не открывая ее?
Это бы помогло.
Очень не хочется открывать книгу поскольку искать приходится в разных файлах и их достаточно много. (

Спасибо!
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085290
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему "не открывая книгу" ?
Ведь доступ на чтение все-равно должен быть, а тогда можно ведь и открыть,
и только для чтения (если кем-то уже редактируется), и чтоб окно с книгой не
всплыло, и т.д...
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085344
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DomninskyВот код он работает...

1) Мне почему-то кажется, что этот код не может работать в принципе если не открывать файл Книга3.xls т.к. путь к нему не прописан.

3) На мой взгляд данная задача (целиком) больше для ADO, а может лучше и открыть файл и не писать по 100 раз значение в ячейку.

4) Узнать есть ли лист в закр. книге можно к примеру так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
'References:
'*********************************************
'"Microsoft ActiveX Data Objects 2.x Library"
'"Microsoft ADO Ext. 2.x for DDL and Security"
'*********************************************
Sub test2()
    Dim cn As ADODB.Connection, cat As ADOX.Catalog, tb As ADOX.Table
    Dim Path As String, wb As String, Sh As String, shExists As Boolean
    
    Path = "C:\temp\"
    wb = "Книга3.xls"
    Sh = "Лист4"
    
    Set cn = New ADODB.Connection
    cn.Open "Provider=MSDASQL.1;Data Source=Excel Files;" & "Initial Catalog=" & Path & wb
    Set cat = New ADOX.Catalog
    Set cat.ActiveConnection = cn

    For Each tb In cat.Tables
        If tb.Name = Sh & "$" Then
            shExists = True
            Exit For
        End If
    Next tb
    If shExists Then MsgBox "Sheet Exists." Else MsgBox "Sheet Doesn't Exist."
    
    Set cat = Nothing
    cn.Close
    Set cn = Nothing
End Sub

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085424
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да мне придется не одну книгу открывать и не по одному разу.
а в них еще к томк же на open повешена открытию формы. Она все время вылазит глаза мозолит даже если скывать окно Excel.

Поэтому и хотелось бы обойтись без открытия книги.
Может и поиск значения на листе в книге можно через ADO делать не открывая саму книгу ессно?
Если да то это бы вообще решило все проблемы )

P.S. На счет пути прав я про это знаю просто не стал загромождать код лишними путями, а так конечно надо весь путь прописывать.

Если есть идейки по поводу поиска значения подскажи...

Спасибо!
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085485
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DomninskyДа мне придется не одну книгу открывать и не по одному разу.
а в них еще к томк же на open повешена открытию формы. Она все время вылазит глаза мозолит даже если скывать окно Excel.
А ты убей событие Workbook_Open и перенеси весь код в отдельный модуль, в процедуру public Sub Auto_Open()
Тогда если книгу открывать вручную - макрос запустится. А если ее открывать из макроса - не запустится.

DomninskyПоэтому и хотелось бы обойтись без открытия книги.
Может и поиск значения на листе в книге можно через ADO делать не открывая саму книгу ессно?
Если да то это бы вообще решило все проблемы )Работая через ADO с листом Экселя ты работаешь как-будто с SQL сервером. Так что бери учебник по SQL и читай как там делается поиск (SELECT ... WHERE a=1 and b=3; и так далее)

Но вообще это все извращение. Лучше ставить нормальную базу данных и читать данные не из Экселевских книг, а из БД.
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085512
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Option Explicit
'References:
'*********************************************
'"Microsoft ActiveX Data Objects 2.x Library"
'*********************************************
Sub test()
    Dim cn As ADODB.Connection, rs As ADODB.Recordset
    Dim i As Long, strFile As String, strSQL As String
    Dim RCArray As Variant, Temp As Variant
    Dim SearchCell As Range, DestinationCell As Range
    
    strFile = "C:\Temp\Книга3.xls"
    strSQL = "SELECT * FROM [Лист4$A3:CV65536]"
    Set SearchCell = ActiveSheet.[A3]
    Set DestinationCell = ActiveCell
    
    Set cn = New ADODB.Connection
    On Error Resume Next
    cn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DriverId=790;" & _
        "ReadOnly=True;DBQ=" & strFile & ";"
    
    On Error GoTo  0 
    If cn Is Nothing Then
        MsgBox "Can't find the file!", vbExclamation, ThisWorkbook.Name
        Exit Sub
    End If
        
    Set rs = New ADODB.Recordset
    On Error Resume Next
    rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
    On Error GoTo  0 
    
    If rs Is Nothing Then
        cn.Close
        Set cn = Nothing
        Exit Sub
    End If
    
    RCArray = rs.GetRows
    
    With Application
        For i =  1  To UBound(RCArray,  2 )
            Temp = .Match(SearchCell, .Index(RCArray, , i),  0 )
            If Not IsError(Temp) Then
                DestinationCell = Temp
                Exit For
            End If
        Next i
    End With
    
    If rs.State = adStateOpen Then
        rs.Close
    End If
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

Не забудь сначала установить ссылку указанную в начале кода. Имей ввиду, что, в случае с Excel, ADO загружает данные каждого из полей только если хоть одна из первых восьми (8) строк этого поля содержит какое-либо значение.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085549
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)Имей ввиду, что, в случае с Excel, ADO загружает данные каждого из полей только если хоть одна из первых восьми (8) строк этого поля содержит какое-либо значение.Восьми? А не первых двух?
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085555
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Восьми? А не первых двух?

"Rows to Scan: Excel does not provide ADO with detailed schema information about the data it contains, as a relational database would. Therefore, the driver must scan through at least a few rows of the existing data in order to make an educated guess at the data type of each column. The default for "Rows to Scan" is eight (8) rows . You can specify an integer value from one (1) to sixteen (16) rows, or you can specify zero (0) to scan all existing rows. This is done by adding the optional MaxScanRows= setting to the connection string, or by changing the Rows to Scan setting in the DSN configuration dialog box.

However, due to a bug in the ODBC driver, specifying the Rows to Scan (MaxScanRows) setting currently has no effect. In other words, the Excel ODBC driver (MDAC 2.1 and later) always scans the first 8 rows in the specified data source in order to determine each column's datatype."

http://support.microsoft.com/kb/257819
http://support.microsoft.com/kb/189897/EN-US/

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085565
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА ты убей событие Workbook_Open и перенеси весь код в отдельный модуль, в процедуру public Sub Auto_Open()
Тогда если книгу открывать вручную - макрос запустится. А если ее открывать из макроса - не запустится.

Это убъет событие Workbook_Open:

Код: plaintext
1.
2.
3.
4.
Sub test1()
    Application.EnableEvents = False
    Workbooks.Open "c:\temp\Книга3.xls"
    Application.EnableEvents = True
End Sub

Начиная с XL2002 можно еще и так (убивает любой код VBA, а не только события), но я сторонник обратной совместимости как минимум до XL2000 (но лучше до XL97) :-)

Код: plaintext
1.
2.
3.
4.
Sub test2()
    Application.AutomationSecurity = msoAutomationSecurityForceDisable 
    Workbooks.Open "c:\temp\Книга3.xls" 
    Application.AutomationSecurity = msoAutomationSecurityByUI 
End Sub

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Использование функции MATCH (ПОИСКПОЗ)?
    #34085769
Domninsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cпасибо большое буду пробовать!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Использование функции MATCH (ПОИСКПОЗ)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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