Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема передачи параметра в функцию / 7 сообщений из 7, страница 1 из 1
03.11.2015, 11:14
    #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
03.11.2015, 12:20
    #39093577
hclubmk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи параметра в функцию
Более корректно было бы использовать вместо FileN As Variant ByVal FileN As Workbook ну и, само собой,SpesalCells заменить на SpecialCells
...
Рейтинг: 0 / 0
03.11.2015, 12:20
    #39093578
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема передачи параметра в функцию
kos20Не работает именно передача ссылки на открытую книгу"не работает", это весьма точное и подробное описание проблемы.

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

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

Потрясает логика некоторых товарищей. Если возникла ошибка, то давайте поставим On Error Resume Next и опа! ошибки нет. Правда что-то не работает - но это неважно, с этим пойдем на форум
...
Рейтинг: 0 / 0
03.11.2015, 13:08
    #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
03.11.2015, 13:11
    #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
03.11.2015, 14:15
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема передачи параметра в функцию / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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