Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите упростить код  (Прочитано 18392 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
kaktuss
Гость
« : 15-01-2010 07:33 » 

ub olg()
    Dim i As Long: Application.ScreenUpdating = False
On Error GoTo ErrorHandler
    For i = 1 To Cells(Rows.Count, 6).End(xlUp).Row
                          
                       ' ячейка: путь к файлу        ячейка: название файла    нужная ячейка в файле
h1 = ExecuteExcel4Macro("'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j36").Address(, , xlR1C1))
k1 = k1 + h1
ActiveWorkbook.Worksheets("57").Range("B1").Value = k1 'ячейка в моем экселе

                       ' ячейка: путь к файлу        ячейка: название файла    нужная ячейка в файле
h2 = ExecuteExcel4Macro("'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j37").Address(, , xlR1C1))
k2 = k2 + h2
ActiveWorkbook.Worksheets("57").Range("B2").Value = k2 'ячейка в моем экселе

                       ' ячейка: путь к файлу        ячейка: название файла    нужная ячейка в файле
h3 = ExecuteExcel4Macro("'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j38").Address(, , xlR1C1))
k3 = k3 + h3
ActiveWorkbook.Worksheets("57").Range("B3").Value = k3 'ячейка в моем экселе

    Next
ErrorHandler:
End Sub


Подскажите, пожалуйста, как можно упростить код, потому что таких файлов у меня много.
« Последнее редактирование: 15-01-2010 07:36 от Sel » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 15-01-2010 07:39 » 

Цикл с относительной адресацией нужен, только синтаксис я не помню (
« Последнее редактирование: 15-01-2010 07:43 от Sel » Записан

kaktuss
Гость
« Ответ #2 : 15-01-2010 08:09 » 

Ну, а хоть примерчик какой-то можнО?
« Последнее редактирование: 15-01-2010 11:11 от Sel » Записан
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #3 : 15-01-2010 08:10 » 

kaktuss, просветите пожалуйста, для чего вам нужны переменные k1, k2 и k3
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 15-01-2010 08:11 » 

что здесь упрощать?
при ответе пользуй теги [code][/code] для вставки кода, и форматируй, пожалуйста, код.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
kaktuss
Гость
« Ответ #5 : 15-01-2010 08:34 » 

Объясню, для чего переменная "к1", "к2", "к3":

у меня есть таблица.  Я собираю данные из нескольких файлов с такой же таблицЕй (ну понятно, что цифры разные).
Через "h1" я собираю данные соответственно из определенной ячейки всех файлов.
"k1 = k1 + h1" - это я уже суммирую данные и эту сумму записываю в ячейку своей таблицы на лист "57":
ActiveWorkbook.Worksheets("57").Range("j36").Value = k1


Упростить тут, если это можно, хотелось бы не описывать "поиск" цифр по каждой ячейке Range("j36"), Range("j37"), Range("j37") и т.д., а чтоб сразу по диапазону, например, с ячейки j36 по j37
« Последнее редактирование: 15-01-2010 11:17 от Sel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 15-01-2010 08:55 » 

kaktuss,
т.е. k1 - глобальная

Избавляемся от h1

k1 = k1 + ExecuteExcel4Macro("'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j36").Address(, , xlR1C1))

Но, мне например, нравится такой стиль как у тебя, очень помогает при отладке.

А скажи
ExecuteExcel4Macro - какую функцию вызывает? или название этой функции находится в ячейках?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
kaktuss
Гость
« Ответ #7 : 15-01-2010 09:10 » 

нет, это просто стандартный метод ExecuteExcel4Macro выполняет код Excel 4.0 и возвращает результат
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 15-01-2010 09:34 » 

kaktuss, ты меня не путай
Цитата
This example runs the GET.CELL(42) macro function on cell C3 on Sheet1 and then displays the result in a message box. The GET.CELL(42) macro function returns the horizontal distance from the left edge of the active window to the left edge of the active cell. This macro function has no direct Visual Basic equivalent.

Worksheets("Sheet1").Activate
Range("C3").Select
MsgBox ExecuteExcel4Macro("GET.CELL(42)")

И все же какую функцию вызывает - просто интересно.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #9 : 15-01-2010 09:40 » 

Ок. Сейчас распутаемся!  Улыбаюсь

kaktuss, что возвращает строка: "'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j36").Address(, , xlR1C1) ?
« Последнее редактирование: 15-01-2010 11:18 от Sel » Записан
kaktuss
Гость
« Ответ #10 : 15-01-2010 09:42 » 

Ну, так понимаю, ExecuteExcel4Macro служит для обращения к тому или иному объекту.

Строка: "'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j36").Address(, , xlR1C1) возвращает значение ячейки j36
« Последнее редактирование: 15-01-2010 11:10 от Sel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 15-01-2010 10:03 » 

kaktuss, это ты так думаешь или так на самом деле.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #12 : 15-01-2010 10:11 » 

kaktuss, приведи хоть одно ЭТО возвращаемое значение
Записан
kaktuss
Гость
« Ответ #13 : 15-01-2010 10:36 » 

Вот файл, пример находиТСя в архиве 57.rar, в этом же архИве есть архив с файлами.

* 57.rar (37.27 Кб - загружено 1005 раз.)
« Последнее редактирование: 15-01-2010 11:09 от Sel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 15-01-2010 10:57 » 

тогда зачем  ExecuteExcel4Macro если нужно только содержимое ячеек?
Где инициализация k1, k2, k3 ?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
kaktuss
Гость
« Ответ #15 : 15-01-2010 11:07 » 

Во-первых, ExecuteExcel4Macro - это самый надежный и быстрый способ получения результата своей задачи, и к тому же без всяких лишних заморочек и вопросов эксела (если ты знаешь еще какие-то способы получения содержимого значения, то опиши. Но не предлагай вписывать формулы или же объединение книг). Внимание! Говорит и показывает...

Во-вторых, "к", в моем случае, равносильно "Dim k" RTFM
« Последнее редактирование: 15-01-2010 11:19 от Sel » Записан
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #16 : 19-01-2010 11:01 » 

Ну, начнем с того, что лучше бы открыть книгу один раз в начале цикла и прочесть из нее нужные данные а не открывать книгу каждый раз для каждой строки.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 19-01-2010 11:17 » 

Цитата
"к", в моем случае, равносильно "Dim k"
Здесь лучше помолчать
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines