powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема передачи параметра в функцию
7 сообщений из 7, страница 1 из 1
Проблема передачи параметра в функцию
    #39093485
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
почему-то не работает функция, хотя раньше работала.
Суть функции такова, что она возвращает индекс найденного слова на листе в открытой книге.
Не работает именно передача ссылки на открытую книгу, хотя раньше работало...

Вот сама функция:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Function Getj(FileN As Variant, shi As Integer, Optional KeyName As String) As Integer
  On Error Resume Next
  Dim t As Boolean
  t = True
  If Len(KeyName) = 0 Then
     KeyName = "Код"
  End If
  
  ei = FileN.Sheets(shi).Cells.SpesalCells(xlLastCell).Row
  ej = FileN.Sheets(shi).Cells.SpesalCells(xlLastCell).Column
  
  For i = 1 To ei
    For j = 1 To ej
      If LCase(Trim(FileN.Sheets(shi).Cells(i, j).Value)) = LCase(KeyName) And t = True Then
         Getj = j
         t = False
      End If
    Next j
  Next i
End Function



А вот ее использование:
Код: vbnet
1.
2.
3.
4.
    ' открываем очередной файл в режиме «только чтение»
    Set Wb = Nothing: Set Wb = Workbooks.Open(Filename, False, True)
    keyStringSubconto = "Привет"
j = Getj(Wb, 1, keyStringSubconto)



по идее должно быть присвоено некоторое значение (индекс) j для искомого слова. Но есть проблема в строке передачи параметра Wb. Может кто поможет где я налажал?
...
Рейтинг: 0 / 0
Проблема передачи параметра в функцию
    #39093577
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более корректно было бы использовать вместо FileN As Variant ByVal FileN As Workbook ну и, само собой,SpesalCells заменить на SpecialCells
...
Рейтинг: 0 / 0
Проблема передачи параметра в функцию
    #39093578
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kos20Не работает именно передача ссылки на открытую книгу"не работает", это весьма точное и подробное описание проблемы.

Во-первых, убери On Error Resume Next и НИКОГДА не используй, пока не научишься им пользоваться
Во-вторых, поменяй FileN As Variant на FileN As Workbook

Потом расскажи, в чем конкретно проблема
...
Рейтинг: 0 / 0
Проблема передачи параметра в функцию
    #39093583
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, SpesalCells я не заметил, но естественно убирание On Error Resume Next эту проблему осветит.

Потрясает логика некоторых товарищей. Если возникла ошибка, то давайте поставим On Error Resume Next и опа! ошибки нет. Правда что-то не работает - но это неважно, с этим пойдем на форум
...
Рейтинг: 0 / 0
Проблема передачи параметра в функцию
    #39093644
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kos20, почему бы не использовать штатный поиск? Второй и третий параметры функции необязательны. Если опущен 2-й параметр, поиск ведется на первом листе книги. Лист можно указывать по номеру или по имени.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Function Getj(FileN, Optional shi = 1, Optional KeyName = "Код") As Integer
Dim c As Range
  With FileN.Worksheets(shi)
    Set c = Cells.Find(KeyName, .Cells(.Rows.Count, .Columns.Count), xlValues, xlPart, xlByRows, xlNext, False)
    If Not c Is Nothing Then Getj = c.Column
  End With
End Function
...
Рейтинг: 0 / 0
Проблема передачи параметра в функцию
    #39093649
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОПЕЧАТКА!!! Точку пропустил
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Function Getj(FileN, Optional shi = 1, Optional KeyName = "Код") As Integer
Dim c As Range
  With FileN.Worksheets(shi)
    Set c = .Cells.Find(KeyName, .Cells(.Rows.Count, .Columns.Count), xlValues, xlPart, xlByRows, xlNext, False)
    If Not c Is Nothing Then Getj = c.Column
  End With
End Function
...
Рейтинг: 0 / 0
Проблема передачи параметра в функцию
    #39093759
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем огромное спасибо! Особенно hclumbk И Кзанский.
Реально очень элегантное решение, возьму на заметку.

КазанскийОПЕЧАТКА!!! Точку пропустил
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Function Getj(FileN, Optional shi = 1, Optional KeyName = "Код") As Integer
Dim c As Range
  With FileN.Worksheets(shi)
    Set c = .Cells.Find(KeyName, .Cells(.Rows.Count, .Columns.Count), xlValues, xlPart, xlByRows, xlNext, False)
    If Not c Is Nothing Then Getj = c.Column
  End With
End Function
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема передачи параметра в функцию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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