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 »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
|
|
« Ответ #3 : 15-01-2010 08:10 » |
|
kaktuss, просветите пожалуйста, для чего вам нужны переменные k1, k2 и k3
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #11 : 15-01-2010 10:03 » |
|
kaktuss, это ты так думаешь или так на самом деле.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Naghual
|
|
« Ответ #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
|
|
« Ответ #14 : 15-01-2010 10:57 » |
|
тогда зачем ExecuteExcel4Macro если нужно только содержимое ячеек? Где инициализация k1, k2, k3 ?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
kaktuss
Гость
|
|
« Ответ #15 : 15-01-2010 11:07 » |
|
Во-первых , ExecuteExcel4Macro - это самый надежный и быстрый способ получени я результат а своей задачи, и к тому же без всяких лишних заморочек и вопросов эксела (если ты знаешь еще какие -то способы получения содержимого значения , то опиши. Но не предлагай вписывать формулы или же объединение книг). Во-вторых , "к", в моем случае, равносильно "Dim k"
|
|
« Последнее редактирование: 15-01-2010 11:19 от Sel »
|
Записан
|
|
|
|
Naghual
|
|
« Ответ #16 : 19-01-2010 11:01 » |
|
Ну, начнем с того, что лучше бы открыть книгу один раз в начале цикла и прочесть из нее нужные данные а не открывать книгу каждый раз для каждой строки.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #17 : 19-01-2010 11:17 » |
|
"к", в моем случае, равносильно "Dim k"
Здесь лучше помолчать
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|