Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2009, 17:26   #1
mistx
Форумчанин
 
Регистрация: 30.09.2008
Сообщений: 104
По умолчанию Сохранение файла в Dos кодировке

Есть макрос, который на основе данных в ескеле и в msaccess создает текстовый файл, но в кодировке win.
Как можно сохранить его в DOS кодировке?
mistx вне форума Ответить с цитированием
Старый 02.12.2009, 19:43   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте mistx.
С задачей конвертации поможет справиться функция:
Код:
Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" _
(ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Function toDOS(sWin$) As String
    toDOS = Space$(Len(sWin))
    CharToOem sWin, toDOS
End Function
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 03.12.2009, 08:43   #3
mistx
Форумчанин
 
Регистрация: 30.09.2008
Сообщений: 104
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте mistx.
С задачей конвертации поможет справиться функция:
Код:
Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" _
(ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Function toDOS(sWin$) As String
    toDOS = Space$(Len(sWin))
    CharToOem sWin, toDOS
End Function
Евгений.
Добрый день, Евгений.
Подскажите, пожалуйста, как мне применить данную функцию конкретно к моей задачи?
После объявления функции, что я должен сделать?

сначала у меня открывается текстовый файл, затем импортируются нужные данные из екселя, затем закрытие.
Application.DisplayAlerts = False
Dim s As TextStream, row As Range
Set s = CreateObject("scripting.filesystemo bject").OpenTextFile(Filename, ForWriting, True)
Application.ScreenUpdating = False
Dim ra As Range: Set ra = ActiveSheet.UsedRange.EntireRow
ra.Columns(2).TextToColumns _
...
...
s.Close
mistx вне форума Ответить с цитированием
Старый 03.12.2009, 09:10   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте mistx.
Применять функцию можно разместив её код в модуле проекта.
и скорее всего в коде, там где "написаны" многоточия должна быть подобная конструкция:
sTextFile = sText
измените её так:
sTextFile = toDOS(sText)
и будет Вам счастье.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 04.12.2009, 11:31   #5
mistx
Форумчанин
 
Регистрация: 30.09.2008
Сообщений: 104
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте mistx.
Применять функцию можно разместив её код в модуле проекта.
и скорее всего в коде, там где "написаны" многоточия должна быть подобная конструкция:
sTextFile = sText
измените её так:
sTextFile = toDOS(sText)
и будет Вам счастье.
Евгений.
подобной конструкции в коде нет.
поскольку код большой (внутри все что должно импортироваться и порядок импорта)
привожу основную часть.
похоже здесь только CreateObject("scripting.filesystemo bject").OpenTextFile(Filename, ForWriting, True) создает а ts.close закрывает.

Sub prog()
Application.DisplayAlerts = False
Dim ts As TextStream, row As Range
Filename = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "result.txt")
Set ts =CreateObject("scripting.filesystem object").OpenTextFile(Filename, ForWriting, True)

Application.ScreenUpdating = False
Dim ra As Range: Set ra = ActiveSheet.UsedRange.EntireRow
ra.Columns(2).TextToColumns _
ra.Columns(10).Resize(, 3), xlDelimited, , , , , , True

For Each cell In ra.Columns(4).Cells: Debug.Print cell: ss = ss + Val(cell): Next
сумма = Replace(FormatNumber(ss, 2), ",", ".")

ra.Resize(, 12).EntireColumn.AutoFit
Application.DisplayAlerts = True
End Sub
ts.close
mistx вне форума Ответить с цитированием
Старый 04.12.2009, 16:33   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте mistx.
Подозреваю переменной ss заполняется тело файла, судить о способе решения с уверенностью можно только проанализировав всю конструкцию, а не её часть. Возможно приемлемой будет её конвертация после заполнения в цикле.
Код:
...
For Each cell In ra.Columns(4).Cells
      ss = ss + Val(cell)
Next
ss = toDOS(ss)
сумма = Replace(FormatNumber(ss, 2), ",", ".")
...
Евгений.
P.S. по правилам форума и для удобочитаемости выкладываемый код заключайте в тэги [соde]...[/соde]
Teslenko_EA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие/сохранение файла НеВа6464 Microsoft Office Excel 4 01.06.2009 14:06
Сохранение файла KREGI Помощь студентам 4 30.03.2009 21:09
Сохранение файла Македонский Общие вопросы Delphi 7 17.08.2007 08:35
Как сохранить текст в DOS кодировке? oleg kutkov Общие вопросы Delphi 9 06.08.2007 09:32
СОХРАНЕНИЕ В 23 ФАЙЛА ПОДРЯД!!!! _FL@ER_ Помощь студентам 6 26.06.2007 22:31