Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
Excel

Запуск макроса при открытии определенного файла

24.10.2019, 14:34. Показов 4204. Ответов 37
Метки vba (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех.

Вопрос в следующем.
Есть файлы с разным названием и разным содержимым:
trackLog-2019-окт.-04_06-17-08
trackLog-2019-янв.-20_05-11-58
trackLog-2019-июн.-20_01-27-04
trackLog-2019-дек.-20_10-19-31
Открывая эти файлы в Экселе, получаются кракозябры.
trackLog-2019-окт.-20_09-17-09.rar
Сменить кодировку файла, я могу макросом и сделать авто открытие его при запуске Excel:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub Workbook_Open()
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Users\KPNU-2\Desktop\trackLog-2019-окт.-20_09-17-08.csv", _
         Destination:=Range("$A$1"))
'        .CommandType = 0
        .Name = "trackLog-2019-окт.-20_09-17-08"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Convert_Logs_Torque.rar

НО!

Открывать и менять кодировку таким образом, не совсем для меня удобно.
В макросе, нужно прописывать путь к самому файлу, а так как файлы разнуе, ьто вариант этот не подходит.

Возможно ли сделать макрос, чтобы открывая определенный файл, Excel менял кодировку содержимое файла, не указывая в макросе конкретный путь к файлу?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2019, 14:34
Ответы с готовыми решениями:

Запуск макроса при открытии конкретного файла
Здравствуйте, подскажите пожалуйста, возможно ли запустить макрос "Макрос1" автоматически только если открываем файл upload.xlsx ?

Авто запуск макроса из личной книги при открытии файла с определенным именем
Привет, друзья! у меня есть много макросов в личной книге, как сделать что-бы при запуске файла с названием Книга1 запускался макрос...

Запуск макроса при открытии документа
Добрый день! В VBA еще новичок, поэтому буду говорить, как мне подсказали, если что исправьте. Написал макрос, сохранил его в формате...

37
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
24.10.2019, 15:29
Вопрос #1 - зачем открываете файлы?
В зависимости от ответа
Вопрос #2 - зачем открываете файлы в Экселе?

Я бы открывал их в блокноте/Notepad++ если нужно просто посмотреть/оценить, скриптом если нужно обработать, а в Экселе через свой диалог выбора файлов если вдруг зачем-то их нужно отрывать именно в Экселе.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
24.10.2019, 15:36  [ТС]
Вопрос #1 - Эти файлы, снятый лог некоторых датчиков работы автомобиля.
Вопрос #2 - В Экселе открываю, потому как привожу их к читаемому виду с графиком.
Я итоге получается у меня так:

Но приходится проделывать много манипуляций.
ВОТ И ХОЧУ УЙТИ ОТ НИХ...
Но вот чтобы тыкая мышкой на файл и открывая его, не получается сделать у меня перекодировку.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
24.10.2019, 15:47
Ответ на #1 в #2
Ну т.к. всё равно их затем нужно пересохранять в другом формате (ибо какой график в тексте?) я бы использовал файл-инструмент с своим диалогом выбора файла, где бы и использовал тот код что Вы выше показали (ну или типа того).
Всё равно ведь открываете/ищите по дереву нужный каталог, не всё ли равно где искать...
Там и открытие, и пересохранение/закрытие можно прописать, чтоб больше не делать лишних манипуляций.
А с слепым открытием csv вообще может быть куча проблем, это Вам очевидно с разделителями повезло, а ведь в любой момент это может измениться
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
24.10.2019, 15:52  [ТС]
У меня файлы с одинаковыми разделителями.
Поэтому, мне надо сделать именно то, что я спрашиваю.

Как изменить кодировку файла, при открытии файла, не прописывая в макросе путь к самому файлу.

Я новичок во всем этом...
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
24.10.2019, 18:49
Лучший ответ Сообщение было отмечено oniava как решение

Решение

oniava,

Чем так мучиться,сделайте файл шаблон.Пропишитев нем ваш код .А путь можно и через Open File Dialog
И прикрепит код на кнопочку....
Например:
Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub MMM()
Set FD = Application.FileDialog(msoFileDialogFilePicker)
 With FD
        .AllowMultiSelect = False
     If .Show = True Then PTH = .SelectedItems(1) Else Exit Sub
End With
 
PTH1 = "TEXT;" & PTH
 
 With ActiveSheet.QueryTables.Add(Connection:=PTH1, Destination:=Range("$A$1"))
 '       .CommandType = xlCmdCube
        .Name = PTH
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
 
 
 
End Sub





Добавлено через 2 минуты
Hugo121,
Sorry, не обратил внимания на
Цитата Сообщение от Hugo121 Посмотреть сообщение
я бы использовал файл-инструмент с своим диалогом выбора файла
еще раз простите...
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
24.10.2019, 19:03
Narimanych, да я не в претензии. наоборот - вот и пример кода
А ещё туда же запилить создание графиков, и сразу сохранение. А в диалог AllowMultiSelect = true и открытие в цикле
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
24.10.2019, 19:11
Hugo121,
Спасибо
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
25.10.2019, 20:43  [ТС]
Narimanych,
Спасибо!
Малость доработал и все получилось !
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
26.10.2019, 13:28  [ТС]
Narimanych,
Еще вопросик, а то найти в сети не могу.
К примеру, ролучился у меня на выходе такой файл:
Logs_Вася.rar
Сколько будет занято в файле ячеек, я изначально не знаю.
Возможно ли очистить все НЕЗАНЯТЫЕ ячейки в файле?

В данном случае, убрать разметку таблицы с ячеек.
Миниатюры
Запуск макроса при открытии определенного файла  
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.10.2019, 14:12
Я конечно не Narimanych, но спрошу - зачем размечать то, что не нужно? Чтоб затем ломать голову как это убрать?
Я предлагаю вместо
Visual Basic
1
Columns("A:L").Select
попробовать применить
Visual Basic
1
Intersect(ActiveSheet.UsedRange, Columns("A:L")).Select
хотя я категорически против всяких селектов вообще, но без возможности проверить в деле не буду переделывать...
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
26.10.2019, 14:50  [ТС]
Hugo121,
У меня, данный макрос Logs_Вася.rar, из сообщения выше, обрабаттывает файлы:
Пример LOG-01-IDE00021_&11.rar
Эти файлы для обработки, с разным соднжимым и каким, я не знаю.
Поэтому, сколько будет занятых столбцов и строк, мне тоже не извесно.
А подчистить результат нужно.
Отсюда и вопрос предыдущего моего поста...
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
26.10.2019, 14:59  [ТС]
Hugo121,
PureBasic
1
Intersect(ActiveSheet.UsedRange, Columns("A:L")).Select
Данная функция выделяет мою таблицу и это выделение задается пользователем.

Но я ведь не знаю сколько будет занятых ячеек и столбцов!

Как выделить только занятые ячейки?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.10.2019, 15:07
Не знаю, у меня выделяет всё как я и задумал - только то, что нужно обрамлять! Другое дело что потом ниже по коду ещё есть выделение целиком 1-ой, 2-ой и 3-й строки - можно и там тоже брать только пересечение диапазонов, если выделение всей строки влияет отрицательно (не изучал)
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
26.10.2019, 15:11  [ТС]
Hugo121,
У Вас выделяет в диапазоне от столбца A до L.
Но как я писал выше, яя же не py. сколько будет занятых ячеек у меня в файле.
В данном файле выше занято ячеек A до D и 1 по 523 строку.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.10.2019, 15:17
У меня аккуратно выделило сеткой от А1 до L273 - ровно сколько данных импортировалось из файла LOG-01-IDE00021_&11.CSV Вашим кодом - а сам код я больше никак не менял.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
26.10.2019, 15:19  [ТС]
Как Вы и где свой, код вставили в мой?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.10.2019, 15:21
Перечитайте 11 пост этой темы.

Добавлено через 1 минуту
Если не знаете сколько будет столбцов - выделяйте просто ActiveSheet.UsedRange.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
26.10.2019, 15:22  [ТС]
Все равно не понял.
У меня не получается выделить все заполненные ячейки и столбцы!
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.10.2019, 15:23
Выше дописал:
Цитата Сообщение от Hugo121 Посмотреть сообщение
выделяйте просто ActiveSheet.UsedRange
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2019, 15:23
Помогаю со студенческими работами здесь

Запуск макроса Excel при открытии через COM
Всем привет, Чужая софтина открывает книгу Excel на основе шаблона через COM. Пихая туда данные, естественно. Задача -...

Автоматический запуск макроса при открытии книги?
Есть книга Книга1.xls и есть форма Form1? встроенная в эту книгу. Как сделать так, чтобы при открытии книги Книга1.xls - автоматически...

Запуск определенной формы при открытии определенного листа
Здравствуйте помогите мне с такой задачей, Есть у меня "Лист1", "Лист2", "Лист3", "Лист4", нужно, что при открытии ,...

Автоматический запуск макроса при открытии любой книги, которая соответствует конкретным условиям
Добрый день, уважаемые форумчане! Нужна ваша помощь:) Ситуация следующая. Мне на почту каждый день приходит екселевский файл, который...

Автозапуск макроса при открытии файла Excel
Как сделать, чтобы макрос запускался при открытии файла Excel. (это совсем не для вируса)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru