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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 16:37   #1
a236002
 
Регистрация: 17.04.2010
Сообщений: 3
По умолчанию Типы данных Variant , String

Просьба помочь.
Пытаюсь использовать для программы VBA стандартный блок "Обзор" для выбора файла.
Нашёл его в Интернете и он работает сам по себе.
Затем нужно открыть для считывания файл(см. часть 2 программы)
При запуске выходит ошибка Run-time error '13'
Type mismatch
в строке
Open CStr(vrtSelectedItem(1)) For Input As #1
Переменная vrtSelectedItem типа Variant, а нужна String
как преобразовать типы?
Спасибо.
==================================

'Объявление переменной как объекта FileDialog.
Dim fd As FileDialog

'Создание объекта FileDialog как диалогового окна типа File Picker.
Set fd = Application.FileDialog(msoFileDialo gFilePicker)

'Объявление переменной для хранения пути к каждому выбранному элементу.
'Несмотря на то что путь представляет собой строковую переменную (String),
'данная переменная должна являться объектом типа Variant, поскольку процедура
'цикла For Each...Next работает только с объектами Variant и Object.
Dim vrtSelectedItem As Variant

'Использование блока With...End With для создания ссылки на объект FileDialog.
With fd

'Использование метода Show для вывода диалогового окна типа File Picker.
'Пользователь нажал кнопку подтверждения действия.
If .Show = -1 Then

'Перебор элементов из коллекции FileDialogSelectedItems.
For Each vrtSelectedItem In .SelectedItems

'vrtSelectedItem содержит путь к каждому выбранному элементу.
'Здесь можно использовать любые нужные функции ввода/вывода по отношению к полученному пути.
'В данном примере путь просто отображается в окне сообщения.
MsgBox "Путь: " & vrtSelectedItem

Next vrtSelectedItem
'Пользователь нажал кнопку отмены действия.
Else
End If
End With

'Очистка значения переменной-ссылки.
Set fd = Nothing

'ч2 -------------------
Open CStr(vrtSelectedItem(1)) For Input As #1
Input #1, yy$
Close #1
MsgBox (yy$)
End Sub
a236002 вне форума Ответить с цитированием
Старый 17.04.2010, 17:19   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Я думаю ,нельзя преобразовать то.чего нет.Поэтому и ошибка
Код:


Private Sub CommandButton1_Click()

Dim fd As FileDialog

Dim Path As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)


Dim vrtSelectedItem As Variant

With fd


If .Show = -1 Then


For Each vrtSelectedItem In .SelectedItems


MsgBox "Путь: " & vrtSelectedItem
Path = vrtSelectedItem
Next vrtSelectedItem

Else
End If
End With

'Очистка значения переменной-ссылки.
Set fd = Nothing

'ч2 -------------------
Open Path For Input As #1
Input #1, yy$
Close #1
MsgBox (yy$)
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 20.04.2010, 23:55   #3
a236002
 
Регистрация: 17.04.2010
Сообщений: 3
По умолчанию

Действительно работает. Интуитивно понятно.
Однако хотелось бы пояснения для строки
Path = vrtSelectedItem
Ведь типы данных разные.
Если можно поподробнее о фразе "нельзя преобразовать то.чего нет".
И, всё таки, можно ли преобразовать Variant в String, не вводя доп. переменную
Спасибо!
a236002 вне форума Ответить с цитированием
Старый 21.04.2010, 00:31   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
Private Sub CommandButton1_Click()
Dim fd As FileDialog

Dim Path As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)


Dim vrtSelectedItem As Variant

With fd


If .Show = -1 Then


For Each vrtSelectedItem In .SelectedItems


MsgBox "Путь: " & vrtSelectedItem
Path = vrtSelectedItem
Next vrtSelectedItem
MsgBox "Путь: " & vrtSelectedItem ' А здесь то,о чем говорил,что нельзя преобразовать то,чего нет.Пусто
Else
End If
End With


Set fd = Nothing

'ч2 -------------------
Open Path For Input As #1
Input #1, yy$
Close #1
MsgBox (yy$)
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 21.04.2010, 12:20   #5
a236002
 
Регистрация: 17.04.2010
Сообщений: 3
По умолчанию

Спасибо!!!!
a236002 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типы данных С++ werser Помощь студентам 1 13.03.2010 18:34
Типы данных psycho-coder Паскаль, Turbo Pascal, PascalABC.NET 6 04.02.2010 20:03
Типы данных nedden Помощь студентам 2 12.11.2008 17:18
Типы данных??? Рустам Общие вопросы Delphi 10 08.11.2007 08:03