EXC_BAD_ACCESS "Макросы для Office 2011" Excel Причина отладки MicrosoftOleautomation

Я сталкиваюсь с вездесущей ошибкой EXC_BAD_ACCESS в Microsoft Office для Mac 2011 на OSX 10.7 (Lion). Также установлено последнее обновление для офиса (14.3, я думаю, так и было)

Я запускаю (довольно большой) макрос... Портирование из ПК Office.

Ошибка происходит при добавлении элемента в коллекцию. Ничего особенного и делающего это без проблем в других местах. (И не изменили его с рабочей версии ПК).

Таким образом, хотя это может быть причиной ошибки, я подозреваю, что это связано с памятью коллекции - например, возможно, это делает перераспределение за кулисами во время этой конкретной вставки.

В частности, он вставляет второй элемент в коллекцию. Нет определенного пользователем типа. Ничего особенного. Добавление строкового элемента. Вставляемые данные являются кошерными. Идентификатор ключа уникален. Использование хлеба и масла.

Другим возможным подозрением может быть область видимости переменной (???) ... Т.е. она может использовать переменную с аналогичным именем из другой подпрограммы или что-то странное.

Или, возможно, временная строка, используемая в подпрограмме, является номинальным виновником?

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

Я ищу предложения о том, как отследить проблему. И советы по ее решению.

Страница памяти 64k на Mac такая же, как на ПК?

Может ли это быть физический ОЗУ / виртуальная память / обмен? (Кажется слишком последовательным, чтобы быть связанным с системой)

Возможно, в Excel есть ограничение на ограничение памяти для макросов?

Как я могу использовать дамп ядра для исключения, чтобы отследить проблему?

(Опытный программист, просто незнакомый с OSX ... И вздыхаю, пропустив все мои инструменты разработчика ПК)

1 ответ

Решение

Решено.

Это была не коллекция.

Через некоторую отладку "printf" отследил проблему. Или, по крайней мере, нашел решение.

Следующее является несколько умозрительным относительно того, что происходило.

Ранее был создан, заполнен и передан подпрограмме вариантный массив...

Dim nameList(50) As Variant
... populated ...
Call SomeSub(nameList)
...
sub SomeSub(nameList)

В Sub переменный массив был затем повторен с использованием цикла "For Each" (который потерпел крах)

For outerLoopIndex=0 To 100

    Dim currName
    For Each currName In nameList
        If testName Like currName Then
            addToBucket = True
            Exit For ' skip any others since found a site of interest
        End If
    Next currName

Next outerLoopIndex

Он работал правильно на первом проходе внешнего цикла. Однако данные повреждаются так, что при втором проходе через внешний цикл произошел сбой EXC_BAD_ACCESS.

"Исправление" должно было явно объявить как вариант:

    Dim currName As Variant
    For Each currName In nameList
        ... 

Возможно, это поможет другим людям столкнуться с подобными проблемами. Попробуйте явно объявить переменные. Mac Excel кажется более чувствительным к таким вещам.:)

Другие вопросы по тегам