Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Разные книги макросов для разных версий Excel (2003 и 2013)
 
Аналогичная проблема была описана на этом иностранном форуме, но ответа ТС так и не получил.
Разные книги макросов для разных версий Excel (2003 и 2013)
 
Суть проблемы: запретить Excel 2003 открывать книгу макросов из "C:\Users\user\AppData\Roaming\Microsoft\Excel\XLSTART"

Описание: На одном компьютере есть две версии Office - 2003 и 2013, установленных в "Program Files (x86)". При этом Excel 2013 при запуске открывает только "C:\Users\user\AppData\Roaming\Microsoft\Excel\XLSTART\Personal­.xlsb", как и ожидалось.

Но Excel 2003 загружает обе: свою из
"C:\Program Files (x86)\Microsoft Office\Office11\XLSTART\Personal.XLS"
и чужую из
"C:\Users\user\AppData\Roaming\Microsoft\Excel\XLSTART\Personal­.xlsb", блокируя её при этом.

На другом компьютере в сети такое поведение не повторяется - каждая версия Excel использует только свою книгу макросов. Какие есть соображения?
Рисунок слишком велик и будет усечен
 
Возможно, Вы имеете ввиду стандартное сообщение? "В буфере обмена находится большой объем данных. Сохранить эти данные для последующей вставки в другую программу?". Если да, то в этой теме обсуждался немного иной вопрос. Очистку можно сделать иначе.
Программно узнать имя текущей процедуры.
 
Спасибо, попробую.
Программно узнать имя текущей процедуры.
 
Антон, спасибо за ссылку. Возможно мне просто стоит пересмотреть свои привычки  :) . Когда я оптимизирую какую-нибудь процедуру/функцию, то создаю ее копию с порядковым номером и издеваюсь над ней, а потом приходится исправлять много ссылок на нее. Хотелось начать реализовывать принцип DRY. Нужно продумать подход.
Программно узнать имя текущей процедуры.
 
Такой-вот вопрос. Как может функция/процедура узнать собственное имя? Видел в инете какую-то надстройку, но не нашел, где скачать, а также инфы о том, безопасна ли она. Да и вообще, хотелось бы знать КАК. Если у кого-то навскидку есть информация, поделитесь, плиз. Нужно это для того, чтобы каждая подпрограмма или метод могла хранить свои параметры или статистику в файле ini, текстовом файле или на отдельном листе. И главное, чтобы она всегда могла найти нужный файл по своему имени. Чтобы не прописывать константами.
Ошибка Application.Transpose, Type Mismatch
 
Да, этот код я уже встречал. Приспособлю к своим нуждам. За Null-значения отдельное спасибо.
Ошибка Application.Transpose, Type Mismatch
 
Большое спасибо за оперативный ответ. Жаль, что так. Насколько я понял, Transpose изначально заточен под диапазоны, а обработка массивов в чистом виде - это как следствие. Так?
В любом случае спасибо)
Ошибка Application.Transpose, Type Mismatch
 
Всем привет!

Кто знает, поделитесь справочной информацией, а то на MS ничего не нашел.
Есть простой код, который транспонирует массив типа Variant. Размерность его (1 to 300k, 1 to 1). Насколько я понял есть какое-то ограничение на использование Application.Transpose, т.к. один и тот же кусок кода нормально обрабатывает маленький массив (размерность в десятках), а на большом выдает ошибку.
Интересно знать, какая именно граница установлена, а так же, как ее обойти штатно. Если навскидку никто не подскажет, буду писать свою процедуру.

Фрагмент
Код
Dim arr(), arr2()
...
arr2() = Application.Transpose(arr())
...


Заранее огромное спасибо.
Построчное чтение текстового файла, При условии, что в теле файла есть символы EOF
 
Проверил, ReadAll работает довольно быстро. Символы EOF ни ему, ни AtEndOfStream не помеха. Не учел только наличия vbTab в битовых полях, но это уже тонкости.

Огромное спасибо за помощь. :D
Как сделать поразрядную сортировку в excel
 
Цитата
Получается типа вп1, вп10, вп11.....вп2, вп20, вп21
Обратите внимание на то, что "вп1" содержит три символа, а "вп10" - четыре. По правилам сравнения текстовых строк, "вп10" будет больше, чем "вп1", но меньше, чем "вп2", так как код третьего символа в "вп2" - выше.
Либо воспользуйтесь способом, предложенным Z:
Цитата
в соседнее поле выбрать цифирь и сначала <сортировать> по нему, а затем <по другим полям, если нужно>... ;)
либо, для получения "поразрядной" сортировки, как Вы выразились, приведите кол-во самих разрядов к единому виду: набор вп01, вп02...вп10, вп11 будет отсортирован правильно.
Построчное чтение текстового файла, При условии, что в теле файла есть символы EOF
 
Всем привет!
Огромное спасибо за код, хотя достаточно было только наводку дать. В сторону TextStream присмотрелся вчера вечером на просторах майкрософта, но с английским у меня очень печально.
Цитата
Для файла в 76Мб с 5 полями чтение, разбиение на строки по vbNewLine, разбиение по VBA.Split(sRow, vbTab) и построчная запись в этот же файл, заняло 15 сек
Обнадёживает. Имеется два файла по 60 и 68 мб. В каждом по 84 поля и около 200 тыс. строк. Если читать их как бинарные, то загрузка командой BigStr=Input(LOF(f),f) в строковую переменную занимала около 15 минут для каждого, на серверной станции Dell. Насчет примеров данных, сори, не представляю, куда можно такой объём выложить, даже если заменить "пулеметы" на "огурцы".
Сейчас буду пробовать, главное чтобы TextStream.ReadAll выполнялся не очень долго. И еще, надеюсь, последний вопрос: на что опирается параметр AtEndOfStream - на физический конец файла, как в бинарном подходе или же на текстовые маркеры в теле файла? А то из этого я совершенно ничего не понял. Еще раз спасибо, мне кажется это подойдёт. Проверю, отпишусь.
Вчитался:
Цитата
'а вы уверены, что в бинарной части
   'не будет vbNewLine?
Почти уверен. Иначе это вызвало бы перекос по кол-ву строк даже в Блокноте.

PS. VBA.Split=Split?
Обратный порядок для диапазона
 
А так?
Код
Sub ReverseRange()
Dim x() As Variant, y() As Variant
Dim r As Long, c As Integer

x = Selection.Value
ReDim y(LBound(x, 1) To UBound(x, 1), LBound(x, 2) To UBound(x, 2))
For r = 1 To UBound(x, 1)
For c = 1 To UBound(x, 2)
y(r, c) = x(Abs(r - (Selection.Rows.Count + 1)), c)
Next c
Next r
Selection = y
End Sub

Дело в том, что когда Вы в цикле доходите до середины массива, вторая половина уже оказывается переписанной. Тут нужен второй массив, ну или промежуточная переменная.
Изменено: КиберЗверь - 14.10.2013 13:42:38
Построчное чтение текстового файла, При условии, что в теле файла есть символы EOF
 
Всем привет!
Собственно, сабж. Предпосылки: есть база данных предприятия. Дважды в день я экспортирую таблицы в текст (с разделением табуляцией), а эти текстовые файлы заранее связаны с Access, как внешние источники данных. проблема в том, что некоторые юзеры вносят в текстовые поля таблиц символы Tab, копируя артикулы из чужих программ. При этом в текстовых файлах съезжают поля и Access начинает матюгаться (я его использую для отчетов). Придумал следующее: открывать текстовые файлы для чтения на VBA, подсчитывать кол-во Chr(9) в каждой строке, а при несовпадении с установленным эталоном выводить в лог на лист Excel. Работает довольно быстро, но вот проблема: в двух таблицах есть зашифрованные бинарные поля, которые изобилуют символами EOF (Ctrl+Z, #1A) и чтение файла обрывается. Пробовал читать, как бинарник, потом разделять на строки:
Код
DataArr()=Split(BigStr,VbNewLine)
, потом в цикле перебирать массив, НО чтение файла :
Код
BigStr=Input(LOF(f),f)
для больших файлов (~60-70мб) требует нереально много времени.
Пожалуйста, предложите какой-нибудь шустрый метод. Только просьба есть: если предложенный вариант будет предполагать использование ADO или API, в двух словах опишите как это работает.

PS: код в приложенном файле не будет работать в отрыве от реальных данных. Там на определенном листе в книге personal.xlsb находится перечень файлов и эталонное значение.
Vba открытие файла Excel
 
Мне кажется, Вы привели не весь код. Откуда, к примеру, взялась переменная File1_lastrow? На момент выполнения Range("A" & File1_lastrow) она у Вас имеет значение Empty. Далее, File2_lastrow содержит номер последней заполненной строки. При таком копировании последняя строка в 2.xlsm будет затёрта новыми данными. Приведите весь код, а если это и есть весь код, подробнее опишите, что хотите получить, а также примерное кол-во ячеек, постоянное оно или меняется, имена файлов меняются? данные копируются из одного файла или их там пачка?
Изменено: КиберЗверь - 17.09.2013 19:18:01
Рисунок слишком велик и будет усечен
 
У меня такая же проблема, только с оговоркой: если диапазон, который нужно скопировать/вырезать большой, то таких окошек будет штук 50. Начал копать и докопался. Не знаю, как у Вас, а у меня причиной был/есть клиент удалённого рабочего стола. На рабочем компе у меня стоит Linux Mint, клиент FreeRDP (альфа сборка), на сервере - Win Server 2012 и Office 2013. Вся обработка данных производится удалённо. Ошибка возникает в случае, если у меня запущено 2 и более подключения rdp. Дело в том, что для подключения извне винда вешает на буфер обмена процесс-монитор для синхронизации содержимого буфера. Когда я запускаю еще одно подключение, они начинают конфликтовать.
Надеюсь кому-то поможет.
Изменено: КиберЗверь - 17.09.2013 18:35:58
Выделить серию совпадающих символов
 
Вот именно, единиц больше. И у Вас макрос их и выделяет, а в первом посте выделены нули.
Выделить серию совпадающих символов
 
Цитата
последовательность нолей длиннее последовательности единиц
А как же, тогда:
Цитата
1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0
В таком случае списываю на некорректность постановки задачи :D , потому что трактовки (нули)XOR(единицы) я в теме не нашел, а вопрошающий-таки одобрил Ваш вариант.
Отписываюсь.

ЗЫ спасибо за идею с IIf(Left(t, 1) = 1, vbRed, vbBlue)
Выделить серию совпадающих символов
 
Цитата
А местами и вовсе ничего не выделяет(см. скрин)
А у топикстартера в первом посте, в первой строке "примера" что-то выделено? Из тех исходных данных, что были я сделал вывод, что эта строка не прошла некую проверку, а именно, в ней нет последовательности нулей длиннее, чем во второй, и единиц длиннее, чем в третьей строке.
Кстати, у меня вариант KuklP'а почему-то выделил только единицы, а нули проигнорировал.
Удаление цифр из текста
 
Это уже обсуждалось, пользуйтесь поиском!
один из вариантов решения
Изменено: КиберЗверь - 12.08.2013 18:44:05
Выделить серию совпадающих символов
 
Если я правильно понял Вашу мысль, смотрите файл во вложении.
А на будущее, старайтесь выкладывать файл с примером.
Связывание листов с *.dbf (VBA), С автоматическим обновлением
 
Всем привет!
Народ, помогите решить проблему. Я не знаю точно, в какую сторону копать, потому начну сначала. Есть база данных предприятия, состоящая из нескольких сотен таблиц, часть которых хранится в DBF (версии, кажись dBase IV). Для отслеживания ошибок логики в базе, а также для объединения таблиц до последнего времени я использовал такую схему: каждый день (иногда по несколько раз) делаю экспорт в текстовые файлы, которые заранее связаны с Access 2013 как внешние данные. Связывание/импорт из DBF напрямую он не умеет.
Ввиду особенностей наших программ экспорт в текст длится довольно долго, к тому же вылазят косяки (например табуляция в полях типа String или Memo). Так что я начал смотреть в сторону MS Query применительно к Excel (или любой похожей технологии). Мне это видится так: Создать *надцать листов или именованных диапазонов в книге Excel, каждый из которых будет связан со своим файлом DBF. При открытии книги (или удаленно, макросом из Access) их содержимое должно обновляться. А уж эта книга будет связана с Access, как внешний источник.

На деле же оказалось сложнее, чем я ожидал... Когда я полез по мануалам, то окончательно запутался в этих драйверах ODBC, строках подключения, настройках и т.д. В графическом интерфейсе я встретил только кучу окошек с похожим функционалом, которые вложены друг в друга, пустые либо недостаточно заполненные выпадающие списки, предупреждения о том, что я не заполнил какие-то поля. Хотелось бы реализовать на VBA полу-автоматическое пополнение книги новыми таблицами. В общем, помогите встать на путь истинный  :)  
Несколько слов об окружении: сами таблицы в каждый момент времени находятся в работе, их используют сразу много юзеров. Связывать их нужно ReadOnly, чтобы точно ничего не накосячить. Не смог найти никакой информации о записях, помеченных как удаленные. Можно ли их как-то фильтровать?

В общем, вопросов сразу масса. Некоторые из них изначально основаны на ложных представлениях. Помогите разобраться по порядку. Для начала: какой драйвер использовать для dBase IV? Он стандартный? Чем принципиально отличается ODBC от ADO. Что предпочтительнее (если это разные вещи)?
Заранее спасибо всем, кто поможет.
убрать пустые ячейки
 
первое, что приходит в голову - макрос. Если хотите, выложу, но немного позже.
убрать пустые ячейки
 
Как вариант, растянуть по желтой строке функцию "=СУММ(диапазон)"
Изменено: КиберЗверь - 26.06.2013 19:45:14
Макрос удаление цифр из текста
 
Вот Вам универсальный макрос для удаления любых символов на Ваше усмотрение. Он работает над выделенным диапазоном, заменяя его значения на новые. Обратите внимание на возможность неявного преобразования. Например, если в ячейке было значение "00056 АбВгД79", и изначально стоял формат ячейки "общий", то удаление пробелов и букв даст "5679". Чтобы избежать этого нужно заранее установить формат ячейки текстовый. Впрочем, конкретно Вас это может и не касаться, если нужно наоборот удалять цифры, а оставлять буквы.

PS вариант от LVL в плане краткости и лаконичности лучше. К сожалению я не смыслю в регулярных выражениях.
Изменено: КиберЗверь - 26.06.2013 19:36:55
Форма прячется при смене активной книги
 
Для начала, хочу поблагодарить всех, кто участвовал в обсуждении. Вот только проблема, к сожалению не решилась.
Дома у меня Win8 32bit, Office 2013 32bit; на работе офис тот же, а система Server 2012 (разрядность не помню). Обновления стоят все.

На обоих компах одна и та же трабла: загрузил пример кода предложенный Jan Karel Pieterse по ссылке выше, но код работает некорректно. При смене книги, через секунду (или меньше) фокус снова передается окну формы. Естественно при этом активируется исходная книга. Даже больше: если поклацать мышкой по ячейкам первой книги, то Selection меняется, но форма все-равно перехватывает фокус, так что внести какие-либо изменения на лист невозможно. Единственный способ - это двойной клик по ячейке, но после нажатия enter происходит то же самое. А если клацать по ячейкам второй книги, то на листе первой происходит самопроизвольное выделение диапазона (хз почему). Кому не лень, пожалуйста загрузите пример и поганяйте у себя. Дабы не сидеть, сложа руки, решил прогнать код пошагово. Добился таких результатов (кто просматривал код, поймет):

1. Поскольку форма немодальная, то после .Show и End Sub отладка по F8 прекращается.

2. Физически форма становится видимой на этапе инициализации при выполнении SetWindowPos метода MakeTopMost. То есть, до выполнения .Show.

3. При проходе кода по F8, когда доходит дело до процедуры AddForm, то строка
Application.OnTime Now, "HandleFormHideUnHide"
просто не выполняется, управление не передается. (Я правильно понял, что это типа Call?). И вот тут-то происходит интересное: форма перестает перехватывать фокус, и можно работать с листами, но она напрочь теряет свойство скрываться при активации стороннего окна и упрямо держится поверх всего. И так до тех пор пока ее не закроешь.

PS
Цитата
Скажите, а если удерживать форму "наверху", а потом вызвать msgbox (он-то модальный), то не выйдет так, как у меня получалось в ходе экспериментов с TopMost, когда msgbox не дает передвинуть форму в силу своей модальности, но и не показывается в силу того, что форма поверх всех окон?
Кстати, именно так и получается... Просто форма в примере Jan Karel Pieterse имеет небольшой размер, потому MsgBox можно вытянуть из-под неё мышкой, иначе же, если форма большая и если для нее установлен StartUpPosition=CenterOwner, то с выводом сообщений будет проблемка.
Изменено: КиберЗверь - 26.06.2013 00:57:38
Обработчики событий книги в коде персонального модуля.
 
ikki, воо! То, что нужно! Спасибище!
Цитата
ikki пишет:
гугл таки сдох? :D  
К сожалению Его Святейшество Гугл глух к мольбам смертных юзеров, если они не могут четко сформулировать свою проблему))
вот еще по теме: Вставка кода в книгу программно
Всем огромное спасибо. Вопрос исчерпан в полной мере)
Обработчики событий книги в коде персонального модуля.
 
Цитата
Юрий М пишет:
А чтобы не оставалось кода в книге - так его можно программно при закрытии и удалять.
А код из книги можно можно удалить программно? а добавить? Тогда какой обработчик отследит ее закрытие?
Обработчики событий книги в коде персонального модуля.
 
не то, чтобы не устраивает. Ну допустим: получил по почте файл или экспортировал из access, открыл и автоматом запустилось отслеживание событий, например создал пустой лист - применилась заливка по определенному образцу, переместил курсор - сдвинулась область просмотра. Но, но при закрытии книги в ней не должно оставаться никакого кода, а только результаты его работы. Извините, что так путанно. Пожалуй я чувствую, что такую вожность в vba должны были встроить, но не могу отыскать.
Изменено: КиберЗверь - 22.06.2013 14:57:24
Обработчики событий книги в коде персонального модуля.
 
жаль :(  Все-равно спасибо
Страницы: 1 2 След.
Наверх