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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2011, 14:32   #1
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию subscript out of range - как найти ошибку Т_Т

привет всем завсегдатаям)

пытаюсь создать вроде простенький макрос

дано: в строку записаны значения по ячейкам.
задача:
- после определенного диапазона (Selection) надо вставить столько же столбцов, сколько выделено (РАБОТАЕТ)
- собрать массив значений из выделенного диапазона (НЕИЗВЕСТНО)
- расставить эти значения в созданных столбцах таким образом, что если в массиве значение "3", то оно должно быть вставлено в новый 3-й по счету столбец, если "5", то в 5-ый и т.д. в той же строке (ОШИБКА)

помогите разобраться, пожалуйста Т_Т
код и пример прилагаю Расстановка_пример.rar


Код:
Public Ar0() As Integer, j As Variant
Public iCell As Range
Public Rowww As Long, Colmm As Long
Sub EachBrandOnColumns()
    
    Call VBABrand.Subs_.DefinitionSelectionRowCol
    
    'добавление столбцов для нов. вопроса
    For i = 1 To ColmCount
        Columns(Selection.Column + ColmCount).Insert
    Next
    
    CellCount = 0
    For Rowww = FirstRow To MaxRow
        'Call CreateArray
        
        'Определение пустых диапазонов
        '(считаем кол-во ячеек в диапазоне, если все пустые, то 99 +красим)
        For Colmm = FirstCol To MaxCol
            If IsEmpty(Cells(Rowww, Colmm)) Then CellCount = CellCount + 1
            If ColmCount = CellCount Then
                Cells(Rowww, FirstCol).Value = 99
            End If
        Next Colmm
        CellCount = 0
        
        'формируем массив
        ReDim Ar0(j)
        For Each iCell In ActiveSheet.Range(Cells(Rowww, FirstCol), Cells(Rowww, MaxCol))
            If Not IsEmpty(iCell) Then
                ReDim Preserve Ar0(j)
                Ar0(j) = iCell.Value
                j = j + 1
            End If
        Next iCell
        
        'расставляем массив
        If Ar0(0) <> 99 And Ar0(0) <> 98 And Ar0(0) <> 97 Then
            For Each j In Ar0()
                ActiveSheet.Cells(Rowww, (MaxCol + Ar0(j))).Value = Ar0(j)  'ОШИБКА
            Next j
        Else
            Cells(Rowww, MaxCol + 1).Interior.Color.Index = 5
        End If
        Selection.Range.Offset
    Next Rowww
    
End Sub

Последний раз редактировалось Bape}l{ka; 02.12.2011 в 15:36.
Bape}l{ka вне форума Ответить с цитированием
Старый 02.12.2011, 15:08   #2
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Bape}l{ka, не обижайтесь, но у Вас там какой-то велосипед) Директив понаставили, куда столько? Объявляете переменные как "публичные", при этом ставите Option Private Module. Либо это часть какого-то большого проекта, либо...))) Могу только посоветовать Вам пересмотреть написание программного кода с точки зрения объявления переменных, общей логики и синтаксиса.

Объясните подробней, что нужно.

Цитата:
- после определенного диапазона надо вставить столбцы (РАБОТАЕТ)
Какого диапазона? Сколько столбцов?
Цитата:
собрать массив этих значений (НЕИЗВЕСТНО)
Каких этих?

Может попытаться двигаться в этом направлении:
Код:
Sub io()
Dim v
With Selection ' При условии, что диапазон 1
    .Parent.Columns(.Column + .Columns.Count).Insert ' столбец
    v = .Value ' массив (если выделено > 1 ячейки)
End With
End Sub
Тишина – самый громкий звук

Последний раз редактировалось nerv; 02.12.2011 в 15:18.
nerv вне форума Ответить с цитированием
Старый 02.12.2011, 15:35   #3
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

Цитата:
Какого диапазона? Сколько столбцов?
столбцов каждый раз разное количество, но в данном случае их 5 (выделены желтым в примере) - это Selection

Цитата:
собрать массив этих значений (НЕИЗВЕСТНО)
Каких этих?
сори, недоглядела..собственно тех значений, которые в выделенном диапазоне

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

Код:
For Rowww = FirstRow to MaxRow
        'формируем массив
        ReDim Ar0(j)
        For Each iCell In ActiveSheet.Range(Cells(Rowww, FirstCol), Cells(Rowww, MaxCol))
            If Not IsEmpty(iCell) Then
                ReDim Preserve Ar0(j)
                Ar0(j) = iCell.Value
                j = j + 1
            End If
        Next iCell
        
        'расставляем массив
        If Ar0(0) <> 99 And Ar0(0) <> 98 And Ar0(0) <> 97 Then
            For Each j In Ar0()
                ActiveSheet.Cells(Rowww, (MaxCol + Ar0(j))).Value = Ar0(j)  'ОШИБКА
            Next j
        Else
            Cells(Rowww, MaxCol + 1).Interior.Color.Index = 5
        End If
Next Rowww
з.ы.: скорее всего это реально велосипед + часть бОльшего проекта, поэтому Public и прочее... но пока как могу =ь
с массивами у меня дело туго идет, не хватает реальных примеров, при этом мне понятных =ь
может задачу можно реализовать как-то попроще, буду благодарна за предложения

Последний раз редактировалось Bape}l{ka; 02.12.2011 в 15:58.
Bape}l{ka вне форума Ответить с цитированием
Старый 02.12.2011, 16:07   #4
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
- после определенного диапазона (Selection) надо вставить столько же столбцов, сколько выделено (РАБОТАЕТ)
- собрать массив значений из выделенного диапазона (НЕИЗВЕСТНО)
Первые два пункта можно реализовать так. Дальше что?
Код:
Sub io()
Dim v
With Selection ' При условии, что диапазон 1
    .Offset(, .Columns.Count).EntireColumn.Insert
    v = .Value ' массив (если выделено > 1 ячейки)
End With
End Sub
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 02.12.2011, 16:19   #5
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

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

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

Последний раз редактировалось Bape}l{ka; 02.12.2011 в 16:23.
Bape}l{ka вне форума Ответить с цитированием
Старый 02.12.2011, 16:28   #6
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Bape}l{ka, я и сам не знал) По 3-ему вопросу: лучше приложите файл как есть и как должно быть, плюс оставьте то выделение, с кот. предполагается работать.
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 02.12.2011, 16:42   #7
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

вот примерРасстановка_пример2.rar
Bape}l{ka вне форума Ответить с цитированием
Старый 02.12.2011, 16:50   #8
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Так, что ли? : )
Код:
Sub io()
With Selection
    .Offset(, .Columns.Count).EntireColumn.Insert
    .Offset(, .Columns.Count).Value = .Value
End With
End Sub
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 02.12.2011, 17:04   #9
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

нет, не так.. у вас просто копируется выделение в новые столбцы
как раз моя запись, которая не работает, была призвана организовать нужную расстановку

Код:
Cells(, MaxCol + Ar(j)).Value = Ar(j)
MaxCol - это № последней колонки у выделенного диапазона
Bape}l{ka вне форума Ответить с цитированием
Старый 02.12.2011, 17:22   #10
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Bape}l{ka, по приведенному примеру не вижу разницы между тем, что сделал я и Вашим "должно быть".
Цитата:
как раз моя запись, которая не работает, была призвана организовать нужную расстановку
какую? Объясняйте, лично мне ни чего не понятно. Или ждите телепатов)
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Subscript out of range -в чем ошибка Bape}l{ka Microsoft Office Excel 4 14.11.2011 16:26
subscript out of range Bape}l{ka Microsoft Office Excel 2 31.10.2011 12:54
Subscript out of range amator_roma Помощь студентам 1 04.07.2011 11:32
Динамический массив - Subscript out of range Zeraim Microsoft Office Excel 2 29.11.2010 16:28
ReDim и Subscript out of range (Error 9) oldfatham Microsoft Office Excel 5 24.08.2009 18:32