Формат сохраняемой ячейки без кавычек

Программирование на Visual Basic for Applications
Sanch
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 04.11.2005 (Пт) 17:16

Формат сохраняемой ячейки без кавычек

Сообщение Sanch » 06.11.2005 (Вс) 12:09

Имеется лист в документе Excel, который нужно сохранить в тхт файл. Если просто взять и сохранить руками документ, то все нормально, получается содержание типа:
первое слово, второе слово число
третье слово и четвертое число

Если же сохранять через макрос (ActiveWorkbook.SaveAs Filename:="E:\temp.txt", FileFormat:=xlText, _
CreateBackup:=False), то формат сохраняемого файла выходит таким
"первое слово, второе слово" число
третье слово и четвертое число

Проще говоря, фразы, которые содержат запятую, знак & (может еще какие то) выделяются кавычками. Как бы сделать, чтобы никаких кавычек не появлялось в независимости от содержимого ячейки? Пробовал уже задавать NumberFormat = "@" для этих ячеек, все равно с кавычками сохраняет.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 06.11.2005 (Вс) 15:13

Попробуй сохранить как xlUnicodeText

Sanch
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 04.11.2005 (Пт) 17:16

Сообщение Sanch » 06.11.2005 (Вс) 16:26

Пробовал, все равно кавычки лезут.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 06.11.2005 (Вс) 19:31

У меня всё идёт без кавычек, но и разделитель стоит Tab.
Попробуй открытьь какой - либо txt файл указав разделитель Tab или пробел, а потом сохрани свой файл снова (а лутше новый другой тестовый).
Я думаю здесь в разделителе дело.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.11.2005 (Пн) 9:17

Я бы сохранял вручную, открывая файл Open ... For Output, выгружая в него строки Print #FileNumber, и закрывая файл Close.
Уже не первый раз слышу о глюках при загрузке/выгрузке в CSV.
Lasciate ogni speranza, voi ch'entrate.

Sanch
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 04.11.2005 (Пт) 17:16

Сообщение Sanch » 08.11.2005 (Вт) 13:26

Значения ячейкам у меня присваивается так:
Worksheets("Sheet" & k).Cells(m, 2).Value = _
Worksheets("Лист1").Cells(m, 6).Value

Соотвественно это в цикле, m и к - переменные.
Причем даже если присвоить значения в макросе, а сохранить руками, то никаких кавычек нет
А если написать сохранение макросом, то появятся в любом случае :(
Можно как-нибудь обойтись использованием этой конструкции (с присовоением значений через =)? А то вся программа построена на этом принципе, а Print в VBA я еще ни разу и не пользовался :oops: - неделю только на VBA проги пишу, до этого только QBasic и C++
Димитрий разделитель - таб

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 08.11.2005 (Вт) 14:15

Сохраняешь ты как? Через SaveAs?
Быть... или не быть. Вот. В чём вопрос?

Sanch
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 04.11.2005 (Пт) 17:16

Сообщение Sanch » 08.11.2005 (Вт) 15:02

ActiveWorkbook.SaveAs Filename:="E:\temp.txt", FileFormat:=xlText, _
CreateBackup:=False

Так сохраняю. Пробовал и просто Save после SaveAs и вариантов 7-10 для FileFormat.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 08.11.2005 (Вт) 15:14

Правильно, а тебе предлагают другой вариант - сохранить вручную, как

alibek писал(а):открывая файл Open ... For Output, выгружая в него строки Print #FileNumber, и закрывая файл Close.


Почитай хелп по Open, Print и Close.
Быть... или не быть. Вот. В чём вопрос?

Sanch
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 04.11.2005 (Пт) 17:16

Сообщение Sanch » 08.11.2005 (Вт) 17:51

Да, как оказалось Open Print и Close простые операторы, спасибо, что их посоветовали. Только вот проблема странная с ними. Открываю любой файл, пытаюсь вписать в него любые данные и ошибка Bad File Mode появляется. Даже макрос в примере не работает!
Код: Выделить всё
Sub TestMacro()
Open "E:\TESTFILE" For Output As #1    ' Open file for output.
Print #1, "This is a test"    ' Print text to file.
End Sub

Ошибка вылетает на строке с Print. На компьютер залогинен под администратором, все права доступа к файлу есть.
Нашел похожую тему на форуме, там предлагают офис переставить, видимо придется переставлять. Сейчас стоит Windows XP SP2, Office 2003 Pro Edition English. Может можно обойти ошибку используя этот офис?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.11.2005 (Вт) 17:54

Видимо с правами все-же что-то не то.

А код бы я советовал использовать так:
Код: Выделить всё
Dim FN As Integer
FN = FreeFile
Open "C:\TEMP\testfile" For Output As #FN
...
Print #FN, "Test string"
Write #FN, "Test string with quotas"
...
Close #FN
Lasciate ogni speranza, voi ch'entrate.

Sanch
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 04.11.2005 (Пт) 17:16

Сообщение Sanch » 08.11.2005 (Вт) 17:59

Та же самая ошибка :(

Sanch
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 04.11.2005 (Пт) 17:16

Сообщение Sanch » 09.11.2005 (Ср) 14:21

Поставил Office XP Pro Rus - все заработало :)

Sanch
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 04.11.2005 (Пт) 17:16

Сообщение Sanch » 09.11.2005 (Ср) 16:03

Переписал программу используя Print - получилась еще короче и выполняется быстрее. Но теперь другая проблема возникла - как менять формат не ячейки, а переменной? Раньше я задавал формат ячейки так: Worksheets("Лист1").Cells(m, 6).NumberFormat = "0" а потом заносил в эту ячейку значение. Допустим занесенное число 311.55 менялось на 312. Теперь же я заношу значение ячейки в переменную T. И хранится там значение уже 311.55. Как мне поменять формат этой переменной на "0"?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 09.11.2005 (Ср) 16:40

Либо читать из ячейки не .Value, а .Text, либо перед записью использовать функцию Format$.
Быть... или не быть. Вот. В чём вопрос?


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39

    TopList