Здравствуйте, Имеется бланк екселя в который пользователи заносят данные и отсылают почтой, затем VBA собирает из этих файлов информацию в "одну кучу". С одним из файлов что-то произошло: теперь tekF.Sheets("лист1").Cells(i, 4).Value выпадает в ошибку "Run-time error '32809': Application-defined or object-defined error". Другие такие-же файлы обрабатываются нормально.
Выяснил: 1. Если обратиться к другому листу в книге все работает нормально. т.е. tekF.Sheets("лист2").Cells(i, 4).Value выдает значение ячейки. 2. В дебагере на объект tekF.Sheets("лист1") открывая его свойства cells запускается мастер настройки MS Outlook. я так понимаю пытается отправить какую-то почту, а т.к. почтовый клиент не настроен - толкает его настройку.
Как забороть эту ошибку?
[moder]Добрый день. Для начала прочитайте правила форума п.3 Без файла помогающих прошу не помогать[/moder]
Здравствуйте, Имеется бланк екселя в который пользователи заносят данные и отсылают почтой, затем VBA собирает из этих файлов информацию в "одну кучу". С одним из файлов что-то произошло: теперь tekF.Sheets("лист1").Cells(i, 4).Value выпадает в ошибку "Run-time error '32809': Application-defined or object-defined error". Другие такие-же файлы обрабатываются нормально.
Выяснил: 1. Если обратиться к другому листу в книге все работает нормально. т.е. tekF.Sheets("лист2").Cells(i, 4).Value выдает значение ячейки. 2. В дебагере на объект tekF.Sheets("лист1") открывая его свойства cells запускается мастер настройки MS Outlook. я так понимаю пытается отправить какую-то почту, а т.к. почтовый клиент не настроен - толкает его настройку.
Как забороть эту ошибку?
[moder]Добрый день. Для начала прочитайте правила форума п.3 Без файла помогающих прошу не помогать[/moder]sonwookong
Сообщение отредактировал DJ_Marker_MC - Вторник, 20.01.2015, 15:14
Великий гугл найдет все.: Если не то - то есть два варианта: Либо Вы выкладываете файл пример согласно правил форума Либо обращаетесь за помощью к экстрасенсам Возможно повезет последних найти здесь на форуме :D Меня опередил модератор :'(
Великий гугл найдет все.: Если не то - то есть два варианта: Либо Вы выкладываете файл пример согласно правил форума Либо обращаетесь за помощью к экстрасенсам Возможно повезет последних найти здесь на форуме :D Меня опередил модератор :'(SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Вторник, 20.01.2015, 15:24
Я заменил ссылку. на справку... ссылки на другую планету не работают.
В Вашем коде нужно дать определение листу:
[vba]
Код
Sub ZAPOLNIT(fil As String) 'On Error GoTo ErrHandler Dim fio As String Dim dol As String Dim i, strZPF, strTOF As Integer Dim wsh As Worksheet Set tekF = Workbooks.Open(fil) Set wsh = tekF.Sheets("ТУРВ-ФАКТ") ' добавил переменную определяющую лист ' Далее нужно заменить "tekF.Sheets("ТУРВ-ФАКТ")" на "wsh" i = 6 Do Until wsh.Cells(i, 4).Value = "ИТОГО ОБЩ." fio = wsh.Cells(i, 4).Value dol = wsh.Cells(i, 2).Value
[/vba]
Далее в всех макросах аналогично. Какие шустрые модераторы. Опять опередили
Я заменил ссылку. на справку... ссылки на другую планету не работают.
В Вашем коде нужно дать определение листу:
[vba]
Код
Sub ZAPOLNIT(fil As String) 'On Error GoTo ErrHandler Dim fio As String Dim dol As String Dim i, strZPF, strTOF As Integer Dim wsh As Worksheet Set tekF = Workbooks.Open(fil) Set wsh = tekF.Sheets("ТУРВ-ФАКТ") ' добавил переменную определяющую лист ' Далее нужно заменить "tekF.Sheets("ТУРВ-ФАКТ")" на "wsh" i = 6 Do Until wsh.Cells(i, 4).Value = "ИТОГО ОБЩ." fio = wsh.Cells(i, 4).Value dol = wsh.Cells(i, 2).Value
[/vba]
Далее в всех макросах аналогично. Какие шустрые модераторы. Опять опередилиSLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Вторник, 20.01.2015, 16:42
только: 1. Непонятно почему так? ведь на других файлах "старый код" работает. Да и всю дорогу стараюсь по-минимуму объектов создавать - первый раз с такой бякой столкнулся ( 2. и еще непонятно почему [vba]
Код
Dim wsh, wsh1 As Worksheet
[/vba] не работает с той-же ошибкой, а [vba]
Код
Dim wsh As Worksheet Dim wsh1 As Worksheet
[/vba] работает?
Спасибо. тема закрыта.
только: 1. Непонятно почему так? ведь на других файлах "старый код" работает. Да и всю дорогу стараюсь по-минимуму объектов создавать - первый раз с такой бякой столкнулся ( 2. и еще непонятно почему [vba]
Андрей, я немножко разжую. Вдруг еще кому то пригодится. При объявлении переменных через запятую в виде: [vba]
Код
Dim a, b, c, d, e As Worksheet
[/vba]только переменная "е" будет иметь тип Worksheet, остальные же - a, b, c, d будут иметь тип "Variant". Тип Variant удобен в коротких программах, но он потребляет больше памяти, потому что, компилятор сам пытается определить тип переменной (что не всегда получается, как в вашем случае) и только потом применяет ее в вычислениях. Поэтому для надежной работы программы, тип переменной необходимо указывать для каждой переменной. Можно пользоваться, так называемым символьным определением типа. Dim a$ '- as string Dim b% '- as integer Dim c& '- as long Dim d# '- as double Dim e@ '- as currency Dim f! '- as single Dim g '- as variant и ест-но, можно через запятую.
Андрей, я немножко разжую. Вдруг еще кому то пригодится. При объявлении переменных через запятую в виде: [vba]
Код
Dim a, b, c, d, e As Worksheet
[/vba]только переменная "е" будет иметь тип Worksheet, остальные же - a, b, c, d будут иметь тип "Variant". Тип Variant удобен в коротких программах, но он потребляет больше памяти, потому что, компилятор сам пытается определить тип переменной (что не всегда получается, как в вашем случае) и только потом применяет ее в вычислениях. Поэтому для надежной работы программы, тип переменной необходимо указывать для каждой переменной. Можно пользоваться, так называемым символьным определением типа. Dim a$ '- as string Dim b% '- as integer Dim c& '- as long Dim d# '- as double Dim e@ '- as currency Dim f! '- as single Dim g '- as variant и ест-но, можно через запятую.Wasilich
Сообщение отредактировал Wasilic - Вторник, 20.01.2015, 23:05