Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

798

Часть VII. Дополнительные темы

вол табуляции или запятая, Excel открывает файл без отображения мастера импорта текста. Если данные интерпретируются некорректно, закройте файл и попробуйте пе­ реименовать его, указав расширение .тхт.

Мастер распределения текста по столбцам (вызывается с помощью команды Данные^Работа с данными^Текст по столбцам (Data^Data Tools^Text to Table)) напомина­ ет мастер импорта текста. Отличие заключается в том, что он работает с данными, на­ ходящимися в единственном столбце рабочего листа.

Примеры управления текстовыми файлами

В данном разделе содержится несколько примеров, демонстрирующих различные способы управления текстовыми файлами.

Импортирование данных из текстового файла

В следующем примере процедура читает текстовый файл и размещает каждую строку данных в отдельную ячейку (начиная с активной ячейки).

Sub

Im p o rtD a ta ()

Open

" c : \ d a t a \ t e x t f i l e . t x t " For In p u t As #1

r

= 0

 

 

Do U n t il

EOF(1)

 

L in e

In p u t #1, d a ta

 

A c t iv e C e ll. O ff s e t( r , 0) = d a ta

 

r

= r

+ 1

Loop

 

 

Close

#1

 

End

Sub

 

 

В большинстве случаев данная процедура не принесет пользы, так как каждая строка данных просто помещается в отдельную ячейку. Часто бывает проще открыть файл, вос­ пользовавшись командой Файл^Открыть (File^Open).

Экспортирование диапазона в текстовый файл

Рассматриваемая в этом разделе процедура записывает данные из выбранного диапа­ зона рабочего листа в текстовый файл CSV. Как известно, Excel может экспортировать данные в CSV-файл, но при этом экспортируется весь рабочий лист. Приведенный ниже макрос работает с указанным диапазоном ячеек.

Sub E xp ortR a ng e ()

S trin g

Dim

Filenam e

As

Dim

NumRows

As

Long,

NumCols As In te g e r

Dim

r As Long,

с As

In te g e r

Dim

Data

As

Range

 

Dim

ExpRng

 

Set

ExpRng

=

S e le c tio n

NumCols

= ExpRng. Colum ns. Count

 

 

NumRows

= ExpRng. Rows. Count

 

 

" \ t e x t f i l e . csv"

Filenam e

= A p p lic a tio n . D e fa u ltF ile P a th &

Open

Filenam e

For O u tp ut

As

#1

 

^

For r

=

1 To

NumRows

 

 

 

 

For с = 1

To NumCols

 

c ).V a lu e

 

 

 

Data =

ExpRng. C e lls ( r ,

V a l(D a ta )

 

I f

IsN u m e ric(D a ta )

Then Data =

 

I f

IsE m pty(ExpR ng. C e lls ( r , c ) )

Then

Data = ""

Глава27. Управление файлами с помощью VBA

801

няться, поскольку для метода TextToColumns не указаны какие-либо операции. Если ячейка А1 пустая, код вставляет временную строку (поскольку метод TextToColumns неработоспособен, если ячейка пустая). Перед завершением работы процедура удаля­ ет временную строку.

Импортирование текстового файла в диапазон

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

Sub

Im portR ange()

 

 

 

 

 

Dim

ImpRng

As

Range

 

 

 

 

Dim

Filenam e

As

S trin g

 

 

 

Dim

r

As

Long, с

As

In te g e r

S trin g *

1

Dim

t x t

As

S trin g ,

Char

As

Dim Data

 

 

 

 

 

 

 

 

Dim

i

As

In te g e r

 

 

 

 

 

Set

ImpRng

=

A c tiv e C e ll

 

 

 

On E rro r

Resume

N ext

 

 

 

Filenam e

=

A p p lic a tio n .D e fa u ltF ile P a th & " \ t e x t f i l e . csv"

Open Filenam e

F or In p u t

As

#1

 

I f

E rr

<>

0 Then

 

 

 

 

 

 

MsgBox

"He

найден: "

& Filenam e,

v b C r it ic a l, "Ошибка"

 

 

E x it

Sub

 

 

 

 

 

 

End

I f

 

 

 

 

 

 

 

 

 

r

=

0

 

 

 

 

 

 

 

 

 

с

=

0

 

 

 

 

 

 

 

 

 

t x t

=

""

 

 

 

 

 

 

 

=

F alse

 

A p p lic a tio n . S creenU pdating

 

Do U n t il

EOF(1)

 

 

 

 

 

 

 

 

L in e

In p u t

#1,

Data

 

 

 

 

For

i

=

1

To

Len(D ata)

 

 

 

 

 

Char

=

M id (D a ta , i , 1)

 

 

 

 

I f

Char

=

" , " Then '

запятая

 

 

 

 

A c t iv e C e ll. O ff s e t( r , c) = t x t

 

 

 

 

с

=

с

+

1

 

 

 

 

 

 

 

 

 

t x t

=

""

 

 

 

 

 

 

 

 

E ls e lf

i

=

Len(D ata)

Then '

конец

строки

 

 

 

I f

Char

<>

C hr(34)

 

Then

t x t =

t x t & Char

 

 

 

A c t iv e C e ll. O f f s e t ( r , c) = t x t

 

 

 

 

t x t

=

""

<>

C hr(34)

Then

 

 

 

 

E ls e lf

Char

 

 

 

 

 

t x t

=

t x t

&

Char

 

 

 

 

 

 

End I f

 

 

 

 

 

 

 

 

 

N ext

i

 

 

 

 

 

 

 

 

 

 

с

=

0

+

1

 

 

 

 

 

 

 

 

 

r

=

r

 

 

 

 

 

 

 

 

 

Loop

 

 

 

 

 

 

 

 

 

 

 

 

-

Close

#1

 

 

 

 

 

 

 

=

True

 

 

A p p lic a tio n . S creenU pdating

 

 

End Sub

26 3ak. 3107