2013-09-23 3 views
1

У меня есть большой макрос, который в основном обрабатывает некоторые столбцы и выплескивает результаты на основе некоторой перекрестной проверки с базой данных доступа 2003. Он работает абсолютно нормально - никаких зацепок вообще.Метод «диапазон» объекта _global провалился, когда ничего не делал

Однако мне недавно пришлось внести в него изменения. Это буквально меняло «8» на «9» в одной строке кода. Но в следующий раз, когда я запустил его, он сбросил ошибку 1004: Method 'Range' of object '_Global' failed. Excel 2003 - забавная вещь - я когда-то несколько раз царапал себе голову над этим, пытаясь найти оскорбительные строки кода, которые могут вызывать ошибку, но, увы, безрезультатно. Я сделал что-то, что я не ожидал ничего запускать:

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

Это как если бы он был настолько хрупким, что сохранение макроса как есть, сломает его. Есть идеи?

Обновление: вот что я изменился, что первоначально привело к проблеме

iOutputCols = 9 'this was changed to 9 from 8 
ReDim Preserve sOutputCols(iOutputCols) 
sOutputCols(0) = "Policy No" 
sOutputCols(1) = "Client" 
sOutputCols(2) = "Trans" 
sOutputCols(3) = "Effective Date" 
sOutputCols(4) = "ClosingRef" 
sOutputCols(5) = "Gross" 
sOutputCols(6) = "Comm" 
sOutputCols(7) = "Net Due" 
sOutputCols(8) = "Risk" 'this line was added 

внесении изменений здесь, в то время как первоначально вызывает ошибку, не кажется особенным - я сделал небольшие изменения, как выше в других местах в кода и в других модулях, однажды я даже сделал что-то как testval = "test", и даже эта избыточная строка вызовет ошибку. Самый минималистический способ вызвать это? Просто откройте его, сохраните его, не меняя ничего, и при следующем использовании произойдет ошибка.

Ошибка возникает в этой линии, в совершенно другой раздел кода, который является частью формы:

If strErr <> "" Then MsgBox strErr, vbInformation + vbOKOnly, "Action Error" 

Application.ScreenUpdating = True 'error occurs here, message box which shows me the error right above 

End Sub

Update 2

Удаление обработки ошибок бросает ошибку по этой линии

Case "> Send Next Period Reminder" 'error on line below 
     Call ReplaceText(wordApp, "[office_address]", Range("Address_" & Worksheets("UserParms").Range("F6").Value).Value) 'error this line 
     Call ReplaceText(wordApp, "[office_address2]", Range("Address2_" & Worksheets("UserParms").Range("F6").Value).Value) 
'more of the same replacetexts below 

Для контекста, это когда opti on выбрано для «Отправить напоминание следующего периода», которое вытаскивает шаблон .dot слова из статической папки и заполняет его на основе данных, выбранных на листе (Следовательно, замените тексты). Это в другом модуле и никогда не затрагивалось раньше.

+0

Без большого количества отправленного кода маловероятно, что это получит ответ, прежде чем оно будет закрыто как «слишком широкое, слишком расплывчатое». Что-нибудь еще изменилось? Библиотеки, версии, ... обновление программного обеспечения? – Floris

+0

У вас есть UDF в книге, которая может вызвать ошибку? Без дополнительной информации почти невозможно предположить, что может быть причиной этого. –

+0

@floris буквально ничего не меняется - вы можете открыть его, ничего не менять, сохранить его, затем, когда вы попытаетесь запустить макрос в следующий раз, он выкинет ошибку. – nclfrk799

ответ

1

Попробуйте правильно квалифицировать свои вызовы методов Range. У вас есть такие строки:

Call ReplaceText(wordApp, "[office_address]", Range("Address_" & Worksheets("UserParms").Range("F6").Value).Value) 'error this line 
    Call ReplaceText(wordApp, "[office_address2]", Range("Address2_" & Worksheets("UserParms").Range("F6").Value).Value) 

Хотя это может быть не очевидно, есть случаи, как экологические, так и на основе коды, где это неквалифицированное использование Range может потерпеть неудачу. Измените ссылки как Range("Address... на что-то вроде yourTargetWS.Range("Address...

+0

О, моя доброта ... проблема была исправлена! Квалификация самого диапазона не на самом деле устранила проблему, но ваше решение действительно заставило меня исследовать, почему ссылка на основной лист была пуста или нет. Я не знаю почему, но когда я его сохраняю, элементы этого листа перемещаются постоянно (3 столбца в поперечнике). Изменение всех экземпляров F6-I6 решило его. Я до сих пор не знаю, почему элементы движутся при сохранении, но в настоящий момент я рад, что он исправлен. Больше никаких разрывов! Спасибо, что предоставили катализатору ответ! – nclfrk799

Смежные вопросы