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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2010, 10:33   #21
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Код:
If aa(k, 1) = b(i, 3) Then 'если в кассе КРЕДИТ НАИМЕНОВАНИЕ пусто, смотрим кассу столбец 1 дата, если совпадает тогда
                           a(k, 1) = b(i, 9) 'если в кассе КРЕДИТ наименование пусто, смотрим в работу столбец 9 РНН, копируем из работы в кассу
                           a(k, 2) = b(i, 10) 'если в кассе КРЕДИТ наименование пусто, смотрим в работу столбец 14 №счёта, копируем из работы в кассу
                           a(k, 3) = b(i, 12) 'если в кассе КРЕДИТ наименование пусто, смотрим в работу столбец 15 дата счёта, копируем из работы в кассу
                           a(k, 4) = b(i, 4) 'если в кассе КРЕДИТ наименование пусто, смотрим в работу столбец 4 сумма, копируем из работы в кассу
А не из-за это-го ли? Ведь в ячейке, по ходу выполнения макроса уже вписано значение
kzld вне форума Ответить с цитированием
Старый 13.12.2010, 10:40   #22
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Разобрался
Ближе к концу макроса была строчка
Код:
Range(Sht1.Cells(17, 10), Sht1.Cells(655, 11)) = a
Заменил 11 на 13 и заработало
kzld вне форума Ответить с цитированием
Старый 13.12.2010, 10:45   #23
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Только там и выше тогда тоже нужно исправить, где массив задаётся
a = Range(Sht1.Cells(8, 10), Sht1.Cells(655, 11)) ' массив данных
Хотя это вероятно уже исправлено.

Хорошо, что разобрались, пока я комментарий писал.
Но раз уж написал :
Мне сейчас некогда снова качать пример и вникать в алгоритм, но если копируются a(k, 1) = b(i, 9), то и остальное будет копироваться.
Если данных нет - значит данных и не было . Поэтому посмотрите, что там в этих ячейках.
А проверка на пусто выше:
If a(k, 1) = 0 Then

Насчёт "неделю нажимать F8" - можно поставить "точки останова" в нужных местах - так проскочить длинные циклы и отследить нужный кусок.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 13.12.2010 в 10:48.
Hugo121 вне форума Ответить с цитированием
Старый 26.01.2011, 13:04   #24
lalike
Пользователь
 
Регистрация: 20.01.2011
Сообщений: 21
По умолчанию

а как сделать так, чтобы

в файле источнике в столбе X строке Y брались данные,

потом в другом файле в столбе X1 сверялось с данными и если в строке Y1 оно сошлось, то бралось бы значение из столба Z1 строки Y1

и вставлялось бы в файл источник в столб Z строку Y?
lalike вне форума Ответить с цитированием
Старый 26.01.2011, 14:16   #25
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Именно под эту задачу:
http://www.excelworld.ru/index/comparefiles_find/0-25
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.01.2013, 09:11   #26
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Public Sub materialykredit01()
Dim Sht1 As Worksheet, Sht2 As Worksheet, flag As Boolean
For Each Sht1 In Workbooks("100.00.030_registr.xlsm" ).Worksheets 'это файл 100.00.030_registr.xlsm это файл получатель
flag = False 'false если неправильно
For Each Sht2 In Workbooks("MNT.xlsx").Worksheets 'это файл MNT.xlsx это файл источник
If Sht2.Name = Sht1.Name Then 'это сооветствие имён листов в книгах
flag = True 'true - правильно
Exit For 'выход
End If
Next 'следующий
If flag Then 'если флаг then (затем) тогда
Sht1.Range("E17:U654").ClearContent s 'очищаем предыдущие значения в файле приемнике
For I = 3 To 5000 'просматриваем файл "MNT.slsx" от 3 строки до 5000
If Sht2.Cells(I, 6).Value = 202 And Sht2.Cells(I, 8).Value <> "" Then 'просматриваем столбец 6 "MNT.xlsx" КРЕДИТ ищем 202, просматриваем столбец 8 дата
For k = 17 To 664 'ищем в файле приемнике совпадение даты
If Sht1.Cells(k, 5).Value = 0 And Sht1.Cells(k, 1).Value = Sht2.Cells(I, 8).Value Then 'если в файле приемнике РНН пусто, смотрим файл приемник столбец 1 дата, если совпадает тогда
Sht1.Cells(k, 5).Value = Sht2.Cells(I, 14).Value 'если в файле приемнике РНН пусто, смотрим в работу столбец 14 РНН, копируем из работы в кассу
Sht1.Cells(k, 13).Value = Sht2.Cells(I, 20).Value 'если в файле приемнике РНН пусто, смотрим в файл источник столбец 14 РНН, копируем из источника в получатель
Exit For
End If
Next k
End If
Next I
End If
Next
End Sub
Макрос делает следующее :
Просматривает файл источник, находит в столбце 6 значение 220
Далее макрос "запоминает" значение в столбце 14 файла источника и "запоминает" дату в файле источнике в столбце 8 а потом ищет соответствие дат в файле получателе. Как только найдется совпадение даты,макрос копирует значение из столбца 14 файла источника в столбец 5 файла получателя и соответственно из столбца 20 в столбец 13
Еще хочу дополнить макрос - но не знаю как
Желаю что бы макрос просматривал файл источник и брал из него значение расположенное в столбце 9 и копировал бы значение в файл приемник в столбец 21

С НОВЫМ ГОДОМ

Неужели никто не подскажет ?

Последний раз редактировалось kzld; 07.01.2013 в 09:07.
kzld вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вытащить данные из бинарного файла Sanprof Общие вопросы Delphi 21 25.06.2010 10:37
Как "вытащить" данные из 1С 7.07.1 Феска БД в Delphi 2 18.03.2009 23:39
Вытащить данные из MySQL Droid PHP 3 22.12.2008 23:23
Помогите вытащить из строки нужные данные! Romashkaz Общие вопросы C/C++ 0 22.11.2008 13:30
Как вытащить данные из Excel в бд dephi, а потом (после работы с данными) сформировать новый файл excel. Геля БД в Delphi 1 10.04.2007 15:11