MVB 97

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

MVB 97

Сообщение PVL » 10.11.2003 (Пн) 12:42

В VB 6.3 этот код работает нормально
Код: Выделить всё

Private Sub TextStreamTest()
    fileToOpen = Application _
    .GetOpenFilename("Excel Files (*.xls), *.xls")
If fileToOpen <> False Then
    DirPath = Left(fileToOpen, InStrRev(fileToOpen, "\"))
    MsgBox "Open " & DirPath
End If
   
End Sub

DirPath - это полный путь к открытому файлу. В VB'97 нету функции InStrRev. Вопрос в том, чем ее можно заменить, или как по-другому получить этот путь ? :oops:
С уважением, PVL !

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 12:46

Ну заменить ее допустим можно вот таким:

Код: Выделить всё
function instrrev(lwhat as string, lwhere as string, optional byval lstart as long = -1) as long
if lstart =- 1 then lstart= len(lwhere)
for i = lstart to 1 step -1
if mid(lwhere,i,1) = lwhat then
instrrev = i
exit function
end if
next i
instrrev = -1
end function
Последний раз редактировалось RayShade 10.11.2003 (Пн) 13:11, всего редактировалось 1 раз.

PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

Сообщение PVL » 10.11.2003 (Пн) 12:58

Попробовал, выдает ошибку компиляции: "Не соответствие типа аргумента ByRef ". Это что означает ?
С уважением, PVL !

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 13:12

Ошибочный кусок кода (твоего) в студию :)

PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

Сообщение PVL » 10.11.2003 (Пн) 13:27

Ошибку выдает при обращении к функции:
Код: Выделить всё
instrrev(fileToOpen, "\")

Выделеным остается "fileToOpen".
С уважением, PVL !

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 13:30

Ну так проверь тип переменной filetoopen.

Она должна быть string :)



PS. И вызывать надо instrrev ("\",filetoopen)

PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

Сообщение PVL » 10.11.2003 (Пн) 13:52

Попробовал поменять, не ругается при вызове instrrev, но DirPath = " "
Код: Выделить всё
DirPath = Left(fileToOpen, instrrev("\", fileToOpen))

А fileToOpen содержит строку полного пути с именем файла
Последний раз редактировалось PVL 10.11.2003 (Пн) 14:21, всего редактировалось 1 раз.
С уважением, PVL !

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 14:08

Внимательно мои постинги прочитай все.

PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

Сообщение PVL » 10.11.2003 (Пн) 14:25

Код: Выделить всё
Dim fileToOpen As String

Или я еще что-то пропустил ? :?:
С уважением, PVL !

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 14:32

Не

DirPath = Left(fileToOpen, instrrev("\", fileToOpen))

а

DirPath = Left(fileToOpen, instrrev(fileToOpen, "\"))

PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

Сообщение PVL » 10.11.2003 (Пн) 14:42

Но ведь ты писал:
Ну так проверь тип переменной filetoopen.
Она должна быть string

PS. И вызывать надо instrrev ("\",filetoopen)

Но и это не помогло, DirPath = " "
С уважением, PVL !

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 14:45

Тьфу, блин.

Запутался я.

DirPath = Left(fileToOpen, instrrev("\", fileToOpen)) это, конечно, верный вариант. У меня он работает во всяком случае.

PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

Сообщение PVL » 10.11.2003 (Пн) 15:03

Да, так будет верно, твой кусок кода работает, ошибка где-то дальше, запустил по-шагово
С уважением, PVL !

PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

Сообщение PVL » 10.11.2003 (Пн) 15:16

Ругается вот на эту строку
Код: Выделить всё
Dim fs As New FileSystemObject

Пишет "Не описан определяемый пользователем тип". Т.е. в VB'97 нету такого типа данных.
А код такой:
Код: Выделить всё
Set fs = Application.FileSearch             
With fs
    .LookIn = DirPath
    .Filename = "*.xls"
    If .Execute(SortBy:=msoSortByFileName, _
    SortOrder:=msoSortOrderAscending) > 0 Then
    ...
    Else
        MsgBox "There were no files found."
    End If
End With

Здесь организуется выборка файлов и некоторые действия с ними.
Можно ли как-то решить и эту проблему ?
С уважением, PVL !

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 15:28

Подключи библиотеку Microsoft Scripting Runtime.

Это насчет неопределенного типа данных. Только я в толк не возьму, зачем тебе FSO если ты используешь app.filesearch?

PVL
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 20.10.2003 (Пн) 11:10
Откуда: Россия, Томск

Сообщение PVL » 10.11.2003 (Пн) 15:48

Если не обьявлять, то вылетает ошибка при обращении к .Filename = "*.xls", а без этой строки в отбор попадает все подряд .. :cry:
С уважением, PVL !

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 16:14

Код: Выделить всё
dim fso as new filesystemobject
dim fl as file
dim spath as string
for each fl in fso.getfolder(dirpath)
if fl.name like "*.xls" then
.........
end if
next fl


Вот такой вот код.


Вернуться в Visual Basic 1–6

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

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

    TopList