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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2009, 14:56   #1
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию Как отправить мастеру импорта текстов несколько нажатий клавиш

Приветствую Вас!

Подскажите пожалуйста, как правильно реализовать следующее:

при открытии, после диалога выбора текстового файла появляется диалог мастера текстов, в котором в три шага необходимо определять параметры импорта текста. Определение всех этих параметров сводится к нажатию следующей комбинации клавиш : Enter-Enter-Tab-Tab-KeyDown-Enter, но нажимать каждый раз эту комбинацию не очень удобно.

Подскажите как в коде правильно описать эти действия
Oooleg вне форума Ответить с цитированием
Старый 24.06.2009, 15:30   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Послать нажатия диалоговому окну вряд ли получится
Но есть способ намного проще (и правильнее) - программно открыть этот текстовый файл, указав параметры его обработки.

Достаточно одной строки кода типа этой:
Код:
Workbooks.OpenText Filename:=ИмяФайла, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(1, 2)
В этой строке и указываются все параметры, которые можно назначить в диалоговом окне мастера текстов.

Пример есть здесь:
http://www.programmersforum.ru/showp...75&postcount=2

Макрос будет выглядеть примерно так:
Код:
Sub test()
    ChDrive "D": ChDir "D:\рабочий стол\Заявки 2008г"
    iFullName = Application.GetOpenFilename("Текстовые файлы (*.txt),*.txt")
    If iFullName = False Then Exit Sub
    Workbooks.OpenText Filename:=iFullName, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(1, 2)
End Sub

Пример использования функции GetOpenFilename
Код:
Sub test_GetOpenFilename()
    ChDrive "D"
    'Если необходимо изменить текущий диск
    'Укажите реально существующий диск
    ChDir "D:\рабочий стол\Заявки 2008г"
    'Укажите реально существующую папку
    'Если Вы сомневаетесь в её наличии, то можно использовать
    'предварительную проверку If Dir(iPath, vbDirectory) <> "" Then

    iFullName = Application.GetOpenFilename( _
                FileFilter:="Текстовые файлы (*.txt),*.txt", _
                Title:="Выберите нужный файл и кликните кнопку")

    If iFullName <> False Then
        MsgBox "Вы выбрали файл :  " & iFullName, , ""
    Else
        MsgBox "Вы отказались от выбора файла", , ""
    End If
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 24.06.2009, 18:20   #3
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

открываю файл следующим образом:
ChDir ActiveWorkbook.Path
iFullName = Application.GetOpenFilename("Все файлы (*.*),*.*")
If iFullName = False Then Exit Sub
Workbooks.OpenText Filename:=iFullName _
, Origin:=866, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False _
, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
все работает, но импортированный текст автоматичесски форматируется Exel'ем, это мне совсем не нужно. Может можно как-нибудь програмно отключить аавтоформатирование или что то изменить в моем коде так чтобы текст в любом случае импортировался как текст.
Oooleg вне форума Ответить с цитированием
Старый 24.06.2009, 18:24   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте так:
Код:
ChDir ActiveWorkbook.Path
iFullName = Application.GetOpenFilename("Все файлы (*.*),*.*")
If iFullName = False Then Exit Sub
Workbooks.OpenText Filename:=iFullName, Origin:=866, StartRow:=1, DataType:=xlDelimited, _
                   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
                   Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 2), TrailingMinusNumbers:=True
EducatedFool вне форума Ответить с цитированием
Старый 24.06.2009, 18:28   #5
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

спасибо, помогло

если не затруднит, не могли бы вы объяснить какая разница между
... FieldInfo:=Array(1, 1), ...
и
... FieldInfo:=Array(1, 2),..
Oooleg вне форума Ответить с цитированием
Старый 24.06.2009, 18:37   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

  1. Ставим курсор в коде на слово OpenText
  2. Нажимаем F1
  3. В открывшейся справке по методу находим параметр FieldInfo
  4. Находим в описании этого параметра ссылку XlColumnDataType
  5. Щелкаем на ней, и читаем подробное описание.
Цитата:
XlColumnDataType can be one of these XlColumnDataType constants.

xlGeneralFormat General ' по умолчанию - 1-й параметр
xlTextFormat Text ' а нам нужен этот
xlMDYFormat MDY date
xlDMYFormat DMY date
xlYMDFormat YMD date
xlMYDFormat MYD date
xlDYMFormat DYM date
xlYDMFormat YDM date
xlEMDFormat EMD date
xlSkipColumn Skip Column
EducatedFool вне форума Ответить с цитированием
Старый 25.06.2009, 10:09   #7
Oooleg
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 39
По умолчанию

познавательно, спасибо.
Oooleg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отправить несколько команд на COM порт sttauffen Компоненты Delphi 0 13.05.2009 18:16
Перехват нажатий клавиш - АLT chandrasecar Win Api 8 27.11.2008 16:12
симуляция нажатий клавиш 4321 Общие вопросы Delphi 14 23.10.2008 23:18
Иммитация нажатий клавиш клавиатуры chandrasecar Win Api 5 11.10.2008 12:16
отслеживание нажатий клавиш Артэс Win Api 6 14.06.2008 20:02