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

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

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

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

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

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

привет всем! ))

помогите разобраться, в чем ошибка?? при работе с несколькими книгами неадекватно реагирует на .Selection...
а если даже Selection заменяю цифрами, пишет "Subscript out of range" Т_Т
(excel 2003)

Код:
Private Sub CommandButton_Click()
    Dim Arr() As Integer, i As Integer    'динамич.массив
    Dim Opoznavatel As String, ColNo As Integer, BookName As String, SheetName As String
    Dim C As Range, firstAddress As String

    Opoznavatel = Checked 'TextBoxOpoznavatel.Value
    ColNo = 4 'Columns(TextBoxColNo.Value).Column
    BookName = TextBoxBookName.Value
    SheetName = TextBoxSheetName.Value
    
    'Очищаем массив
    i = 0
    ReDim Arr(i)
    
    MaxRow = 0
    
    'поиск значения, по которому будем определять № строки
    With ActiveWorkbook.ActiveSheet.UsedRange
        Set C = .Find(Opoznavatel, , xlValues, xlWhole)
        If Not C Is Nothing Then
            firstAddress = C.Address
            'MsgBox "firstAddress = " & C.Address
            Do
                C.Interior.ColorIndex = 33
                'переопред-е массива с сохр-ем данных
                ReDim Preserve Arr(i)
                Arr(i) = .Cells(C.Row, ColNo).Value
                i = i + 1
                MaxRow = MaxRow + 1
                Set C = .FindNext(C)
            Loop While Not C Is Nothing And C.Address <> firstAddress
        Else
            MsgBox "Ничего не найдено"
            Exit Sub
        End If
    End With

    'Выводим массив Arr на нужный лист Excel указанной книги
    i = 0
    With Application.Workbooks(BookName).Worksheets(SheetName)
    FirstRow = .Selection.Row  'РУГАЕТСЯ
        For Roww = FirstRow To FirstRow + MaxRow
            .Cells(Roww, .Selection.Column).Value = Arr(i)  'ЛИБО РУГАЕТСЯ ТУТ, ЕСЛИ С ЦИФРАМИ
            i = i + 1
        Next Roww
    End With
     
End Sub
Bape}l{ka вне форума Ответить с цитированием
Старый 14.11.2011, 13:49   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

В неактивной книге (листе) Selection не работает.
будет ругаться....
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 14.11.2011, 13:58   #3
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

оо, вот так получилось!!! только теперь почему то вместо массива у меня выводятся одни нули Т_Т

Код:
    'Выводим массив Arr на нужный лист Excel указанной книги
    i = 0
    Application.Workbooks(BookName).Worksheets(SheetName).Activate
    With ActiveWorkbook.ActiveSheet
    Colm = Selection.Column
    FirstRow = Selection.Row 
        
        For Roww = FirstRow To (FirstRow + MaxRow - 1)
            .Cells(Roww, Colm).Value = Arr(i)
            i = i + 1
        Next Roww
    End With
    MsgBox "Готово!"
вот файл OUTPUT.rar

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

Цитата:
Сообщение от Bape}l{ka Посмотреть сообщение
'Очищаем массив
i = 0
ReDim Arr(i)
Позвольте узнать, от чего вы очищаете Только что созданный массив?

Цитата:
Сообщение от Bape}l{ka Посмотреть сообщение
почему то вместо массива у меня выводятся одни нули Т_Т
Насколько мне известно, для вывода на лист, массив должен быть двухмерным, т.е.
Код:
ReDim Arr(1 to i, 1 to 1)
заполнять соответственно
Код:
 Arr(i,1) = .Cells(C.Row, ColNo).Value
вывод приблизительно так
Код:
[A1].Resize(i) =Arr()
Тишина – самый громкий звук

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

спасибо всем! ошибку нашла (чесно говоря, по-моему какой-то глюк, вобщем я просто переименовала одну переменную и все заработало =ь)

если кому нада, выкладываю.. макрос по определенному слову (и указанной колонке) собирает из разных таблиц данные в одну в указанную книгу
соответственно код формы:

Код:
Option Explicit
Option Compare Text

Private Sub CommandButton_Click()
    Dim Arr() As Double, i As Integer    'динамич.массив
    Dim iText As String, ColNo As Integer, BookName As String, SheetName As String
    Dim C As Range, firstAddress As String

    iText = TextBoxOpoznavatel.Value
    ColNo = Columns(TextBoxColNo.Value).Column
    BookName = TextBoxBookName.Value
    SheetName = TextBoxSheetName.Value
    
    'Очищаем массив
    i = 0
    ReDim Arr(i)
    
    MaxRow = 0
    
    'поиск значения, по которому будем определять № строки
    With ActiveWorkbook.ActiveSheet.UsedRange
        Set C = .Find(iText, , xlValues, xlWhole)
        If Not C Is Nothing Then
            firstAddress = C.Address
            'MsgBox "firstAddress = " & C.Address
            Do
                C.Interior.ColorIndex = 33
                'переопред-е массива с сохр-ем данных
                ReDim Preserve Arr(i)
                'MsgBox "C.Row = " & C.Row & ", ColNo = " & ColNo
                .Cells(C.Row, ColNo).Interior.ColorIndex = 38
                Arr(i) = .Cells(C.Row, ColNo).Value
                i = i + 1
                MaxRow = MaxRow + 1
                Set C = .FindNext(C)
            Loop While Not C Is Nothing And C.Address <> firstAddress
        Else
            MsgBox "Ничего не найдено"
            Exit Sub
        End If
    End With

    'Выводим массив Arr на нужный лист Excel указанной книги
    i = 0
    Application.Workbooks(BookName).Worksheets(SheetName).Activate
    With ActiveWorkbook.ActiveSheet
    Colm = Selection.Column
    FirstRow = Selection.Row '.Selection.Row
        
        For Roww = FirstRow To (FirstRow + MaxRow - 1)
            .Cells(Roww, Colm).Value = Arr(i) '.Selection.Column
            i = i + 1
        Next Roww
    End With
    'задаем формат ячейки - числа десятичные
    Range(Cells(FirstRow, Colm), Cells(FirstRow + MaxRow - 1, Colm)).NumberFormat = "0.0"
    MsgBox "Готово!"
     
End Sub
Bape}l{ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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
Ошибка Relative jump out of range vsrmis Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 26.05.2011 00:41
Динамический массив - 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