Excel vba ошибка при открытии файла

 

Здравствуйте! Передо мной стоит задача открыть файлы и перечислить список файлов  excel  в папке. Без знаний VBA  с помощью интернета составила макрос, он работает, переписывает названия файлов в папке, но если натыкается на файл, который выдает ошибку при открытии, он прекращает работу. Ошибка — например:
«В книге обнаружено содержимое, которое не удалось прочитать. попробовать восстановить содержимое книги?»

Помогите пожалуйста дописать код так, чтобы при открытии файла с ошибкой, макрос переходил к следующему файлу.

r = Range(«A65536»).End(xlUp).Row + 1 ‘íàõîäèì ïåðâóþ ïóñòóþ ñòðîêó

For Each FileItem In SourceFolder.Files

If FileItem.Name Like «*» & «.xls» & «*» Then
Workbooks.Open FileItem.Path, UpdateLinks:=0
ЭтаКнига.Activate    
Cells(r, 1).Formula = FileItem.Name
Cells(r, 2).Formula = FileItem.Path
Workbooks.Item(FileItem.Name).Activate
r = r + 1
ActiveWorkbook.Close SaveChanges:=False
End If

X = SourceFolder.Path
Next FileItem

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

А зачем открывать книгу???   :o
Посмотрите

здесь

.

Изменено: Johny18.01.2013 12:11:08

There is no knowledge that is not power

 

Z

Пользователь

Сообщений: 6111
Регистрация: 21.12.2012

Win 10, MSO 2013 SP1

#3

18.01.2013 12:14:07

Цитата
Ангелина Ткаченко пишет:
перечислить список файлов excel в папке.

Только для вас —

http://www.planetaexcel.ru/techniques/12/45/

;)

«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

 

Johny, книгу мне открывать надо, т.к. в дальнейшем необходимо будет усложнить макрос и записать все связи из этой книги в отдельный лог, буду делать на основе данного макроса. Мой макрос работает (можете посмотреть приложенный файл), просто не получается обработать именно ошибку, т.е. на 500 строке он у меня перестает работать, т.к. очередной файл не открывается,и он сам не переходит к следующему.

Z, спасибо, на основании этой статьи я как раз и написала свой макрос)))) Но ошибку мою он не обрабатывает, т.к. мне нужно обязательно именно открывать каждый файл и переходить к следующему в случае ошибки открытия. В этом и касяк, что у меня не переходит(((

 

ber$erk

Пользователь

Сообщений: 2735
Регистрация: 25.12.2012

по ссылке ниже в комментариях написано, что надо добавить «On Error Resume Next»

Учимся сами и помогаем другим…

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#6

18.01.2013 12:32:22

Может, так?

Код
If FileItem.Name Like "*" & ".xls" & "*" Then
    On Error Resume Next
    Workbooks.Open FileItem.Path, UpdateLinks:=0
    If Err = 0 Then
        ЭтаКнига.Activate
        Cells(r, 1).Formula = FileItem.Name
        Cells(r, 2).Formula = FileItem.Path
        Workbooks.Item(FileItem.Name).Activate
        r = r + 1
        ActiveWorkbook.Close SaveChanges:=False
    End If
End If

There is no knowledge that is not power

 

Ангелина Ткаченко

Пользователь

Сообщений: 25
Регистрация: 18.01.2013

#7

18.01.2013 12:37:48

Цитата
ber$erk пишет:
по ссылке ниже в комментариях написано, что надо добавить «On Error Resume Next»

ааа, не дочитала! спасибо :)

 

Johny, огромнейшее Вам спасибо! Помогло, я пол дня мучалась! ура, спасибо!

 

Еще вопрос, подскажите, пожалуйста, если среди файлов которые перебирает макрос есть файл, который запрашивает пароль при открытии, как можно проигнорировать открытие данного файла и перейти к следующему?

 

Пробовала эксперементировать с Application.DisplayAlerts — не помогло…

 

sva

Пользователь

Сообщений: 1027
Регистрация: 23.12.2012

Перед открытием фалов дописываете
On Error Resume Next
Далее открываем файл с Паролем =»»
Workbooks.Open(«D:1.xlsx», Password:=»»)
После этого проверяем Код ошибки, если он не равен 1004 то выполняем нужный код

If Err <> 1004 Then
ваш код
End if

 

Сделала как вы написали, всё-равно высвечивается поле для ввода пароля и пока не введешь его, или не нажмешь отмену цикл дальше не продолжается. а т.к. у меня 16 гигабайт файлов excel я хочу поставить макрос на выолнение на ночь, чтобы не нажимать в каждом файле кнопку «Отмена». Как сделать чтобы не запрашивал файл окошко с паролем?

Прикрепленные файлы

  • ошибка.png (23.34 КБ)

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#13

22.01.2013 16:35:02

По скрину видно, что «Только для чтения» — активная кнопка. Быть может, это поможет:

Код
Application.SendKeys "{ENTER}" 'Открываем книгу в режиме чтения
' Если есть пароль, закрываем без сохранения.
If ActiveWorkbook.HasPassword Then
    ActiveWorkbook.Close False
End If

Изменено: Johny22.01.2013 16:36:18

There is no knowledge that is not power

 

Ангелина Ткаченко

Пользователь

Сообщений: 25
Регистрация: 18.01.2013

#14

22.01.2013 16:57:06

Цитата
Johny пишет:
Application.SendKeys «{ENTER}» ‘Открываем книгу в режиме чтения

Не помогло, но возможно я неверно вставила в код — вот что у меня получилось:

If FileItem.Name Like «*» & «.xls» & «*» Then
On Error Resume Next
Workbooks.Open FileItem.Path, UpdateLinks:=0, Password:=»»

Application.SendKeys «{ENTER}»
If ActiveWorkbook.HasPassword Then
   ActiveWorkbook.Close False
End If

If Err <> 1004 Then
If Err = 0 Then
ЭтаКнига.Activate

 Cells(r, 1).Formula = FileItem.Name
Cells(r, 2).Formula = FileItem.Path

Workbooks.Item(FileItem.Name).Activate

r = r + 1

ActiveWorkbook.Close SaveChanges:=False

End If
End If
End If

 

sva

Пользователь

Сообщений: 1027
Регистрация: 23.12.2012

Вот вам пример.
Разархивируйте, откройте файл м1, нажмите на кнопку, выбирите файлы File1 и File 2, и нажмите открыть.
Окна с предложением ввести пароль не появляется.

PS пароль на второй файл 1.

Прикрепленные файлы

  • пример.rar (26.59 КБ)

 

Да, спасибо большое, получилось. Я писала Password = «», а у вас WriteResPassword:=»»
Когда указала такое условие, тоже не запросило пароль! Спасибо!

 

sva

Пользователь

Сообщений: 1027
Регистрация: 23.12.2012

Если бы сразу скрин показали, предложил бы вариант с паролем на изменение :)

 

Наткнулась на еще одну проблему, никак не могу обойти((((((((((((( Помогите, пожалуйста.
Среди моих документов на сервере, в которых мне необходимо сделать обход макросом ( более 16000 документов excel) находятся документы, при встрече с которыми макрос останавливается). Например так у меня случилось с документом «Обснование выбора по техники 2011г%D0[1].xls». При встрече с ним макрос останавливается и дальше не идет. Понимаю, что ошибка из-за имени файла и нормальные люди так файлы не называют ( при переименовании все начинает работать), но таких документов не один на сервере, поэтому переименовать все не получится(((

Уже куда только не пыталась вставить обработчик ошибок — картина та же. Я очень плохо знаю VBA, а написать этот макрос мне очень нужно. Прошу очень помочь знатоков.

Вот мой код (может где-то увидете ошибку, куда можно дописать обработчик).

For Each FileItem In SourceFolder.Files
On Error Resume Next
If FileItem.Name Like «*» & «.xls» & «*» Then
On Error Resume Next
Workbooks.Open FileItem.Path, UpdateLinks:=0, WriteResPassword:=»»

If Err <> 1004 Then
If Err = 0 Then

ЭтаКнига.Activate

    Cells(r, 1).Formula = FileItem.Name
Cells(r, 2).Formula = FileItem.Path

Workbooks.Item(FileItem.Name).Activate

r = r + 1

ActiveWorkbook.Close SaveChanges:=False

End If

End If

End If

X = SourceFolder.Path

Next FileItem

Также прилагаю архив, в нем 2 папки. В одной рабочие файлы, в другой вышеописанный косячный файл для теста. Макрос должен открывать каждый файл из папки, записывать его имя на лист (как бы вести лог) и закрывать. Папка выбирается в файле с макросом. Помогите, пожалуйста разобраться где не хватает обработчика ошибок(

 

Sergei_A

Пользователь

Сообщений: 443
Регистрация: 05.01.2013

#19

28.01.2013 17:36:33

Попробуйте так

Код
On Error Resume Next
For Each FileItem In SourceFolder.Files
If FileItem.Name Like "*" & ".xls" & "*" Then
    Workbooks.Open FileItem.Path, UpdateLinks:=0, WriteResPassword:=""
    Set Opened_File = ActiveWorkbook
    If Err <> 1004 Then
        If Err = 0 Then
            ЭтаКнига.Activate
            Cells(r, 1).Formula = FileItem.Name
            Cells(r, 2).Formula = FileItem.Path
            Opened_File.Activate
            r = r + 1
            Opened_File.Close SaveChanges:=False
        End If
    End If
End If
 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#20

28.01.2013 23:07:26

Цитата
Ангелина Ткаченко пишет:
Помогите, пожалуйста разобраться где не хватает обработчика ошибок

Глюков (ошибок) не обнаружено. Все отрабатывает справно. Возможно, проблема связана с сетью.

 

Ангелина Ткаченко

Пользователь

Сообщений: 25
Регистрация: 18.01.2013

#21

29.01.2013 09:17:59

Sergei_A, большое спасибо! Вроде помогло)

Не так давно очередной раз столкнулся с ошибками приложения Excel при попытке включения макросов после открытия файлов .xlsm. Вспомнил, что подобные проблемы преследуют пользователей довольно давно, но чаще всего они наблюдались с Excel 2013 и Excel 2016. Характерные особенности этой группы ошибок следующие:

  • Приложение Excel закрывается при открытии файла с макросами (при включенном режиме безопасности Включить все макросы);
  • Ошибка приложения Excel возникает при попытке включить содержимое (нажатии соответствующей кнопки);
  • Ошибка приложения Excel возникает при сохранении файла с макросами;

Ну и по горячим следам очередного инцидента, дабы не откладывать на потом, решил для себя собрать небольшой хаб по ошибкам приложения Excel с последующей модификацией, дабы опять не терять время на поиск информации в Сети и на составление облака причин.
Суть в том, что в процессе открытия файла xlsm, и при отключенных макросах, в верхней части основного окна (над таблицей), высвечивается строка уведомления: ПРЕДУПРЕЖДЕНИЕ СИСТЕМЫ БЕЗОПАСНОСТИ Запуск макросов отключен, с кнопкой включения содержимого (макросов). Как только пользователь её нажимает, Excel попросту аварийно завершается (падает) с ошибкой Программа Microsoft Excel не работает и характерным окном уведомления:

excel ошибка макроса

При этом было замечено, что непосредственно перед возникновением ошибки приложения Excel никаких системных обновлений и обновлений пакета Office не устанавливалось. Возможно, каким-то образом задействованы последние обновления на Office, но прямой связи я не заметил, а подробного исследования проблемы не проводил. При этом зависимости от версии операционной системы (мною лично сбои наблюдались на Windows 10 LTSC и Windows 7 Professional) так же выявлено не было. При анализе аварийного дампа приложения (*.hdmp) обычно можно увидеть подобную информацию исключения (вывод урезан):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

. . .

EXCEPTION_RECORD:  (.exr 1)

ExceptionAddress: 00007ff86a1e05ac (VBE7+0x00000000001405ac)

   ExceptionCode: c0000005 (Access violation)

  ExceptionFlags: 00000000

NumberParameters: 2

   Parameter[0]: 0000000000000001

   Parameter[1]: 0000000000000010

Attempt to write to address 0000000000000010

DEFAULT_BUCKET_ID:  NULL_CLASS_PTR_WRITE

PROCESS_NAME:  EXCEL.EXE

ERROR_CODE: (NTSTATUS) 0xc0000005 <Unable to get error code text>

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 <Unable to get error code text>

EXCEPTION_CODE_STR:  c0000005

EXCEPTION_PARAMETER1:  0000000000000001

EXCEPTION_PARAMETER2:  0000000000000010

WRITE_ADDRESS:  0000000000000010

. . .

обычно это NTSTATUS с кодом c0000005 — Access violation, доступ запрещен. И чаще всего в дампе можно увидеть такой вот стек потока (вывод оптимизирован для улучшения представления):

. . .

STACK_TEXT:  

000000b9`1acfdd00 000001d3`2fb24e90 : 000001d3`5a0e0ef0 00000000`00000000 : VBE7+0x1405ac

000000b9`1acfdd08 000001d3`24c1fe20 : 00000000`00000000 000001d3`2fda9640 : 0x000001d3`2fb24e90

000000b9`1acfdd10 000001d3`6cf35760 : 000001d3`2fda9640 000001d3`045c9b30 : 0x000001d3`24c1fe20

000000b9`1acfdd18 000001d3`5a0e0ef0 : 000001d3`045c9b30 000001d3`2fcbb2b0 : 0x000001d3`6cf35760

000000b9`1acfdd20 00000000`00000000 : 000001d3`2fcbb2b0 000001d3`2fcbb318 : 0x000001d3`5a0e0ef0

. . .

из которого единственное что понятно, так это то, что падение Excel происходит в недрах функций библиотеки vbe7.dll (среда исполнения VBA), подгруженной в адресное пространство процесса. Это указывает на проблемы с обработчиком VBA-скриптов, в контексте Excel чаще именуемых макросами.

НЕРЕШЕННОЕ: при отладке приложений из комплекта MS Office, вы не увидите имен функций в стеке вызовов, поскольку отсутствуют отладочные символы как к основным исполняемым файлам (Excel/Word/Outlook), так и к многочисленным библиотекам. Интересно, есть ли какое-либо решение?

VBA

Так что же такое VBA и для чего он предназначается?

VBA (Visual Basic for Application) — язык макропрограммирования, основанный на языке Visual Basic.

В приложениях, входящих в комплект MS Office, таких как Excel, Word, PowerPoint и Access, VBA используется для автоматизации множества рутинных задач (напр.: повторяющихся однотипных действий), позволяет создавать формы для общения с пользователем и предлагает множество иного богатого функционала. При помощи VBA доступно управление электронной таблицей посредством объектно-ориентированной модели кода/данных, при помощи VBA-кода входные данные таблиц могут быть обработаны и представлены в итоговых (результирующих) таблицах и диаграммах (графиках). Таблица становится интерфейсом кода, позволяя легко работать, изменять его и управлять расчётами. На выходе VBA проект, используемый в структурах описанных выше приложений (электронные таблицы Excel, презентации PowerPoint, базы Access), компилируется в специальный бинарный исполняемый файл, который размещается внутри файла основного формата. Применительно к Excel это файл vbaProject.bin, который располагается внутри *.xslm-файла в директории /xl, представляющий собой бинарный исполняемый файл проекта, содержащий макрос в откомпилированном (готовом к исполнению) виде.

Наиболее вероятной причиной сбоя является повреждение блока кода VBA, содержащегося в книге Excel. Об истоках этого остается только догадываться, возможно что в структуре .xlsm-файла, в процессе работы с документом, происходят какие-то [непредвиденные разработчиками] изменения, способные приводить блок кода в неработоспособное состояние.

Решение 1: вставка нового листа

Выполните приведенную последовательность действий:

  1. Открываем [проблемный] .xlsm-файл (файл с макросами).
  2. Не нажимаем кнопку Включить содержимое.
  3. Добавляем в книгу Excel новый лист: правая кнопка мыши на ярлыках Лист1/Лист2/Лист3 → ВставитьЛист.
  4. Сохраняем электронную таблицу. Закрываем Excel.
  5. Открываем проблемный файл заново и включаем макросы.

Решение 2: перекомпиляция проекта

Выполните последовательность действий:

  1. Запускаем и открываем новую книгу Excel (не ваш проблемный файл).
  2. Открываем меню Файл — выбираем Параметры — далее открываем Центр управления безопасностью и заходим в Параметры центра управления безопасностью.
  3. В разделе Параметры макросов — выставляем чекбокс Отключить все макросы с уведомлением.
  4. В разделе Надежные расположения — выставляем чекбокс Отключить все надежные расположения.
  5. В разделе Надежные документы — выставляем чекбокс Отключить надежные документы.
  6. Жмем везде OK. Закрываем Excel.

  7. Открываем [проблемный] .xlsm-файл (файл с макросами).
  8. Не нажимаем кнопку Включить содержимое.
  9. Открывает редактор Visual Basic при помощи комбинации клавиш Alt+F11. Либо можно использовать обходной маневр: в настройках включаем меню Разработчик, после этого в появившемся сверху в ленте меню Разработчик выбираем пункт Visual Basic.
  10. В открывшемся окне редактора Visual Basic (VBA редактор) пересохраняем проект: для этого жмем на панели инструментов кнопку Сохранить (изображение дискетки или комбинация Ctrl+S).
  11. Выбираем из меню Debug — выбираем пункт меню Compile VBA Project:

    recompile vba project

  12. Еще раз сохраняем проект кнопкой Сохранить.
  13. Закрываем редактор Visual Basic.

  14. Сохраняем файл Excel через меню Файл — опцию Сохранить (или нажатием на значок дискетки в левом верхнем углу, либо комбинация клавиш Ctrl+S).
  15. Возвращаем все установки безопасности, сделанные на предыдущих шагах (пункты 2-5).
  16. Закрываем xlsm-файл.
  17. Заново открываем [проблемный] файл, в верхней части, в строке статуса — включаем макросы посредством кнопки Включить содержимое.

Решение 3: добавление модуля

Дополнительное решение состоит в том, что бы внести изменения в макрос без перекомпиляции.

  1. Открываем [проблемный] .xlsm-файл (файл с макросами).
  2. Не нажимаем кнопку Включить содержимое.
  3. Открывает редактор Visual Basic (при помощи комбинации клавиш Alt+F11).
  4. Открываем меню Tools → пункт Options. В открывшемся окне переходим на вкладку General и деактивируем чекбокс Compile on Demand:

    compile on demand

    Закрываем окно Опции нажатием клавиши OK.

  5. В левом фрейме окна проекта (Project) спускаемся вниз, находим раздел Modules, жмем на нём правую кнопку → пункт InsertModule:

    vba insert module

  6. Далее просто закрываем окно редактора Visual Basic, сохраняем основной xslm-документ и закрываем Excel.
  7. Заново открываем [проблемный] файл, в верхней части, в строке статуса — включаем макросы посредством кнопки Включить содержимое.

Обработка ошибок в VBA Excel с помощью оператора On Error. Синтаксис выражений с оператором On Error. Пример кода с простым обработчиком ошибок.

On Error – это оператор, который используется для отслеживания ошибок во время исполнения кода VBA. При возникновении ошибки On Error передает информацию о ней в объект Err и включает программу обработки ошибок, начинающуюся с указанной строки.

В первую очередь, обработчик ошибок нужен для пользователей файлов Excel с кодами VBA. Любая ошибка приводит к прекращению выполнения программы, открытию редактора VBA с непонятным для пользователя сообщением или даже к полному зависанию приложения.

Обработчик ошибок позволяет завершить выполнение программы при возникновении ошибки и вывести сообщение пользователю с ее описанием.

Синтаксис выражений с On Error

Включает алгоритм обнаружения ошибок и, в случае возникновения ошибки, передает управление операторам обработчика ошибок с указанной в выражении строки. Stroka – это метка, после которой расположены операторы обработчика ошибок.

Включает алгоритм обнаружения ошибок и, в случае возникновения ошибки, передает управление оператору, следующему за оператором, вызвавшем ошибку.

Отключает любой включенный обработчик ошибок в текущей процедуре.

Простой обработчик ошибок

Шаблон простейшего обработчика ошибок:

Sub Primer()

On Error GoTo Stroka

    ‘Блок операторов процедуры

Exit Sub

Stroka:

    MsgBox «Произошла ошибка: « & Err.Description

End Sub

Оператор On Error GoTo размещается в начале процедуры, метка и обработчик ошибок – в конце процедуры. Название метки можно сменить на другое, в том числе на кириллице.

Оператор Exit Sub обеспечивает выход из процедуры, если блок операторов выполнен без ошибок. Для вывода описания ошибки используется свойство Description объекта Err.

Примеры обработки ошибок

Пример 1
Деление на ноль:

Sub Primer1()

On Error GoTo Инструкция

    Dim a As Double

    a = 45 / 0

Exit Sub

Instr:

    MsgBox «Произошла ошибка: « & Err.Description

End Sub

Результат выполнения кода VBA Excel с обработчиком ошибок:

Пример 2
Выход за границы диапазона:

Sub Primer2()

On Error GoTo Instr

    Dim myRange As Range

    Set myRange = Range(«A1:D4»).Offset(2)

Exit Sub

Instr:

    MsgBox «Произошла ошибка: « & Err.Description

End Sub

Результат выполнения кода VBA Excel с оператором On Error GoTo:

Пример использования выражений On Error Resume Next и On Error GoTo 0 смотрите в статье: Отбор уникальных значений с помощью Collection.

Inside an excel macro I have a command that opens an external workbook:

 Workbooks.Open (directory & filename), ReadOnly:=True

I want that in the case the filename does not exist or has a different name from the specified in the macro, to present a message box with a customized message to the user (i.e. «the filename does not exist or has a different name»), instead the defined application error:

«`Runtime error 1004… Microsoft Excel cannot access….»

How can I archieve this?

Community's user avatar

asked Mar 6, 2015 at 13:37

Bruno Lopes's user avatar

You can test for the existence of the file by using Dir()

Sub OpenTester()
    Dim v As String
    directory = "C:TestFolder"
    fiilename = "ABZ.xls"
    v = directory & fiilename

    If Dir(v) = "" Then
        MsgBox "Warning Will Robinson, warning!"
    Else
        Workbooks.Open (v), ReadOnly:=True
    End If
End Sub

answered Mar 6, 2015 at 14:01

Gary's Student's user avatar

Gary’s StudentGary’s Student

95.3k9 gold badges58 silver badges98 bronze badges

You can try something like this:

Sub OpenFileSub()

    On Error GoTo ErrHandler
    Workbooks.Open (directory & Filename), ReadOnly:=True
    On Error GoTo 0

ErrHandler:
    MsgBox "the filename does not exist or has a different name"

End Sub

answered Mar 6, 2015 at 13:50

Dubison's user avatar

DubisonDubison

7505 silver badges12 bronze badges

Ошибка файла после запуска макроса (ов)

yuka

Дата: Среда, 26.12.2012, 15:54 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 94


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Друзья! В каких случаях (может они существуют) может возникнуть такая ошибка при открытии файла?
Удаленное свойство: Проверка данных из части /xl/worksheets/sheet1.xml

При открытии файла макросом формируется столбец с ниспадающими списками. Далее в следующих справа столбцах выбираются связанные ниспадающие списки. Формирование списка во втором столбце идет только в том случае, если в первом столбце что-то выбрано. Формирование третьего — от второго и т.д.
Все работает без ошибок и проблем. После сохранения, закрытия и повторного открытия файла возникает эта ошибка. Данные (текст) из ячеек не пропадает, но «присвоение» ячейке ниспадающего списка пропадает. Т.е. пользователь не может повторно его редактировать. Версия Excel 2007.

1. если я сохраняю файл в версии 2003, то списки не пропадают.
2. ячейкам со списками присваивается не именованный диапазон, (Formula1) а строка, в которой больше 255 символов (Formula1 вбирает в себя до 8000 символов)

Сначала была причина в том, что я использовала Select. Исправила — ликвидировала Select вообще из макросов. Но после этого еще где-то что-то лагает и портится.
Есть у кого-нибудь еще какие-нибудь варианты?
Еще по моим наблюдениям… если в списках маленькое количество информации (больше 255 символов, например 800), то глюков с открытием файла не возникает. А если большое количество — 3000, 5000 — возникает ошибка.

 

Ответить

KuklP

Дата: Среда, 26.12.2012, 16:42 |
Сообщение № 2

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

[offtop]

Цитата (yuka)

столбец с ниспадающими списками

Смеркалось…[/offtop]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

yuka

Дата: Пятница, 08.02.2013, 10:35 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 94


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Я подниму эту тему, вдруг кому-что понадобится!
Вобщем намаялась я с этими списками. Вроде пока избавилась от этой ошибки. Суть в том, что у меня
[vba]

Код

‘ниспадающий список  
Formula1=»Текст1;Текст2;Текст3″

[/vba]
Причина 1:
При переброске из строковой переменной в Formula1, почему-то, все «,» превращаются в «;». Т.е. если у меня строковая переменная равна:
[vba]

Код

s=»Текст1,Текст2,Текст3″

[/vba]
то при создании ниспадающего списка получается:
[vba]

Код

Formula1=»Текст1;Текст2;Текст3″

[/vba]
[Кстати, если вручную прописывать: Проверка данных->Список->Источник->»Текст1;Текст2;Текст3,Текст4″. Все отображается хорошо, а через макрос…беда…))]
Причина 2
Весьма странная реакция у Excel на ковычки («»). Т.е. если у Вас в строке присутствует значение:
[vba]

Код

s=»Текст»1″;Текст»2″;Текст»3″

[/vba]
То при создании ниспадающего списка все складывается хорошо, а после сохранения и перезагрузке файла возникает та ошибка, по которой я подняла вопрос.
Была бы возможность я бы описание ошибки отредактировала, но пропишу тут. Ошибка:

Цитата (yuka)

Удаленное свойство: Проверка данных из части /xl/worksheets/sheet1.xml

после нее все ниспадающие списки в файле, уже не отображаются в виде ComboBox, а просто в этих ячейках отсутствуют. Текст, выбранный доселе остается (сохраняется), сам список пропадает.

 

Ответить

RAN

Дата: Пятница, 08.02.2013, 12:31 |
Сообщение № 4

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Цитата (yuka)

почему-то, все «,» превращаются в «;»

«,» — разделитель в аглицком Excel, «;» — в русском.
VBA любит аглицкий.
На ранней стадии изучения VBA я писал макрос, проверяющий, не изменил ли кто формулу на листе.
Вытаскивал в VBA русскую, смотрел, нет ли изменений, если есть — в ячейку писал правильную аглицкую (в русскую она сама превращалась).
Русская, даже FormulaLocal, глючила.
Вероятно, надо было работать с FormulaR1C1, но это сейчас понятно.


Быть или не быть, вот в чем загвоздка!

 

Ответить

yuka

Дата: Пятница, 08.02.2013, 16:15 |
Сообщение № 5

Группа: Пользователи

Ранг: Участник

Сообщений: 94


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Тяжко… Уже несколько раз сталкивалась с проблемой написания, например артикула ОАС — на русском, и OAC на английском… Видите ли нашим пользователям лень переключиться на английский и написать по-человечески. А вот то, что есть различия в знаках препинания, сталкиваюсь впервые!
Ну… век живи, век учись!

 

Ответить

yuka

Дата: Пятница, 29.03.2013, 16:07 |
Сообщение № 6

Группа: Пользователи

Ранг: Участник

Сообщений: 94


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

В продолжении темы, что неправильно в этом коде? Если менять на FormulaR1C1
[vba]

Код

.Add Type:=xlValidateList, FormulaR1C1:=s

[/vba]
Макрос выдает, что сделана синтаксическая ошибка применение
[vba][/vba]
нельзя, только
[vba][/vba]

 

Ответить

KuklP

Дата: Пятница, 29.03.2013, 18:22 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Мне кажется, Вы вводите нас в заблуждение. Уже при 256 символах выйдет ошибка при открытии. Максимальное к-во символов в строке — 255. Хоть в 2003, хоть в 2010. Вот файл со строкой проверки длиной 256 символов(кстати это Вы должны были выложить пример). В 2003 при открытии ошибки нет, но строка аккуратно обрезана до 255 символов cool

К сообщению приложен файл:

7362309.xlsm
(15.9 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPПятница, 29.03.2013, 18:31

 

Ответить

andrey-ekt

Дата: Суббота, 22.06.2013, 13:01 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день! У меня точно такая же ошибка вылазит. Причем, если значение в ячейке A44 заменить на значение ячейки A43, то после сохранения ошибки не возникает. С длинной строк вроде бы все в порядке.

 

Ответить

Hugo

Дата: Суббота, 22.06.2013, 16:13 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Понял — упёрлись в длину строки в проверке ввода.
Как обойти — не знаю.
Я бы вероятно делал аналогично, но на форме с комбобоксами.
Хотя может будут другие варианты решения.

Хотя в xlsb сохраняется/открывается и работает и с длиной в 347 символов. Интересно, что про это думает Microsoft…


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

KuklP

Дата: Суббота, 22.06.2013, 16:14 |
Сообщение № 10

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Цитата (andrey-ekt)

С длинной строк вроде бы все в порядке.

???


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Константин

Дата: Четверг, 11.07.2013, 11:35 |
Сообщение № 11

сВсем привет! Та же беда! На листе одна процедура добавляет Проверку Данных / выпадающие списки. Раньше все работало. Списки длиной менее 28 и 49 символов. Когда я добавил новый список — все выпадающие списки слетели. Длина строки нового списка составила 340 символов. Без этого длинного, этой ошибки не возникает…
Как все же вставить проверку данных именно такого размера…

 

Ответить

Константин

Дата: Четверг, 11.07.2013, 11:39 |
Сообщение № 12

Предлагаемое решение:
Списки с длиной строки больше 255 до сохранения работают нормально, их добавлять при открытии книги, и удалять при закрытии. Тода хотя бы остальные списки будут жить, и в тоже время — эти длинные будут в работе.

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel vba отфильтрованный значения
  • Excel vba отслеживание изменений ячейки
  • Excel vba отследить изменение ячейки
  • Excel vba отправка почты outlook
  • Excel vba отображение формы