2014-12-31 3 views
0

Я не могу понять, почему мой файл рабочей книги excel продолжает разбиваться каждый раз, когда я открываю файл.Excel Сбой при открытии книги

У меня есть этот обработчик событий, который, я уверен, вызывает проблему.

Option Explicit 

Private Sub Workbook_Open() 
    On Error Resume Next 
    CurrEntities = Array("Curr1,Ent1", "Curr2,Ent2", "Curr3,Ent3") 
End Sub 

CurrEntities объявляется открытым в отдельном модуле.

Public CurrEntities() As Variant 

Когда я пытаюсь закомментируйте строку - CurrEntities = Array ("Curr1, Ent1", "Curr2, ent2", "Curr3, Ent3"), файл может быть открыт без проблем.

Так странно, что он не дает никакой ошибки во время выполнения, он просто выдает сообщение «Microsoft Excel перестает работать», а затем Excel закрывается.

Есть ли что-то, что я пропустил или нарушил объявление переменной массива?

+0

Есть ли у вас какой-либо другой код, например 'Auto_Open()' sub? - хотя вы неверно указали эту переменную и использование оператора «On Error Resume Next» очень плохое, эти проблемы не обязательно могут привести к сбою приложения. –

+0

Никакого другого кода в стороне от этого события. Если переменная объявлена ​​неправильно, она должна отображать ошибку во время выполнения, но она действует по-разному, это приводит к сбою Excel в отображении «Microsoft Excel перестала работать». – hymes

+0

Я поместил ваш код в новую таблицу Excel 2013, и он открывается без каких-либо ошибок. Можете ли вы попробовать скопировать код в новую таблицу, чтобы узнать, все еще ли вы получаете ошибку? – DeanOC

ответ

0

Вышеприведенная декларация и использование не имеют проблем. Я обнаружил и исправил проблему, когда пытался создать другой файл и использовал только необходимую переменную для тестирования. Проблема была вызвана другой переменной, которая объявлена ​​неверно:

Public CoCodes("00123", "00456", "00789") As String 

Я удалил эту строку из своего кода, и приведенный выше код работал отлично.

1
Public CurrEntities() As Variant 

означает: объявить массив вариантов.

Заменить:

Public CurrEntities As Variant 

и все должно быть в порядке;)

Если ... вы не хотите использовать массив:

Public CurrEntities() As Variant 

Sub Test() 
Dim i As Integer, j As Integer 
Dim curent As Variant 

CurrEntities = Array(Array("a", "b"), Array("c", "d")) 

For i = LBound(CurrEntities()) To UBound(CurrEntities) 
    curent = CurrEntities(i) 
    Debug.Print "---=== " & i & " ===---" 
    For j = LBound(curent) To UBound(curent) 
     Debug.Print curent(j) 
    Next 
Next 

End Sub 

Приветствия,
Maciej

+0

Да, я хочу массив. Пробовал ваш пример CurrEntities = Array (Array («a», «b»), Array («c», «d»)), но та же проблема. – hymes

+0

@hymes, вы пробовали его в новой книге? –

+0

У меня есть другой файл такой же, как это, используя переменную public массива, но она была сохранена как более низкая версия Excel 2003 и ее работоспособность. Этот файл, который я сейчас сохранил, как Excel 2012, потому что мне нужно больше количества строк, и я не могу использовать Excel 2003 из-за ограниченных строк. Это как-то связано с проблемой? – hymes

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