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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2009, 09:05   #1
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию Помогите "расшифровать" макрос

Хочу переделать макрос под свой файл, а в макросы только начал изучать
Вот код макроса

Public Sub апр() название макроса
With Workbooks("allwork-2009-01.xls").Sheets("01") открываем книгу и лист откуда брать значения
For i = 3 To 200 смотрим последовательно строки от 3 до 200, что означает символ i
If .Cells(i, 5).Value <> 451 Then GoTo 10 если находим значение равное 451, то переходим к 10, а что такое 10 и откуда оно взялось?
For k = 9 To 108 смотрим последовательно строки от 9 до 108, что означает символ k
If Cells(k, 1).Value = .Cells(i, 7).Value Then Cells(k, 2).Value = .Cells(i, 10).Value: Cells(k, 6).Value = .Cells(i, .Value: GoTo 10 здесь непонятно,прошу помощи
Next k
10
Next i
End With
End Sub
kzld вне форума Ответить с цитированием
Старый 19.07.2009, 09:08   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
здесь непонятно,прошу помощи
Думаете, нам понятно, чего Вы пытаетесь добиться?

Подробно опишите, что должен делать макрос - тогда поможем (и без всяких примеров)
Макрос будет запускаться из обрабатываемого файла?
Или надо открывать определённый файл с диска?
EducatedFool вне форума Ответить с цитированием
Старый 19.07.2009, 09:22   #3
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Думаете, нам понятно, чего Вы пытаетесь добиться?

Подробно опишите, что должен делать макрос - тогда поможем (и без всяких примеров)
Макрос будет запускаться из обрабатываемого файла?
Или надо открывать определённый файл с диска?
Макрос запускается из файла активного в данный момент "kassa_2009.xls"
Макрос просматривает столбец E файла "allwork-2009-01.xls"
При нахождении в ячейке значения равному 451 , смотрит на ячейку G и считывает оттуда значение (в ячейке G - дата).
Далее просматривает столбец A файла "kassa_2009.xls" находит первое (их несколько) значение равное столбцу G файла "allwork-2009-01.xls"
Далее копирует по строчке в столбец B файла "kassa_2009.xls" значение столбца I файла "allwork-2009-01.xls"
Далее копирует по строчке в столбец G файла "kassa_2009.xls" значение столбца H файла "allwork-2009-01.xls"

Другими словами
Имеется журнал операций "allwork-2009-01.xls",
столбцы ДЕБЕТ, КРЕДИТ, ДАТА, СУММА, НАИМЕНОВАНИЕ
Имеется второй файл - "kassa_2009.xls"
надо из первого файла заполнить второй, выбрав только кассовые операции и поместить значения в соответствующие ячейки файла "kassa_2009.xls" (т.е. дату в дату, сумму в сумму)

Если обьяснил непонятно, могу приложить файл примера
kzld вне форума Ответить с цитированием
Старый 19.07.2009, 11:59   #4
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Символы i и k это переменные для организации цикла. 10 - это номер строки куда переходит макрос в случае невыполнения условия.
Код:
If Cells(k, 1).Value = .Cells(i, 7).Value Then Cells(k, 2).Value = _
            .Cells(i, 10).Value: Cells(k, 6).Value = .Cells(i, 8).Value: GoTo 10
Это и есть то, что Вы просили: Если значение ячейки (номер строки =k, номер столбца=1) активного листа равно значению ячейки (номер строки =i, номер столбца=1) в проверяемой книге, то ячейка (строка=k, столбец 2) активной книги равна ячейке (строка=i, столбец 10) проверяемой книги, а ячейка (строка=k, столбец 6) активной книги равна ячейке (строка=i, столбец 8) проверяемой книги.
pivas вне форума Ответить с цитированием
Старый 19.07.2009, 12:13   #5
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от pivas Посмотреть сообщение
Символы i и k это переменные для организации цикла. 10 - это номер строки куда переходит макрос в случае невыполнения условия.
Код:
If Cells(k, 1).Value = .Cells(i, 7).Value Then Cells(k, 2).Value = _
            .Cells(i, 10).Value: Cells(k, 6).Value = .Cells(i, 8).Value: GoTo 10
Это и есть то, что Вы просили: Если значение ячейки (номер строки =k, номер столбца=1) активного листа равно значению ячейки (номер строки =i, номер столбца=1) в проверяемой книге, то ячейка (строка=k, столбец 2) активной книги равна ячейке (строка=i, столбец 10) проверяемой книги, а ячейка (строка=k, столбец 6) активной книги равна ячейке (строка=i, столбец 8) проверяемой книги.
Спасибо. Что то начинает получаться. Теперь возникло условие.
В один день может быть несколько однотипных операций. Как добавить следующий параметр:
Если значение ячейки (номер строки =k, номер столбца=3) активного листа уже занято каким либо значением, то перейти на строчку ниже и вписать значения, не обращая внимания на условие Если значение ячейки (номер строки =k, номер столбца=1) активного листа равно значению ячейки (номер строки =i, номер столбца=1) в проверяемой книге
kzld вне форума Ответить с цитированием
Старый 19.07.2009, 12:52   #6
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Что ж Вы сразу не сказали. Попробуйте так:
Вложения
Тип файла: rar second.rar (25.4 Кб, 14 просмотров)
pivas вне форума Ответить с цитированием
Старый 20.07.2009, 07:17   #7
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от pivas Посмотреть сообщение
Что ж Вы сразу не сказали. Попробуйте так:
Попробовал, но почему обрабатываются не все строки. Имеется пропуски.
Более подробно в приложенном файле
Вложения
Тип файла: rar kassa03.rar (59.2 Кб, 18 просмотров)
kzld вне форума Ответить с цитированием
Старый 21.07.2009, 06:41   #8
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от kzld Посмотреть сообщение
Попробовал, но почему обрабатываются не все строки. Имеется пропуски.
Более подробно в приложенном файле
Жду вот понимаешь, жду помощи.
А никто на меня внимания не обращает
АБЫДНА
kzld вне форума Ответить с цитированием
Старый 21.07.2009, 10:19   #9
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от kzld Посмотреть сообщение
Жду вот понимаешь, жду помощи.
А никто на меня внимания не обращает
АБЫДНА
Ну очень надо, ответьте кто нибудь
kzld вне форума Ответить с цитированием
Старый 21.07.2009, 10:58   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так что ж ответить, если сказать по существу нечего?!

Вы знаете, какую Вы делаете ошибку?
вместо того, чтобы чётко сформулировать задание - что, куда и в каком случае переписывается, Вы пытаетесь заставить работать макрос. (причём, надо отметить - жуткий макрос почему жуткий? потому что в нём жестко заданы константы - начала диапазона, конец диапазона и т.д. и т.п. поэтому добавление строки, удаление строки могут привести к самым разнообразным последствиям, вплоть до полной нераспособности всего макроса!

[Добавлено]
и ещё, в книге kassa_2009.xlsm у Вас
два макроса: kassakredit01() и kassadebet01() — Вы какой из них терзаете?

Последний раз редактировалось Serge_Bliznykov; 21.07.2009 в 11:05.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"а" и "б" не хотят посчитаться, помогите мне их посчитать) Лука Microsoft Office Excel 5 10.12.2010 02:43
Помогите пожайлуста найти, кто человек "вконтакте", зная его "мэйл" Аксюнька1990 Помощь студентам 1 12.06.2009 06:16
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Макрос "дописывает" не нужные параметры DrManual Microsoft Office Word 4 20.02.2009 17:25
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51