Страницы: 1
RSS
VBA. Замена точки на запятую из Excel в TXT
 
Уважаемые форумчане, помогите пожалуйста.
Есть задача автоматизировать загрузку в учетную систему. Данные для формируются в Excel, после чего сохраняются из него в формат Text (Tab delimited). Проблема в том, что когда происходит сохранение макросом, он у чисел заменяет разделитель запятую на точку. А в нашем случае очень важно иметь именно запятую и сохранить столбцы.
Пробовала превратить числа в текст, не получается. Колонки в файле txt съезжают и загрузка не происходит.

Excel файл - для формирования колонок в правильном формате, TXT файл - для загрузки

Код
    ThisWorkbook.Activate
    Sheets("for csv").Select
    Range("D5").Select
    ActiveSheet.PivotTables("PivotTable2").PivotCache.Refresh
    Application.CalculateUntilAsyncQueriesDone
    
    Range("B5:Z5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Workbooks.Add
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    
    Columns("M:N").Select
    Selection.NumberFormat = "dd.mm.yyyy"
    Columns("S:S").Select
    Selection.NumberFormat = "0.00"
    Range("A1").Select
    
    File_name_for_save = Workbooks("PRICE LIST upload.xlsm").Sheets("for csv").Range("A1").Value
    
    With Application.FileDialog(msoFileDialogSaveAs)
        .InitialFileName = File_name_for_save
        If .Show = 0 Then Exit Sub
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=File_name_for_save
        Application.DisplayAlerts = True
    End With
    
    'ActiveWorkbook.SaveAs Filename:=File_name_for_save, FileFormat:=xlText, CreateBackup:=False
    'ActiveWorkbook.Close
 
Мария, добрый день!
Вариант:
Код
Sub Import_txt()
Dim FilePath As String
Dim i, j, data
FilePath = ThisWorkbook.Path & "\test1.txt"
Open FilePath For Output As #1
For i = 1 To Cells(1, 1).CurrentRegion.Rows.Count
    For j = 1 To Cells(1, 1).CurrentRegion.Columns.Count
        data = Cells(i, j).Value
        If VarType(data) = vbDouble Then data = Replace(data, ".", ",")
        If IsEmpty(data) Then data = ""
        If j <> Cells(1, 1).CurrentRegion.Columns.Count Then
            Print #1, data & vbTab;
        Else
            Print #1, data
        End If
    Next j
Next i
Close #1
End Sub
Сохраняет числа с разделителем - запятой в файл test1.txt
Изменено: artemkau88 - 22.07.2022 18:30:00
 
Код
ActiveWorkbook.SaveAs Filename:=File_name_for_save, FileFormat:=xlText, local:=True
 
Я так тоже пробовала. Все равно меняет запятые на точки. А в моем случае крайне критично оставить именно точки
 
Точно так? Или как у вас написано?
 
Странно, у меня и загрузка данных и выгрузка (с кодом из сообщения #2) работает корректно.
 
artemkau88, ничего странного. Главное - написать, что не работает!  :D
 
:D  
 
Добрый день!
Метод из #3 будет выводить числа с разделителем дробной доли точкой, если это предусмотрено региональными настройками. Судя по файлу из #1, у автора темы именно этот случай.

Функция Str возвращает неотрицательные числа с дополнительным пробелом слева и не факт, что это понравится принимающей программе. Я бы строку 9 из #2 записал в более безопасном виде (IsNumeric зависит от региональных настроек):

Код
If VarType(data) = vbDouble Then data = Replace(data, ".", ",")
Изменено: sokol92 - 22.07.2022 18:24:11
Владимир
 
sokol92, спасибо! Исправил сообщение #2
 
artemkau88, Спасибо большое за попытку помочь, но с самой загрузкой что-то пошло не так.. пока разбираюсь, но главное меняет. Сдаваться не буду.


RAN, и Вам ОГРОМНОЕ спасибо! У нас обновили офис, и ваш вариант заработал! и загрузка проходит правильно.
Страницы: 1
Наверх