У меня есть большой макрос, который в основном обрабатывает некоторые столбцы и выплескивает результаты на основе некоторой перекрестной проверки с базой данных доступа 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 слова из статической папки и заполняет его на основе данных, выбранных на листе (Следовательно, замените тексты). Это в другом модуле и никогда не затрагивалось раньше.
Без большого количества отправленного кода маловероятно, что это получит ответ, прежде чем оно будет закрыто как «слишком широкое, слишком расплывчатое». Что-нибудь еще изменилось? Библиотеки, версии, ... обновление программного обеспечения? – Floris
У вас есть UDF в книге, которая может вызвать ошибку? Без дополнительной информации почти невозможно предположить, что может быть причиной этого. –
@floris буквально ничего не меняется - вы можете открыть его, ничего не менять, сохранить его, затем, когда вы попытаетесь запустить макрос в следующий раз, он выкинет ошибку. – nclfrk799