powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Работает в Excel 2000-2003, не работает в Excel 2007.
16 сообщений из 16, страница 1 из 1
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35819428
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте, имеется следующий код

On Error Resume Next
Dim ws As Worksheet, cell As Range
Dim list As Range
Set ws = Worksheets("Settings")
Set list = ws.Range(ws.Range("A2"), ws.Range("A65536").End(xlUp))
'find current sheet in sheet list
Set cell = list.Find(ActiveSheet.Name, , , xlWhole)
'activate sheet next to it
Worksheets(cell.Offset(1, 0).Value).Activate

Суть кода следующая:
На листе "Settings" есть список названий листов в виде
List1
List2
List3
List4

Код при выполнении находит название активного листа в этом списке и активирует лист с названием из следующей ячейки (код для кнопки "Далее"). Например находясь на листе List2, он найдет это название в списке и возьмет следующее - List3 и активирует его.

Выдает ошибку в 2007 у енд-юзера. Пока не могу дать описания ошибки, но может кто-то уже сейчас может сказать в чем косяк такого кода под Экселем 2007?
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35819620
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Енд-юзер ответил, проблема оказалась в строке

validationString = Right(validationString, Len(validationString) - 1)

Где validationString as String

Ошибку выдает на Right, с текстом Can't find project or library.

Как это можно исправить, попросить енд-юзера пойти в Alt-F11 -> Tools -> References и поставить галочку напротив Visual Basic for Applications? Может ли у них не оказаться этой дллки в 2007-м офисе, неизвестно какой конфигурации?

Помогите плз :)
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35820054
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Set list = ws.Range(ws.Range("A2"), ws.Range("A65536").End(xlUp))
Во-первых, в 2007 экселе далеко не 65000 строк.
Во-вторых, в tools-reference надо искать слово MISSING.


...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35820157
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да не в 65000 проблема, т.к. там всего 7 строк. Просто использую такую запись как стандартную для поиска последней строки.

Тулс-референс попросил поискать юзера. Missing может означать, что удалено или просто выключено? Есть ли в сетапе возможность не устанавливать эти дллки? Или только если их вручную потом удалять?
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35820210
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MISSING означает отсутсвие необходимой для работы библилотеки.
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35822882
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень странно как-то

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    For Each ws In qSheets
        'unlock
        ws.Unprotect
        On Error Resume Next
        'for each validation drop-down type cell
        For Each cell In ws.Cells.SpecialCells(xlCellTypeAllValidation)
            'check if it's not 2nd,3rd... cell in merged cell
            If cell.MergeArea.Item( 1 ).Address <> cell.Address Then GoTo nextfor
            'check if it's not blank
            If Len(CStr(cell.Value)) =  0  Then GoTo nextfor
            validationString = cell.Validation.Formula1
            validationString = Right(validationString, Len(validationString) -  1 )
            Set nm = ThisWorkbook.Names(validationString)
            Set listRange = nm.RefersToRange
            'find value in referred from validation list range and save it's address in array
            Set c = listRange.Find(CStr(cell.Value), , xlValues, xlWhole)
            addresses(UBound(addresses)) = CStr(c.Address)
            ReDim Preserve addresses( 1  To UBound(addresses) +  1 )
nextfor:
        Next
    Next

Вот такой код, ошибка выходит на Right.
До этого Len, CStr из того же класса Strings библиотеки VBA нормально выполняются.

Кто-нибудь знает о изменениях класса Strings в VBA 2007-го офиса, или где это можно посмотреть?
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35823470
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что с MISSING ?
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35823826
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю, нет доступа к тому компьютеру, но енд-юзер сказал, что всё сделал по инструкции, то есть выставил в VBA редакторе, Tools-References галку на Visual Basic for applications.

Просто как может работать Len, CStr и не работать Right если дллка Missing?
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35823931
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это глюки экселя, когда нет необходимой библиотеки.
Пусть он пришлет вам скрин с вкладки tools references.
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35825279
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема видимо в этом:
Len(CStr(cell.Value)) не пустое, а вот cell.Validation.Formula1 вполне может быть пустым.
а т.к. On Error Resume Next, то последствия непредсказуемы
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35825492
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еррор Cant' find library.
On error resume next не выдает ерроров.
Тем более у меня есть копия этого файла и у меня на 2003-м офисе он запускается (и у 200+ других юзеров тоже).
Я поставил On error resume next, потому что есть листы где нет
ws.Cells.SpecialCells(xlCellTypeAllValidation)

И там выдается еррор, он просто идет далее на другой шит и работает дальше.
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35826225
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Тогда лучше так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        For Each cell In ws.Cells.SpecialCells(xlCellTypeAllValidation)
'++++++
            If Err.Number <>  0  Then GoTo nextfor
'------
            If cell.MergeArea.Item( 1 ).Address <> cell.Address Then GoTo nextfor
.....
nextfor:
        Next
'++++++
    On Error GoTo  0 
'------
    Next


2. В окне Бейсика View\Object Browser (F2)
- в верхнем окне выбора All Libraries;
- в окне поиска Right
посмотреть, нет ли одноименной функции в какой-либо библиотеке
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35826233
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, главное то так и не выяснено осталось, на что big-duke сразу указал.
Надо сразу после ошибки смотреть Tools\References
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35826248
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще правильнее:)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        For Each cell In ws.Cells.SpecialCells(xlCellTypeAllValidation)
'++++++
            If Err.Number <>  0  Then GoTo nextfor
            On Error GoTo  0 
'------
            If cell.MergeArea.Item( 1 ).Address <> cell.Address Then GoTo nextfor
.....
nextfor:
        Next
'++++++
    On Error GoTo  0 
'------
    Next
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35826310
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sergeyvgеще правильнее:)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        For Each cell In ws.Cells.SpecialCells(xlCellTypeAllValidation)
'++++++
            If Err.Number <>  0  Then GoTo nextfor
            On Error GoTo  0 
'------
            If cell.MergeArea.Item( 1 ).Address <> cell.Address Then GoTo nextfor
.....
nextfor:
        Next
'++++++
    On Error GoTo  0 
'------
    Next


Ошибка возникает в ws.Cells.SpecialCells(xlCellTypeAllValidation), как поможет переход в конец for идти дальше по for each next если не определено то, что стоит после In?

On Error Resume Next судя по дебаггеру сразы выскакивает из цикла и идет дальше.
...
Рейтинг: 0 / 0
Работает в Excel 2000-2003, не работает в Excel 2007.
    #35826339
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я тестировал, все работает как нужно
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Работает в Excel 2000-2003, не работает в Excel 2007.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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