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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2009, 23:23   #1
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию Замена данных в одномерном массиве

Всем привет. Вопрос по VBA в Excel. Мне нужно заменить данніе в одномерном массиве. Пишу такой макрос
Код:
Код:
arLinks = ActiveWorkbook.LinkSources(xlExcelLinks) 
    i = LBound(arLinks) 
    k = UBound(arLinks) 
    Sheets("Лист1").Range(Cells(100 + i, 1), Cells(100 + k, 1)) = Application.WorksheetFunction.Transpose(arLinks) 
    Range(Cells(100 + i, 1), Cells(100 + k, 1)).Replace What:=5, Replacement:=8, LookAt:=xlPart, _ 
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
    arLinks = Sheets("Лист1").Range(Cells(100 + i, 1), Cells(100 + k, 1))
на строке
Sheets("Лист1").Range(Cells(100 + i, 1), Cells(100 + k, 1)) = Application.WorksheetFunction.Trans pose(arLinks)
работа макроса останавливается. Что я делаю не так?
Jaroslav вне форума Ответить с цитированием
Старый 09.06.2009, 04:46   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если при выполнении данного макроса активным является лист "Лист1", то ошибки быть не должно (тогда и ссылку на лист указывать не требуется). В противном случае, ссылку на лист необходимо делать при каждом обращении к ячейке. Так, например, в строке Вашего кода
Код:
Sheets("Лист1").Range(Cells(100 + i, 1), Cells(100 + k, 1)) = Application.WorksheetFunction.Transpose(arLinks)
получается, что обращение к диапазону на листе "Лист1" задается ячейками другого (активного) листа. Что недопустимо. Правильно нужно записывать так:
Код:
With Sheets("Лист1")
        .Range(.Cells(100 + i, 1), .Cells(100 + k, 1)) = Application.WorksheetFunction.Transpose(arLinks)
    End With
Обратите внимание на "точку" в конструкции "With".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.06.2009, 08:25   #3
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Спасибо, SAS888.
Jaroslav вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно программу написать в одномерном массиве!!! Fylhtq Паскаль, Turbo Pascal, PascalABC.NET 8 03.06.2009 12:47
Произведение отрицательных элементов в одномерном массиве - в чём ошибка? Жека:) Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 06.04.2009 16:10
Поиск в одномерном массиве Joxter Помощь студентам 6 13.12.2008 14:19
Колличество четных элементов в одномерном массиве forsy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 21.05.2008 15:01
Как найти проиизведение в одномерном массиве? kitty Помощь студентам 10 30.11.2007 20:30