Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 13.09.2023
Сообщений: 5

Макрос открывает файл с форматом дат английский (США)

15.04.2024, 17:50. Показов 1879. Ответов 23

Студворк — интернет-сервис помощи студентам
Добрый день, столкнулся с проблемой и не знаю как решить.
Есть макрос, который запускается из открытого excel файла и открывает файл с форматом DAT. Проблема в том, что даты в этом файле меняют свой формат. Выглядит это так, как на приложенном фото. DAT файл прикладываю в архиве.
Заранее спасибо за любую помощь, уже не знаю что делать.

Visual Basic
1
2
3
4
5
6
7
Sub open()
    Dim waytofile As String
    Dim file As Workbook
    
    waytofile = ThisWorkbook.Path & "\L1.DAT"
    Set file = Workbooks.Open(waytofile)
End Sub
Изображения
 
Вложения
Тип файла: 7z L1.7z (47.8 Кб, 33 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.04.2024, 17:50
Ответы с готовыми решениями:

Извлечение дат с нужным форматом
Здравствуете, Уважаемые знатоки! Прошу помочь с формулой. Присылают базу отправленных материалов (просил подправить выгрузку - не...

Гугл открывает секреты спецслужб США
Google снова залез в святая святых США - были выложены фотографии, на которых запечатлена военная база, где производятся испытания новых...

Написать макрос, который удаляет столбцы с процентным форматом
Подскажите, пожалуйста, как написать макрос в Excel, который удаляет столбцы из таблицы в процентным форматом???

23
 Аватар для Angry Old Man
3325 / 752 / 316
Регистрация: 26.03.2022
Сообщений: 1,412
Записей в блоге: 1
19.04.2024, 16:09
Студворк — интернет-сервис помощи студентам
Eugene-LS, ~ 40000 строк мой вариант отрабатывает Query=4,585938 сек.
Ваш выскакивает на ошибку Error 6 (Overflow) in Sub: ........................

Добавлено через 11 минут
vbs-вариант 6.5 сек
0
Эксперт MS Access
 Аватар для Eugene-LS
13253 / 5932 / 1526
Регистрация: 05.10.2016
Сообщений: 16,597
19.04.2024, 16:27
Цитата Сообщение от Angry Old Man Посмотреть сообщение
Ваш выскакивает на ошибку Error 6 (Overflow)
Спасибо - подправил.

Вот вы неугомонный то!
~ 40000 строк мой вариант отрабатывает Query=4,585938 сек
После уборки излишеств переформатирования, мой вариант "проглотил" 55 260 строк с такими результатами:
Продолжительность импорта (ElapsedTimeStr): 00:00:04.972
Продолжительность импорта (Timer - ttt): 3,976563 сек.
У себя его (вариант) обкатать есть желание?
0
933 / 366 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
19.04.2024, 18:08
Цитата Сообщение от Eugene-LS Посмотреть сообщение
А то "на порядки" сразу ...
объёмы должны быть другие, да и не готов я бесплатно время тратить просто для бравады. Принципы ускорения — тут (уже показывал ссылку).
1
Эксперт MS Access
 Аватар для Eugene-LS
13253 / 5932 / 1526
Регистрация: 05.10.2016
Сообщений: 16,597
19.04.2024, 22:01
Цитата Сообщение от Jack Famous Посмотреть сообщение
Принципы ускорения тут ...
Не в тему, но зачёт!
...
Вы меня ещё поучите борщ варить ...
Я знаю насколько быстрее InStr()- чем Replace() - сам скорость замерял.
Умник вы наш ...

Добавлено через 22 минуты
Angry Old Man, ну... дабы не быть голословным:
Кликните здесь для просмотра всего текста
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
Public Sub Import_Test_02CSV()
Dim sglTimerStart As Single, sglTimerEnd! '(опционально)
Dim sSrcFilePath$, sNewCSVFilePath$, ttt As Single
Dim objSheet As Worksheet, objQTable As QueryTable
    
    sglTimerStart = Timer 'Timer начала
 
'---------------------------------------------------------------------------------------------------
' Исходный файл
    'sSrcFilePath = "d:\Temp\L1.DAT"
    sSrcFilePath = ActiveWorkbook.Path & "\Test55260Lines.txt" 'Путь к файлу для переработки
    'sSrcFilePath = ActiveWorkbook.Path & "\L1.DAT"
 
' Путь к переработанный и импортируемый файл - путь тот же - меняем расширение на "csv"
    sNewCSVFilePath = Mid(sSrcFilePath, 1, InStrRev(sSrcFilePath, ".")) & "csv"
 
' Переделка исходного файла в "нормальный" CSV:
    Call TransformFileCSV_RU(sSrcFilePath, sNewCSVFilePath)
    
    sglTimerEnd = Timer 'Timer промежуточный
    
    Debug.Print "Продолжительность переделки файла: " & ElapsedTimeInSec(sglTimerStart, sglTimerEnd) ', datEnd
 
'Создание или Зачистка Листа 2:
    If ActiveWorkbook.Sheets.Count = 1 Then
        Set objSheet = ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Worksheets(1))
    Else
        Set objSheet = ActiveWorkbook.Sheets(2) ':  objSheet.UsedRange.Clear
    End If
    objSheet.Name = "ImportTest_05"
 
' Импорт sNewCSVFilePath на objSheet.Range("A1")
    Set objQTable = objSheet.QueryTables.Add( _
                    Connection:="TEXT;" & sNewCSVFilePath, Destination:=objSheet.Range("A1"))
   With objQTable
        .Name = "importCSV"
        .TextFileParseType = xlDelimited
        .AdjustColumnWidth = True
        .TextFileCommaDelimiter = False     '  Запятая
        .TextFileSemicolonDelimiter = False  ' Точка с запятой
        .TextFileTabDelimiter = True         ' TAB
        .TextFileDecimalSeparator = "."      ' Делитель целой и дробной = "."
        .Refresh
        .Delete
    End With
    
    Set objQTable = Nothing
    Set objSheet = Nothing
 
'---------------------------------------------------------------------------------------------------
    sglTimerEnd = Timer 'Timer окончательный
    Debug.Print "Общая продолжительность импорта:" & ElapsedTimeInSec(sglTimerStart, sglTimerEnd)
    
End Sub
 
Private Sub TransformFileCSV_RU(sFilePath$, sNewFilePath$)
' Построчное чтение текстового файла с записью МОДИФИЦИРОВАННЫХ строк в файл: sNewFilePath
'---------------------------------------------------------------------------------------------------
' Модификация строк:
'   01. Очистка строки от не распознаваемых символов (только первая строка заголовка)
'   03. Первые 8 символов строк данных (N строки > 1) - к формату "dd.mm.yy" (вместо "dd-mm-yy")
'   04. У всех строк данных (N строки > 1) - меняем все "." на "," (Делитель целой и дробной)
'---------------------------------------------------------------------------------------------------
Dim FSO As Object, FSOFile As Object, FSOFileNew As Object, TextStream As Object
Dim sVal$, iVal, sDate$, lLine&
Dim sChr$, sText$
'---------------------------------------------------------------------------------------------------
On Error GoTo TransformFileCSV_RU_Err
   
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set FSOFile = FSO.GetFile(sFilePath)
   Set TextStream = FSOFile.OpenAsTextStream(1) 'OpenFileForReading = 1
   Set FSOFileNew = FSO.CreateTextFile(sNewFilePath, True)
   
    Do While Not TextStream.AtEndOfStream
        lLine = lLine + 1
        sVal = TextStream.ReadLine
        'sVal = Replace(sVal, vbTab, ";", vbTextCompare) 'Змена разделителя (Delimiter)
        If lLine = 1 Then
            sText = "" 'Очистка строки - только первая строка заголовка
            For iVal = 1 To Len(sVal)
                sChr = Mid(sVal, iVal, 1)
                If AscW(sChr) > 0 Then
                   sText = sText & sChr
                End If
            Next iVal
            sVal = sText
        End If
        FSOFileNew.WriteLine sVal ' Запись  строчки в новый файл
    Loop
 
TransformFileCSV_RU_End:
    On Error Resume Next
    TextStream.Close:  Set TextStream = Nothing
    FSOFile.Close:     Set FSOFile = Nothing
    FSOFileNew.Close:  Set FSOFileNew = Nothing
    Set FSO = Nothing: DoEvents
    Err.Clear
    Exit Sub
 
TransformFileCSV_RU_Err:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in Sub : " & _
           "TransformFileCSV_RU - modParseOrders.", vbCritical, "Error!"
    Err.Clear
    Resume TransformFileCSV_RU_End
End Sub
 
 
Private Function ElapsedTimeInSec(sglTimerStart As Single, Optional ByVal sglTimerEnd!, _
                                  Optional blnLongFormat As Boolean) As String
' Функция рассчитывает разницу между таймерами с точностью до миллисекунд
' Возвращает отформатированную строку продолжительности формата: "# ##0.000"
' -------------------------------------------------------------------------------------------------/
'Пример эксплуотации:
'Dim sglTimerStart! 'As Single, sglTimerEnd! ( sglTimerEnd - опционально)
'    sglTimerStart = Timer ' Timer начала (дробные секнды (Single) прошедшие с начала суток)
'    ' инструкции ...
'    Debug.Print "Продолжительность до метки ... :" & ElapsedTimeInSec(sglTimerStart)
'    sglTimerEnd = Timer 'Timer окончательный
'    ' ещё инструкции ...
'    Debug.Print "Общая продолжительность:" & ElapsedTimeInSec(sglTimerStart, sglTimerEnd)
' -------------------------------------------------------------------------------------------------/
 
Dim sglTookSeconds!, iVal%
Const csglSecondsPerDay As Single = 86400 'секунд в сутках
    If sglTimerEnd = 0 Then sglTimerEnd = Timer
    If sglTimerEnd < sglTimerStart Then ' Перевод даты на замере (86400 = секунд в сутках)
        sglTookSeconds = (csglSecondsPerDay - sglTimerStart) + sglTimerEnd
    Else
        sglTookSeconds = sglTimerEnd - sglTimerStart 'Проделжительность в секундах (дробное)
    End If
    If blnLongFormat = False Then
        ElapsedTimeInSec = Format(sglTookSeconds, "# ##0.000") & " сек."
    Else ' Длинный формат : "HH:NN:SS.000"
        ElapsedTimeInSec = "допишу потом ..."
     End If
End Function

Продолжительность переделки файла: 0,156 сек. (L1.DAT)
Общая продолжительность импорта: 0,820 сек.
Добавлено через 10 минут
Angry Old Man, на файле "большой" (Test55260Lines.txt =55 260 строк) - результат:
Продолжительность переделки файла: 1,133 сек. (Test55260Lines.txt)
Общая продолжительность импорта: 4,883 сек.
Ну не чемпионский результат, но идея переделки файла перед импортом право на жизнь какое то имеет.
Фсё.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.04.2024, 22:01

Макрос для перевода с японского на английский
Здравствуйте. Не найдётся ли у кого-нибудь макрос для перевода с японского на английский? Лучше для ACCESS, но я рассмотрю любой вариант....

Единое федеральное техническое и технологическое обеспечение в США как ответ на климатические катастрофы в США
США необходимо единое федеральное техническое и технологическое обеспечение как ответ на климатические катастрофы в США, так недостаточное...

Макрос для сравнения двух дат
1) Пишу макрос для EXCEL как сравнить две даты ? 2) Как узнать какая дата будет если от NOW() сместится на 5 дней ниже: а не самому...

Форматом записи в файл
Господа, столкнулся с таким вот траблом... Написал програмку &quot;Записать в файл прямого доступа N действительных чисел. Найти наибольшее из...

Макрос открывает форму поиска
Нажимаю на номер талона, затем печать, форма открывает другой номер талона. Вот скринтош:


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru