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

Страницы: 1 2 След.
Разбиение неравномерного файла на части строго по 9.8-9.9 Мб
 
Апострофф, так нюанс в том, что мы можем проверить размер файла только после сохранения... Что LOF, что FileLen
Разбиение неравномерного файла на части строго по 9.8-9.9 Мб
 
Цитата
Казанский написал:
Это на втором листе. А первый лист зачем нужен? Удалил первый лист, сохранил - вес файла 6 МБ вместо 16.
Да, забыл удалить лист. Но это значения не имеет в данном случае. Из 6 Мб xlsx получается 50-60 Мб csv и задача актуальна. Вообще размер исходных файлов больше, я прислал только часть.

Цитата
Казанский написал:
Можно в макросе собирать текст очередного артикула в строку, смотреть ее длину и принимать решение - записать ее в текущий файл или открывать следующий.
Спасибо Вам за идею, но не сработает :)
Во-первых, будет работать ещё дольше, во-вторых, длина переменной типа string — ограничена и причём совсем не космическими числами (а в некоторых ячейках у нас вполне себе приличные значения).
Разбиение неравномерного файла на части строго по 9.8-9.9 Мб
 
Catboyun, сам макрос-то написан и работает впринципе, но душа стремится к совершенству (может и напрасно) — в попытках зажать файл в эти рамки и чтобы работал быстрее, огласил пару вопросов...
Разбиение неравномерного файла на части строго по 9.8-9.9 Мб
 
Привет, планета! Не справляюсь сам, нужна Ваша помощь...

Есть файл xlsx, если сохранить его в csv, то он получается (условно) 177 мегабайт. В каждой строке в столбце № 8 находится артикул товара и по столбцам другая информация по нему (довольно часто ситуация такова, что есть ряд строк с одним артикулом). Необходимо усложнить процесс сохранения так, чтобы макрос делил его на куски по 9.8-9.9 Мб (нежелательно чтобы было меньше, но впринципе возможно по надобности — если несущественно меньше; но меньше 10 Мб должно быть строго). Последний файл уже понятно сколько получится. То есть сложностей несколько:
  1. Чтобы файлы делились только "блоками" (каждый набор строк, относящихся к одному артикулу — отдельный блок)
  2. Кажется, на vba нет функции, позволяющей получить текущий размер файла до его сохранения. А каждое сохранение — пара секунд... Какие есть тут идеи?
  3. Вообще круто было бы иметь возможность при каком-то промежуточно заполненном xlsx-файле иметь возможность понимать, сколько он будет весить в текстовом формате (csv или Текст Юникод). Есть у кого какие полезные мысли?..
Вот сам файл: http://my-files.ru/6gs86s
Аналог ++ в VBA Excel
 
ZVI, премного благодарен, ознакомлюсь!
Аналог ++ в VBA Excel
 
Две привычки: сишная и минимизировать код. Мелочь, о которой каждой раз думаешь, сповадила  :)
Объявление переменной и задание ей начального значения
 
Игорь, большое спасибо за подробный исчерпывающий ответ!
Аналог ++ в VBA Excel
 
Спасибо, Андрей VG! То есть точно ничего такого нет, можно даже не искать, не мучаться?
Аналог ++ в VBA Excel
 
Вероятно, я не так выразился. Задача — максимально коротко записывать единички в счётчик i. Всякий раз, когда сработало условие. For это другое.
i = i + 1 довольно коротко, но после си так и тянет написать i++
Объявление переменной и задание ей начального значения
 
Подскажите, пожалуйста, можно ли как-то на VBA Excel после объявления переменной тут же присвоить ей значение. Что-то вроде как на обычном бэйсике Dim x As Integer = 10 не срабатывает — компилятор ругаеццо. Цель — максимальная экономия места на экране, чтобы не создавать отдельную строку для присваивания значения.
Аналог ++ в VBA Excel
 
Простой вопрос: подскажите, пожалуйста, может, есть на vba excel аналог оператора ++ на С++?
Простой пример: чтобы не писать i = i + 1, а просто i++
Как отключить выход текста за правую границу ячейки?
 
Согласен с The_Prist, поэтому и предложил свой вариант выше. Наиболее оптимальный, но неидеальный в случае копирования ячеек, к которым это дело применено (с сохранением форматирования): высота строки при этом не копируется же, а перенос по словам копируется...
Как отключить выход текста за правую границу ячейки?
 
Вот лучшее решение:

0) выравнивание по вертикали — по верхнему краю
1) ставим перенос слов
2) высота строки = 15 (или сколько надо, в зависимости от ситуации)
Проблема с сортировкой чисел и текста, сортировка, сортировка чисел и текста
 
А как можно сделать, чтобы сортировка на Листе 1 происходила по вручную отсортированному столбцу (согласно тому, как значения расположены в столбце А) на втором Листе ?
Сохранение спецсимволов в csv
 
Hugo, спасибо за апгрейд с обжектом!)

Что касается решения kalbasiatka, при очень большом уважении, у меня оно не работает... Неужто у вас работает?

А если не заморачиваться с тем, чтобы csv назывался также, как исходный файл, а просто задать его имя вручную, то в предложенном мной конечном варианте и вовсе одна строка по сути. А хотя вот одна строка даже с этой "заморочкой":
Код
ThisWorkbook.SaveAs FileName:=ThisWorkbook.Path & "\" & Replace(ThisWorkbook.Name, ".xlsx", ".csv"), FileFormat:=xlUnicodeText
Чисто гипотетически попробую сегодня его вариант до ума довести — но с учётом того, что я просто для примера прикрепил файл с 3-мя спецсимволами, а файлы, которые нам нужно пересохранять в csv намного больше и сложнее — вряд ли удастся уложиться в пару строк. Думается, использовать идею kalbasiatka имеет смысл если только само решение качественнее так сказать, лучше — объясните чем, пожалуйста, если это так.
Изменено: Halloween - 02.12.2015 15:48:07
Сохранение спецсимволов в csv
 
Оптимальное и окончательное решение проблемы (надеюсь, кому-то пригодится):
Код
Sub Macro()
    Dim NewFileName As String, fso As New Scripting.FileSystemObject
    
    NewFileName = ThisWorkbook.Path & "\" & fso.GetBaseName(ActiveWorkbook.Name) & ".csv"
    
    ActiveSheet.SaveAs FileName:=NewFileName, FileFormat:=xlUnicodeText, CreateBackup:=False
    
    Application.Quit
    ActiveWorkbook.Close False
End Sub
Просто пересохраняет исходный *.xlsx в этой же директории и с этим же названием, но в формате *.csv и с кодировкой UTF-8 (в которой спецсимволы, например, дроби, сохраняются и отображаются корректно).

Единственное — чтобы получить имя файла без расширения используется способ, для которого нужно подключить одну библиотеку в VBA Editor (поставить галочку в Tools —> References). Скрин прикрепляю.
Сохранение спецсимволов в csv
 
Конкретно этот макрос вообще непонятно что берёт... Он не открывает никакой файл для считывания, просто открывает новый csv и сохраняет его кладя в него переменную text_ которая пустая.

А задача вроде бы решилась простым сохранением xlsx как текст unicode, а затем просто меняем расширение на csv
Сохранение спецсимволов в csv
 
Цитата
kalbasiatka написал: Макрос берёт 3 ячейки
Только он их не берёт)
Сохранение спецсимволов в csv
 
Секунду, кажется, решил вопрос. Всё просто.
Сохранение спецсимволов в csv
 
Основная проблема в том, что после обработки макросом csv-файла он получается пустым, а далее я руками снова туда дроби вставляю перед сохранением как txt. Это нам не подходит, значения со спецсимволами другой макрос передаёт, вручную там не вмешаешься, да и не нужно...
Сохранение спецсимволов в csv
 
Сперва применением макроса (файл csv при этом полностью пустым становится — почему?), затем открытием файла csv и копированием в него спецсимволов, затем сохранением его как Текст Юникод (*.txt), а затем ручной сменой расширения txt на csv спецсимволы в csv отображаются корректно. А можно ли всё это делать сразу автоматом из исходного файла xlsx?
Сохранение спецсимволов в csv
 
Привет, планета! Столкнулся с такой проблемой, что пересохраняя *.xlsx в *.cvs (офис 16-ый) символы дробей (½, ⅓, ⅔) кодируются как знаки вопроса (?).
Если кто-то сталкивался с этим делом и знает решение — облегчите, пожалуйста, поиски, затянувшиеся на второй час... Перепробовал несколько найденных предложенных вариантов — не помогло. Прикрепляю файл для примера
Как отключить диалоговые окна при открытии файла?
 
:idea: Прочёл, вы абсолютно правы. Впредь обещаю внимательнее относиться к синтаксису методов.
Тема исчерпана, думаю.
Как отключить диалоговые окна при открытии файла?
 
JayBhagavan, к сожалению, файлы приходят от тех, на кого нельзя повлиять и они уже приходят некоторые с этими связями...

The_Prist, открываю кодом:
Код
file = Dir(path & "*.xlsx")
Set WB = Application.Workbooks.Open(file)
Как отключить диалоговые окна при открытии файла?
 
Спасибо, Skif-F, решение хорошее! Для частного пользования  :)

А вот как быть, если файл надо передавать на много компов и не хочется, чтобы там вылетало обновление связей? Может, кто-то из уважаемых форумчан знает, как это дело программно отрубить?
Как отключить диалоговые окна при открытии файла?
 
Код
Application.DisplayAlerts = False
...
Application.DisplayAlerts = True

почему-то не срабатывает для данного вопроса от экселя: http://i.imgur.com/5fqi9kE.png
Как открыть несколько файлов, Только макросом
 
Всё ясно с этим, спасибо! Двоеточием на VBA разделяются команды, написанные на одной строчке — как точка с запятой на С++, получается?
А что за команда ExecuteExcel4Macro? Качественно загуглить не вышло...
Код
Cells(i, 4) = ExecuteExcel4Macro("'" & path & "[" & file & "]" & "Лист1'!" & Range("H13").Range("A1").Address(, , xlR1C1))
Подсчёт числа символов в ячейке
 
Заголовки всегда в первой строке. Заголовка Grid Value может не быть. А может их быть два.
Как открыть несколько файлов, Только макросом
 
А что значит строчка:
Код
Rows("2:" & Rows.Count).ClearContents: file = Dir(path & "*.xls"): i = 10
Не могу разобраться...
Подсчёт числа символов в ячейке
 
Всем спасибо! Сработало вот так:
Код
For Each Cell In Range(ra.Address).Cells
    If Len(Cell.Value) <> 3 Then
        myra = myra + 1
    End If
Next Cell
Страницы: 1 2 След.
Наверх