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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2011, 14:05   #1
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию Запутался с типами переменных

Запутался с типами переменных.
Хочу настройки импорта txt файлов.

Две переменные уже заданы, а с остальными проблемка, т.к. пытался задать и ничего не получалось в итоге.

Вот фрагмент кода:


Dim MyTextFileColumnDataTypes(), MyTextFileFixedColumnWidths()

Sheets("Лист1").Select

With ActiveSheet.QueryTables.Add(Connect ion:= _
"TEXT;" & Sheets("Лист2").Range("A1"), _
Destination:=Range("$A$1"))
.Name = "Данные"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1251
.TextFileStartRow = 1
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = MyTextFileColumnDataTypes
.TextFileFixedColumnWidths = MyTextFileFixedColumnWidths
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With


Хочу сделать примерно так:


Dim _
MyFieldNames As ???, _
MyRowNumbers As ???, _
MyFillAdjacentFormulas As ???, _
MyPreserveFormatting As ???, _
MyRefreshOnFileOpen As ???e, _
MyRefreshStyle As ???, _
MySavePassword As ???, _
MySaveData As ???, _
MyAdjustColumnWidth As ???, _
MyRefreshPeriod As ???, _
MyTextFilePromptOnRefresh As ???, _
MyTextFilePlatform As ???, _
MyTextFileStartRow As ???, _
MyTextFileParseType As ???, _
MyTextFileTextQualifier As ???, _
MyTextFileConsecutiveDelimiter As ???, _
MyTextFileTabDelimiter As ???, _
MyTextFileSemicolonDelimiter As ???, _
MyTextFileCommaDelimiter As ???, _
MyTextFileSpaceDelimiter As ???, _
MyTextFileColumnDataTypes(), _
MyTextFileFixedColumnWidths(), _
MyTextFileTrailingMinusNumbers As ???

Sheets("Лист1").Select

With ActiveSheet.QueryTables.Add(Connect ion:= _
"TEXT;" & Sheets("Лист2").Range("A1"), _
Destination:=Range("$A$1"))
.Name = "Данные"
.FieldNames = MyFieldNames
.RowNumbers = MyRowNumbers
.FillAdjacentFormulas = MyFillAdjacentFormulas
.PreserveFormatting = MyPreserveFormatting
.RefreshOnFileOpen = MyRefreshOnFileOpen
.RefreshStyle = MyRefreshStyle
.SavePassword = MySavePassword
.SaveData = MySaveData
.AdjustColumnWidth = MyAdjustColumnWidth
.RefreshPeriod = MyRefreshPeriod
.TextFilePromptOnRefresh = MyTextFilePromptOnRefresh
.TextFilePlatform = MyTextFilePlatform
.TextFileStartRow = MyTextFileStartRow
.TextFileParseType = MyTextFileParseType
.TextFileTextQualifier = MyTextFileTextQualifier
.TextFileConsecutiveDelimiter = MyTextFileConsecutiveDelimiter
.TextFileTabDelimiter = MyTextFileTabDelimiter
.TextFileSemicolonDelimiter = MyTextFileSemicolonDelimiter
.TextFileCommaDelimiter = MyTextFileCommaDelimiter
.TextFileSpaceDelimiter = MyTextFileSpaceDelimiter
.TextFileColumnDataTypes = MyTextFileColumnDataTypes
.TextFileFixedColumnWidths = MyTextFileFixedColumnWidths
.TextFileTrailingMinusNumbers = MyTextFileTrailingMinusNumbers
.Refresh BackgroundQuery:=False


Вместо " ??? " что только уже ни пробовал, не получается.
Подскажите пожалуйста.

Пробовал поставить везде тип Variant и тогда на строке .TextFilePlatform = MyTextFilePlatform выдает ошибку.
Нет ничего невозможного, главное верить в это.

Последний раз редактировалось Snekich; 06.12.2011 в 14:45.
Snekich вне форума Ответить с цитированием
Старый 06.12.2011, 14:48   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Там где на выходе True/False - ставьте Boolean
Там, где другое - смотрите в ObjectBrowser, чему равно значение.
Например xlFixedWidth = 2, т.е byte/single/integer/long вероятно можно ставить (не проверял).
Или оставляйте без типа и смотрите при отладке, что код сам выставит - то и впишите.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.12.2011, 14:51   #3
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Попутно - имена переменных громоздки, утяжеляют восприятие кода. Я бы сокращал. Но это на любителя.
vikttur вне форума Ответить с цитированием
Старый 06.12.2011, 15:04   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Используйте тип Variant, не ошибетесь
Код:
Dim MyFieldNames, MyRowNumbers 'и т.д.
Другое дело, что переменным ведь надо присвоить значения:
Код:
MyFieldNames = True
MyRowNumbers = False
, и только потом использовать.
Обычно лишь несколько параметров меняются по ходу выполнения программы, для них надо использовать переменные. А остальные имеет смысл оставить так, как макрорекордер записал.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 06.12.2011, 15:12   #5
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Используйте тип Variant, не ошибетесь
Код:
Dim MyFieldNames, MyRowNumbers 'и т.д.
Другое дело, что переменным ведь надо присвоить значения:
Код:
MyFieldNames = True
MyRowNumbers = False
, и только потом использовать.
Обычно лишь несколько параметров меняются по ходу выполнения программы, для них надо использовать переменные. А остальные имеет смысл оставить так, как макрорекордер записал.

Значения переменным задаются, я не стал весь код сюда копировать.
Все-равно не получается у меня добиться результата...

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

В какой строке данного кода хранится информация о кодировке текста.
Я считал, что в строке
.TextFilePlatform = 1251
но, когда я задаю вместо 1251 переменную, которой заранее присваивается значение (например, Кириллица (Dos) ) ..... кодировка все-равно выбирается по умолчанию 1251: Кириллица(Windows)

Как решить данную проблему?
Нет ничего невозможного, главное верить в это.
Snekich вне форума Ответить с цитированием
Старый 06.12.2011, 15:58   #6
Snekich
Форумчанин
 
Аватар для Snekich
 
Регистрация: 19.11.2011
Сообщений: 128
По умолчанию

Проблему понял, а как решить пока не знаю... создам новую тему т.к. речь пойдет уже не о переменных.))
Нет ничего невозможного, главное верить в это.
Snekich вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с типами Form_13 Помощь студентам 1 28.07.2011 16:41
Проблема с типами maziLa Помощь студентам 2 13.02.2010 13:23
запутался! mistertvister Помощь студентам 3 28.10.2009 14:52
Проблемы с типами tavrocotaps Общие вопросы C/C++ 3 29.01.2009 17:28
проблема с типами Saya Свободное общение 0 27.04.2007 12:22