Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Узнать объем файлов

7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Как в макросе Excel зайти в папку на сервере и узнать объем файлов только с одним или двумя расширениями???:(
265
03 июля 2006 года
Gauss
975 / / 20.02.2000
есть такая функция FileLen вот ее и используй
7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Спасибо
7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
А как к папке подключится???
725
03 июля 2006 года
UnErase
190 / / 08.06.2006
А тебе имя сервака известно?
7.1K
03 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Да известно!
Вот код, который выводит объем всей папки, а мне нужны, только файлы с расширением *.dbf, *.ntx
 
Код:
Set fso = CreateObject("Scripting.FileSystemObject")
    Set fold = fso.GetFolder("\\DAS-001961\PREZENT")
    MsgBox fold.Size
    Set fso = Nothing
    Set fold = Nothing
265
03 июля 2006 года
Gauss
975 / / 20.02.2000
а точно так-же как ты в этом скипте делаешь, кстати это не похоже на макрос excel
7.1K
04 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
А что это???Вообще-то это макрос...
405
05 июля 2006 года
Dmitrii
554 / / 16.12.2004
Например, так:
 
Код:
For Each curFile In fold.Files
    curName = curFile.Name
    If StrComp(Right(curName, 3), "dbf", vbTextCompare) = 0 Or _
        StrComp(Right(curName, 3), "ntx", vbTextCompare) = 0 Then
        MsgBox curFile.Name & vbCr & curFile.Size
    End If
Next curFile
15K
05 июля 2006 года
vkodor
41 / / 04.07.2006
[QUOTE=Dmitrii]Например, так:
 
Код:
For Each curFile In fold.Files
    curName = curFile.Name
    If StrComp(Right(curName, 3), "dbf", vbTextCompare) = 0 Or _
        StrComp(Right(curName, 3), "ntx", vbTextCompare) = 0 Then
        MsgBox curFile.Name & vbCr & curFile.Size
    End If
Next curFile
[/QUOTE]
или так
 
Код:
For Each curFile In fold.Files
        If fso.GetExtensionName(curFile) = "dbf" Or _
            fso.GetExtensionName(curFile) = "ntx" Then _
            MsgBox curFile.Name & vbCr & curFile.Size / 1024
    Next curFile
7.1K
05 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Спасибо всем!!!:D
16K
05 июля 2006 года
kostyanet
24 / / 23.06.2006
Тогда надо либо глобально воткнуть опцию текстовой проверки (по дефолту бинарная), или использовать StrComp, как в предыдущем примере, или принудительно повышать\понижать регистр.

 
Код:
dim s as string
dim x as variant

For Each curFile In fold.Files
     s = ucase(GetExtensionName(curFile))
     If s = "DBF" Or s = "NTX" Then x = x + curFile.Size
Next

debug.print x/1024


Иначе возможны коллизии.
7.1K
07 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Где прописать путь к каталогу???

 
Код:
Dim s As String
    Dim x As Variant

    For Each curFile In fold.Files
         s = UCase(GetExtensionName(curFile))
         If s = "DBF" Or s = "NTX" Then x = x + curFile.Size
    Next

    Debug.Print x / 1024
405
07 июля 2006 года
Dmitrii
554 / / 16.12.2004
[QUOTE=Urfen_Djus]Где прописать путь к каталогу???[/QUOTE]
К этому: \\DAS-001961\PREZENT ?
Если - "да", то нигде не надо. Достаточно вставить любой из предложенных Вам вариантов между строками:
Set fold = fso.GetFolder("\\DAS-001961\PREZENT")
и
Set fso = Nothing
Вашего исходного фрагмента.
Переменная fold уже ссылается на интересующий Вас каталог.
7.1K
07 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Благодарю!!! =)
7.1K
07 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Dim s As String
Dim x As Variant
Почему он ругается на эти сточки, может чего с библиотеками????
7.1K
07 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Со String разобрался, но теперь ругается на s = UCase(GetExtensionName(curFile))
Почему не пойму???
7.1K
10 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Привет всем!!!Помогите мне пожалуйста разобратся кодом, он почему-то ругается на первую строчку, не знаю почему???Помогите...
Код:
Set fold = fso.GetFolder("\\DAS-001961\PREZENT")
'    Dim s As String
'    Dim x
'    For Each curFile In fold.Files
'         s = UCase(GetExtensionName(curFile))
'         If s = "DBF" Or s = "NTX" Then x = x + curFile.Size
'    Next
'
'    Debug.Print x / 1024
    For Each curFile In fold.Files
        If fso.GetExtensionName(curFile) = "dbf" Or _
            fso.GetExtensionName(curFile) = "ntx" Then _
            Debug.Print curFile.Name & vbCr & curFile.Size / 1024
    Next curFile
    Set fso = Nothing
585
10 июля 2006 года
honeybeer
297 / / 06.09.2004
Где fso = CreateObject(...)?
fso надо создать перед использованием.
7.1K
10 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Паставил уже и тоже не получается, но он не ругается, хотя бы на fso.
Он не выводит в таблицу данные этой папки
Вместо debug поставил:
Workbooks("Книга1.xls").Worksheets("Лист1").Range("A5").Value = curFile.Name & vbCr & curFile.Size / 1024
585
11 июля 2006 года
honeybeer
297 / / 06.09.2004
Вы б хоть выкладывали что пишет VBA. "Очень трудно в язык проникать..." (с) Би
7.1K
11 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Он ничего не пишет просто не выводит ни в Debug.Print ни в таблицу!!!!!
405
11 июля 2006 года
Dmitrii
554 / / 16.12.2004
[QUOTE=Urfen_Djus]но теперь ругается на s = UCase(GetExtensionName(curFile))
Почему не пойму???[/QUOTE]
Потому что надо так:
[color=blue]s = UCase(fso.GetExtensionName(curFile))[/color]
[QUOTE=Urfen_Djus]Он не выводит в таблицу данные этой папки
Вместо debug поставил:
Workbooks("Книга1.xls").Worksheets("Лист1").Range( "A5").Value = curFile.Name & vbCr & curFile.Size / 1024[/QUOTE]
Потому что Вы пытаетесь все результаты поместить в одну и ту же ячейку (Range( "A5").Value), а не в таблицу.
Ниже - пример вполне рабочего кода для Вашей задачи (разумеется, лишь в тех рамках, в которых Вы её описали).
Код:
Sub Example()
Dim s As String
Dim fso As Object, fold As Object, curFile As Object
On Error GoTo ErrCase
Set fso = CreateObject("Scripting.FileSystemObject")
Set fold = fso.GetFolder("\\DAS-001961\PREZENT")
i = 1
For Each curFile In fold.Files
    s = UCase(fso.GetExtensionName(curFile))
    If s = "DBF" Or s = "NTX" Then
        With Workbooks("Книга1.xls").Worksheets("Лист1")
            .Cells(i, 1).Value = curFile.Name
            .Cells(i, 2).Value = curFile.Size / 1024
        End With
        i = i + 1
    End If
Next curFile
Set fold = Nothing
Set fso = Nothing
MsgBox "Готово", vbInformation
Exit Sub
ErrCase:
MsgBox "Код: " & Err.Number & vbCr & "Описание: " & Err.Description, vbCritical, "Ошибка"
End Sub
7.1K
11 июля 2006 года
Urfen_Djus
61 / / 30.06.2006
Спасибо!!!Просто в ячеку А5 он бы вводил, просто заменяя предыдущие данные =)))И все равно спасибо!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог