Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2015, 09:42   #1
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию Проблемка с ReDim Preserve

Добрый день!

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

В модуле листа:
Код:
Private Sub CheckBox1_Click()
Dim arr, i, arrP2

arr = Array(35, 39, 43, 47, 51)
arrP2 = Array(422, 423)

If CheckBox1 = True Then
    For i = 0 To UBound(arr)
        If Columns(arr(i)).ColumnWidth > 0 Then
            Columns(arr(i)).EntireColumn.Hidden = True
            ReDim Preserve arrP2(UBound(arrP2) + 1)
            arrP2(UBound(arrP2)) = arr(i)
        End If
    Next
    Else
    For i = 0 To UBound(arrP2)
        Columns(arrP2(i)).EntireColumn.Hidden = False
    Next
End If
End Sub
MaxxVer вне форума Ответить с цитированием
Старый 16.07.2015, 10:15   #2
Кардаган
Форумчанин
 
Регистрация: 07.07.2015
Сообщений: 121
По умолчанию

Цитата:
Сообщение от MaxxVer Посмотреть сообщение
Добрый день!

Не получается заставить макрос работать. Помогите пожалуйста найти ошибку. Уже второй день бьюсь и не пойму что не так...
Макрос должен скрывать столбцы при установке галочки на чекбоксе, а при снятии галочки раскрывать только те что были скрыты чекбоксом ранее (ну плюс 2 столбца заранее заданных, не знал как без них обойтись).
Так а что не так? Как он на самом деле работает, и что не делает? Или на какой строке вываливается?
Кардаган вне форума Ответить с цитированием
Старый 16.07.2015, 10:27   #3
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Скрывает столбцы, но потом не раскрывает. Прогоняю F8 вроде заполняет массив arrP2, но если в конце кода пишу MsgBox arrP2(2), то ругается "subscript out of range".
MaxxVer вне форума Ответить с цитированием
Старый 16.07.2015, 12:10   #4
Кардаган
Форумчанин
 
Регистрация: 07.07.2015
Сообщений: 121
По умолчанию

Слегка изменил Ваш код. Пробуйте:
Код:
Private Sub CheckBox1_Click()
Dim arr, i, arrP2

arr = Array(35, 39, 43, 47, 51)
arrP2 = Array(422, 423)

If CheckBox1 = True Then
    For i = 0 To UBound(arr)
        If Columns(arr(i)).ColumnWidth > 0 Then
            Columns(arr(i)).EntireColumn.Hidden = True
            ReDim Preserve arrP2(UBound(arrP2) + 1)
            arrP2(UBound(arrP2)) = arr(i)
        End If
    Next
End If
    For i = 0 To UBound(arrP2)
        Columns(arrP2(i)).EntireColumn.Hidden = False
    Next
End Sub
Кардаган вне форума Ответить с цитированием
Старый 16.07.2015, 12:12   #5
Кардаган
Форумчанин
 
Регистрация: 07.07.2015
Сообщений: 121
По умолчанию

Или можно как у Вас оставить, только Else надо левее поместить:
Код:
Private Sub CheckBox1_Click()
Dim arr, i, arrP2

arr = Array(35, 39, 43, 47, 51)
arrP2 = Array(422, 423)

If CheckBox1 = True Then
    For i = 0 To UBound(arr)
        If Columns(arr(i)).ColumnWidth > 0 Then
            Columns(arr(i)).EntireColumn.Hidden = True
            ReDim Preserve arrP2(UBound(arrP2) + 1)
            arrP2(UBound(arrP2)) = arr(i)
        End If
    Next
Else
    For i = 0 To UBound(arrP2)
        Columns(arrP2(i)).EntireColumn.Hidden = False
    Next
End If
End Sub
Иначе макрос это Else не понимает.
Кардаган вне форума Ответить с цитированием
Старый 16.07.2015, 12:17   #6
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Цитата:
Сообщение от Кардаган Посмотреть сообщение
Или можно как у Вас оставить, только Else надо левее поместить:
Код:
Private Sub CheckBox1_Click()
Dim arr, i, arrP2

arr = Array(35, 39, 43, 47, 51)
arrP2 = Array(422, 423)

If CheckBox1 = True Then
    For i = 0 To UBound(arr)
        If Columns(arr(i)).ColumnWidth > 0 Then
            Columns(arr(i)).EntireColumn.Hidden = True
            ReDim Preserve arrP2(UBound(arrP2) + 1)
            arrP2(UBound(arrP2)) = arr(i)
        End If
    Next
Else
    For i = 0 To UBound(arrP2)
        Columns(arrP2(i)).EntireColumn.Hidden = False
    Next
End If
End Sub
Иначе макрос это Else не понимает.
не просвятите как VBA воспринимает пробелы и размещение текста команд макроса?
27102014 вне форума Ответить с цитированием
Старый 16.07.2015, 12:23   #7
Кардаган
Форумчанин
 
Регистрация: 07.07.2015
Сообщений: 121
По умолчанию

Цитата:
Сообщение от 27102014 Посмотреть сообщение
не просвятите как VBA воспринимает пробелы и размещение текста команд макроса?
У меня вываливался сейчас с ошибкой "Else without If", когда я с ним игрался, при этом ни один из If, ни Else я не трогал. Перевёл Else левее - перестал вываливаться.
Кардаган вне форума Ответить с цитированием
Старый 16.07.2015, 12:29   #8
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Когда игрались, то нарушили синтаксис оператора If Then, местоположение в данном случае вообще не причем.

И вообще ошибка с массивами данных
27102014 вне форума Ответить с цитированием
Старый 16.07.2015, 12:30   #9
Кардаган
Форумчанин
 
Регистрация: 07.07.2015
Сообщений: 121
По умолчанию

Цитата:
Сообщение от 27102014 Посмотреть сообщение
Когда игрались, то нарушили синтаксис оператора If Then, местоположение в данном случае вообще не причем.

И вообще ошибка с массивами данных
Ну извините, пожалуйста.
Так а первый мой вариант тоже не подойдёт?
Кардаган вне форума Ответить с цитированием
Старый 16.07.2015, 12:57   #10
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Уважаемый Кардаган!
Форум устроен так - есть вопросы, создавай тему, может помогут бесплатно, есть раздел Фриланс - там точно помогут, но за деньги.

Нет вопросов - смотри темы, если знаешь, подскажи, не знаешь - пройди мимо.
В данной теме ошибка с массивами данных - даже в теме написано.
Я не знаю в чем здесь конкретно ошибка, никогда не работал с Redim

И прекратите, пжл, писать в личку - это было предложение для одного пользователя из личной симпатии
27102014 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SVG и transform-style(preserve-3d) AlexandrNB HTML и CSS 1 26.01.2015 14:13
Динамический массив(Redim) Visual Basic. Army Помощь студентам 1 16.06.2011 20:27
ПРОБЛЕМКА Kirill99 Помощь студентам 8 19.04.2010 18:51
ReDim и Subscript out of range (Error 9) oldfatham Microsoft Office Excel 5 24.08.2009 18:32