Страницы: 1
RSS
Глюк работы с сетевым диском
 
При проверки сетевого диска :  
If CreateObject("Scripting.FileSystemObject").DriveExists(Left(.Cells(iLastRow, 2)) = True  
выдает Fase, Хотя диск подключен, стоит на его открыть в стандартными средствами и после закрыть, то после нормально определяется в VBA.  
То же самое и через CreateObject("Scripting.FileSystemObject").Drives  
Подскажите, каким методом можно обойти этот глюк или как програмно сначало откыть этот диск. Спасибо!
 
Что, никто не сталкивался, Юрий М, The Prist вы же в теме... =)
 
Попробуйте задать небольшой Тайм-аут в макросе - дайте системе время подумать. Она спешит, но не так быстро, как Вы.
 
Да нет, вы не поняли, дело не в том что система не успевает найти диск, так как после того как я в ручную зайду на этот сет. диск и закрою его, она срабатывает и времени ей хватает... просто почему то до захода в ручную на сетт. диск она его не видит, хотя в "моем компьютере он есть". Как быть?
 
{quote}{login=Макс}{date=09.02.2010 11:42}{thema=}{post}Что, никто не сталкивался, Юрий М, The Prist вы же в теме... =){/post}{/quote}Ну Вы прям хотите в полдвенадцатого чтобы все кто в теме подключились через 15 минут после поста :)  
Думаю, что VBA все-таки не успевает пройти авторизацию.    
Поскольку Вам скорей всего нужно не наличие диска, а записать/прочитать на нем, то нужно попытаться сделать это несколько раз проверяя ошибку.  
Вот старая тема: http://www.planetaexcel.ru/forum.php?thread_id=3661  
Вот кусок рабочего кода:  
 
Resave:  
Err.Clear  
On Error Resume Next  
   
 ActiveWorkbook.SaveAs Filename:="\\сетевой_путь" & "\" & tec.Offset(0, 3).Value & "_" & Mes & "." & God & "_BR-Ф2.xls"  
If Err.Number <> 0 Then  
If Err.Number = 1004 And CountErr < 5 Then  
   Err1004 = Err1004 + 1  
   CountErr = CountErr + 1  
   Err.Clear  
   GoTo Resave  
Else  
   If Err.Number = 1004 Then  
       MsgBox ("Чета, где-то не могу записать на портал, давай через 20 мин еще раз попробуем")  
   Else  
       MsgBox "Ошибка " & Err & ": " & Error(Err) & vbCrLf & "Сообщить Разработчику."  
   End If  
   ThisWorkbook.Worksheets("макрос").Cells(1, 2).Value = Err1004  
   Application.DisplayAlerts = True  
   Application.StatusBar = False  
   Application.ScreenUpdating = True  
   Exit Sub  
End If  
End If  
Err.Clear  
 
 
А может проверять средствами WinAPI:  
VBA: Как проверить наличие файла и папки, используя функции WinAPI ?  
http://www.msoffice.nm.ru/faq/macros/winapi3.htm#faq348
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=10.02.2010 09:47}{thema=Re: }{post}{quote}{login=Макс}{date=09.02.2010 11:42}{thema=}{post}Что, никто не сталкивался, Юрий М, The Prist вы же в теме... =){/post}{/quote}Ну Вы прям хотите в полдвенадцатого чтобы все кто в теме подключились через 15 минут после поста :)  
Думаю, что VBA все-таки не успевает пройти авторизацию.    
Поскольку Вам скорей всего нужно не наличие диска, а записать/прочитать на нем, то нужно попытаться сделать это несколько раз проверяя ошибку.  
Вот старая тема: http://www.planetaexcel.ru/forum.php?thread_id=3661  
Вот кусок рабочего кода:  
 
Resave:  
Err.Clear  
On Error Resume Next  
   
 ActiveWorkbook.SaveAs Filename:="\\сетевой_путь" & "\" & tec.Offset(0, 3).Value & "_" & Mes & "." & God & "_BR-Ф2.xls"  
If Err.Number <> 0 Then  
If Err.Number = 1004 And CountErr < 5 Then  
   Err1004 = Err1004 + 1  
   CountErr = CountErr + 1  
   Err.Clear  
   GoTo Resave  
Else  
   If Err.Number = 1004 Then  
       MsgBox ("Чета, где-то не могу записать на портал, давай через 20 мин еще раз попробуем")  
   Else  
       MsgBox "Ошибка " & Err & ": " & Error(Err) & vbCrLf & "Сообщить Разработчику."  
   End If  
   ThisWorkbook.Worksheets("макрос").Cells(1, 2).Value = Err1004  
   Application.DisplayAlerts = True  
   Application.StatusBar = False  
   Application.ScreenUpdating = True  
   Exit Sub  
End If  
End If  
Err.Clear  
 
 
А может проверять средствами WinAPI:  
VBA: Как проверить наличие файла и папки, используя функции WinAPI ?  
http://www.msoffice.nm.ru/faq/macros/winapi3.htm#faq348{/post}{/quote}  
Нет, нужно было просто реконект дисков сделать...Так как если комп загрузился перед тем на ком весят диски, они видны но система  их в счет не берет. Вот и все...
 
Странная у Вас проблема, перед обращением проверяю путь и наличие файла этими функциями и No problem:  
Здесь FileName полный путь с именем файла  
Function FileExists(FileName As String) As Boolean  
' Возвращает ИСТИНА, если файл существует  
FileExists = (Dir(FileName) <> "")  
End Function  
Здесь FileName полный путь с именем файла  
 
Здесь полный путь к папке с "/" в конце  
Function PathExists(pname) As Boolean  
' Возвращает ИСТИНА, если путь существует  
Dim x As String  
On Error Resume Next  
x = GetAttr(pname) And 0  
If Err = 0 Then PathExists = True _  
Else PathExists = False  
End Function
 
{quote}{login=Макс}{date=13.02.2010 03:26}{thema=Re: Re: }{post}  
Нет, нужно было просто реконект дисков сделать...Так как если комп загрузился перед тем на ком весят диски, они видны но система  их в счет не берет. Вот и все...{/post}{/quote}Реконект ради реконекта? Интересно.  
Сетевой диск просто нужен, но ни читать с него, ни писать на него не предполагается?
Bite my shiny metal ass!      
Страницы: 1
Читают тему
Наверх