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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2010, 10:11   #21
MrGB
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 32
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Если можете.киньте файл на мыло strojservis собака nxt.ru
посмотрю.в чем проблема
к сожалению не могу( информация считается конфиденциальной. Я в Вашем макросе изменил число столбцов - 25 и столбец для подсчета количества записей
MrGB вне форума Ответить с цитированием
Старый 29.10.2010, 11:05   #22
MrGB
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 32
По умолчанию

Hugo121

как в Вашем макросе сохранить формат столбцов при копировании?
При копировании 20ти-значного числа, записанного строкой, оно становится числом и теряются цифры(

Я Вам в личку писал сообщения)

Последний раз редактировалось MrGB; 29.10.2010 в 11:09.
MrGB вне форума Ответить с цитированием
Старый 29.10.2010, 11:32   #23
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Сохранить сложно. Но ведь можно задать при создании листа:
Код:
        If Not Sh_Exist(shname) Then
            Sheets.Add.Name = shname
            Sheets(shname).Columns("C:C").NumberFormat = "@"
            Sheets("Лист1").Range("A1:C1").Copy Sheets(shname).Range("A1")
        End If
Проверил - нули остаются, если они были в исходных номерах.
Т.е. если изначально номер как текст, с ведущими нулями, то он такой и в массиве. А именно после выгрузки на лист, если формат на листе общий, то Эксель эти нули откидывает. И кстати может и конец испортить, если знаков много
Личку заметил только сейчас.
Про накопление в массиве - сложно, не получается. Потому что изначально количество массивов неизвестно, а создать их динамически кодом не получается.
Может кто другой подскажет? Как создать массивы например именно для 10-го листа и например для 5-го, чтобы туда складывать нужные записи?
Если Вы точно знаете максимальное количество счетов, то можно заранее сделать например 10 массивов размером с исходный, туда сложить данные, потом сразу выгрузить. Но если вдруг появится клиент с большим числом счетов?
Как кстати коды на ADO работают - может там проще это решить?
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 29.10.2010 в 11:45.
Hugo121 вне форума Ответить с цитированием
Старый 29.10.2010, 17:22   #24
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Просто из спортивного интереса
Вложения
Тип файла: zip output.v3.zip (119.0 Кб, 14 просмотров)
nilem вне форума Ответить с цитированием
Старый 29.10.2010, 17:40   #25
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Интересно
Дома на 2003 заценю - тут на 2000 не проходит
m = WorksheetFunction.Max(WorksheetFunc tion.Index(x, 0, 4))
Но если не секрет - кто победил?

Кстати - Function Sh_Exist(sName As String) это не моё, это уже народное наверно
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.10.2010, 17:47   #26
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от nilem Посмотреть сообщение
Просто из спортивного интереса
нормально отработал.

То Hugo121 главное не победа .главное выполнить пожелания(заказ)клиента
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 29.10.2010, 17:53   #27
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Да в общем за то и боремся - лучше, быстрее, выше
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.10.2010, 00:30   #28
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Проверил - хорошо! В 5 раз быстрее моего. Что-то мне в голову такой простой ход не пришёл - каждого пометить.
А вместо WorksheetFunction.Max для 2000 можно просто в процессе запоминать максимальное в переменную. Может будет чуть помедленнее, но ненамного.
Только мелочи подправить - опять заменить привязку к фамилии на привязку к номеру, ну и формат нужных колонок текстовый добавить.

P.S. Заменил WorksheetFunction.Max для 2000 на
Код:
    For i = 1 To UBound(x, 1)
        If Not .Exists(x(i, 1)) Then
            .Add Key:=x(i, 1), Item:=1
        Else
            .Item(x(i, 1)) = .Item(x(i, 1)) + 1
            mm = .Item(x(i, 1)):  If mm > m Then m = mm
        End If
    Next i
Интересный эффект - в 2003 стало не медленнее, может даже чуть быстрее - отрабатывает около 1.14 сек., зато на 2000 за 0,32-0,39 сек.!
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.10.2010 в 00:47.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос импорта Ексель файлов из папки в листы одной книги с последующим выполнения макросов.СПБ. as-is Microsoft Office Excel 17 17.12.2018 22:37
Макрос для изменения записей trattaturen Microsoft Office Access 4 02.10.2010 13:22
Новый двухкнопочный калькулятор для новой операционной системы. Пишем новые программы для BolgenOS. Ecosasha Софт 16 06.06.2010 13:32
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос as-is Microsoft Office Excel 4 25.02.2010 07:51
Ребят, помогите прогу сделать для авто-группировки таблиц dbf HIC БД в Delphi 6 22.06.2007 14:37