powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Диалог- "Открыть файл"
25 сообщений из 50, страница 1 из 2
Диалог- "Открыть файл"
    #37191805
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте уважаемые гуру!
Есть программа на VBA в Excel-е, которая открывает другой xls-файл (2) с данными, обрабатывает их и создает третий xls-файл (3).
Файл (2) раньше всегда подавался со стандартным, одним и тем же, именем "Набор.xls". Теперь ситуация поменялась, необходимо приписывать к имени файла число, типа:
"Набор-1200.xls"
"Набор-1201.xls"
"Набор-1202.xls"
...
число в имени будет постоянно увеличиваться, а количество файлов, поступающих на обработку, будет разное. Возможно, не всегда цифры будут увеличиваться на единицу.
На выходе должны получаться файлы:
"Итог-1200.xls"
"Итог-1201.xls"
"Итог-1202.xls"
...
Цифры из имени файла (2) добавляются к имени файлу (3) - это сделать просто.
Подскажите, как лучше поступить в данной ситуации?
В голову ничего не приходит, кроме как сделать диалог для открытия файла (как это делается в стандартном меню: Файл - Открыть - появляется окно, в котором можно выбрать нужный файл и нажать кнопку "Открыть" или "Отмена").
Что-то типа:
Код: plaintext
1.
2.
fileToOpen = Application _
    .GetOpenFilename("Text Files (*.xls), *.xls")
Кстати, тут есть подводные камни? Может проверку какую-нибудь надо делать?
Office 2003 SP2 Rus
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37191936
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

Неоходимо сделать ссылку на библиотеку Tools -> References -> Microsoft Scripting Runtime.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Function GetNewFileName() As String

    Dim fso As New FileSystemObject
    Dim fName As String
    Dim num As String
    Dim fileToOpen As Variant
    Dim newName As String
    
    fileToOpen = Application.GetOpenFilename("Text Files (*.xls), *.xls")
    fName = fso.GetBaseName(fileToOpen)
    num = Right(fName, Len(fName) - InStr( 1 , fName, "-", VbCompareMethod.vbTextCompare))
    
    newName = "Набор-" & num

End Function

...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37191976
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YudzhinAlex37,
Неоходимо сделать ссылку на библиотеку Tools -> References -> Microsoft Scripting Runtime.

Это в настройках редактора VBA? Включил. Но и без него работало почему то...

YudzhinAlex37,

Неоходимо сделать ссылку на библиотеку Tools -> References -> Microsoft Scripting Runtime.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Function GetNewFileName() As String

    Dim fso As New FileSystemObject
    Dim fName As String
    Dim num As String
    Dim fileToOpen As Variant
    Dim newName As String
    
    fileToOpen = Application.GetOpenFilename("Text Files (*.xls), *.xls")
    fName = fso.GetBaseName(fileToOpen)
    num = Right(fName, Len(fName) - InStr( 1 , fName, "-", VbCompareMethod.vbTextCompare))
    
    newName = "Набор-" & num

End Function

...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37191985
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yudzhin
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function GetNewFileName() As String

    Dim fso As New FileSystemObject
    Dim fName As String
    Dim num As String
    Dim fileToOpen As Variant
    Dim newName As String
    
    fileToOpen = Application.GetOpenFilename("Text Files (*.xls), *.xls")
    fName = fso.GetBaseName(fileToOpen)
    num = Right(fName, Len(fName) - InStr( 1 , fName, "-", VbCompareMethod.vbTextCompare))
    
    newName = "Набор-" & num

End Function

Спасибо, сейчас попробую по вашей методике сделать...
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192011
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

Поправочка. Функция ничего не возвращала и исправил "Набор" на "Итог" :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Function GetNewFileName() As String

    Dim fso As New FileSystemObject
    Dim fName As String
    Dim num As String
    Dim fileToOpen As Variant
    Dim newName As String
    
    fileToOpen = Application.GetOpenFilename("Text Files (*.xls), *.xls")
    fName = fso.GetBaseName(fileToOpen)
    num = Right(fName, Len(fName) - InStr( 1 , fName, "-", VbCompareMethod.vbTextCompare))
    
    newName = "Итог-" & num
    
    GetNewFileName = newName

End Function
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192012
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

я бы сделал список файлов в папке, заполняемый с помощью функции Dir и оттуда бы уже доставал файлы для обработки. Плюс хотя бы в том, что меньше действий для юзера и не нарушается логика интерфейса посторонними окнами.
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192072
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YudzhinAlex37,

Поправочка. Функция ничего не возвращала и исправил "Набор" на "Итог" :)

Код: plaintext
1.
2.
3.
4.
5.
6.
...
    newName = "Итог-" & num
    
    GetNewFileName = newName

End Function

Да, путаницу с Набором и Итогом я заметил, спасибо.
А с кодом я поломал бы голову! ;) Не сразу бы понял, в чем дело. Ещё раз спасибо.
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192098
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mds_worldAlex37,

я бы сделал список файлов в папке, заполняемый с помощью функции Dir и оттуда бы уже доставал файлы для обработки. Плюс хотя бы в том, что меньше действий для юзера и не нарушается логика интерфейса посторонними окнами.
Тоже интересная мысль. Да и для пользователей все свелось бы к нажатию один раз на кнопку.
А как это реализовать?
В цикле просмотреть указанную в коде папку на наличие файлов "Набор-*.xls" (не совсем понимаю, как это осуществить).
Номера - в массив.
Обработать данные - сохранив в массив.
Создать итоговые файлы, закачать в них данные из массива, добавить к имени номер - сохранить.

Или проще создать список файлов Набор-*.xls (не знаю, как это делается).
Потом поочередно их открывать и обрабатывать. Так лучше будет - меньше памяти используется.

Можно пример простой посмотреть как это сделать?
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192104
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

1. Указываешь папку, где лежать "наборные" файлы
2. Прога ищет папку "NewFiles" в папку с твоими "наборными" файлами. Если есть, то удаляет её с потрохами.
3. Создаёт папку "NewFiles".
4. Ищет файлы с расширениями xls, xlsx, xlsm, xlsb.
5. Если находит, выдирает номер "набора" и создаёт полный путь к новому файлу в папке "NewFiles".
6. Копирует "наборный" файл в "итоговый" файл в папке "NewFiles".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Option Explicit

Sub CreateNewFiles()

    Dim fd As FileDialog
    Dim fso As New FileSystemObject
    Dim aFile As File, sExtension As String
    Dim sFullPath As String
    Dim rootFolder As String
    Dim subFolder As String
    Dim num As String
    Dim newName As String
    
    ' Select target folder.
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = False Then Exit Sub
    rootFolder = fd.SelectedItems( 1 )
    
    ' Create new sub-folder.
    subFolder = rootFolder & "\NewFiles"
    If fso.FolderExists(subFolder) Then fso.DeleteFolder subFolder, True
    fso.CreateFolder subFolder
    
    For Each aFile In fso.GetFolder(rootFolder).Files
        sExtension = fso.GetExtensionName(aFile.Name)
        If sExtension Like "xls*" Then
            ' Copy this file to sub-folder.
            fName = fso.GetBaseName(aFile.Name)
            num = Right(fName, Len(fName) - InStr( 1 , fName, "-", VbCompareMethod.vbTextCompare))
            newName = "Итог-" & num
            sFullPath = subFolder & "\" & newName & "." & sExtension
            aFile.Copy sFullPath
        End If
    Next
    
End Sub
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192123
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

Пропустил объявление переменной fName:
Код: plaintext
1.
Dim fName As String
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192143
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

Скриншот.
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192152
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YudzhinAlex37,

1. Указываешь папку, где лежать "наборные" файлы
2. Прога ищет папку "NewFiles" в папку с твоими "наборными" файлами. Если есть, то удаляет её с потрохами.
3. Создаёт папку "NewFiles".
4. Ищет файлы с расширениями xls, xlsx, xlsm, xlsb.
5. Если находит, выдирает номер "набора" и создаёт полный путь к новому файлу в папке "NewFiles".
6. Копирует "наборный" файл в "итоговый" файл в папке "NewFiles".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Option Explicit

Sub CreateNewFiles()

    Dim fd As FileDialog
    Dim fso As New FileSystemObject
    Dim aFile As File, sExtension As String
    Dim sFullPath As String
    Dim rootFolder As String
    Dim subFolder As String
    Dim num As String
    Dim newName As String
    
    ' Select target folder.
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = False Then Exit Sub
    rootFolder = fd.SelectedItems( 1 )
    
    ' Create new sub-folder.
    subFolder = rootFolder & "\NewFiles"
    If fso.FolderExists(subFolder) Then fso.DeleteFolder subFolder, True
    fso.CreateFolder subFolder
    
    For Each aFile In fso.GetFolder(rootFolder).Files
        sExtension = fso.GetExtensionName(aFile.Name)
        If sExtension Like "xls*" Then
            ' Copy this file to sub-folder.
            fName = fso.GetBaseName(aFile.Name)
            num = Right(fName, Len(fName) - InStr( 1 , fName, "-", VbCompareMethod.vbTextCompare))
            newName = "Итог-" & num
            sFullPath = subFolder & "\" & newName & "." & sExtension
            aFile.Copy sFullPath
        End If
    Next
    
End Sub

В целом понятно. А маску к имени можно применить? Дело в том, что я задачу упростил, а реально в папке с программой ещё несколько xls-файлов лежат, которые являются "общими" для всех "наборных" файлов - часть инфы берется и из них и прописывается в "итоговые" файлы. Маска бы помогла отсеять ненужное. Или действительно, прийдется создавать вложенную папку.
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192178
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YudzhinAlex37,

Пропустил объявление переменной fName:
Код: plaintext
1.
Dim fName As String

Да, выдало ошибку - прописал, все ОК!
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192191
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YudzhinAlex37,
.......
For Each aFile In fso.GetFolder(rootFolder).Files
sExtension = fso.GetExtensionName(aFile.Name)
If sExtension Like "xls*" Then
........
End Sub

Срабатывание If sExtension Like "xls* оказывается зависит от регистра! Кто бы подумал! :)
Случайно один из файлов был с расширением XLS (прописными буквами). Его-то и пропустил цикл.
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192208
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

"прийдется создавать вложенную папку."
Вложенная папка создаётся для того, чтобы там собирались "итоговые файлы". Ты можешь создать любую папку (переменная subFolder ).

Сначала прога находит чисто экселевские файлы. После того, как она нашла экселевский файл, мы вытягиваем из него название без расширения (переменная fName ). Вот тут ты и можешь применить маску - оператор Like . Посмотри по документации поподробней.
Вот пример (переменная sMask ):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Option Explicit

Sub CreateNewFiles()

    Dim fd As FileDialog
    Dim fso As New FileSystemObject
    Dim aFile As File, sExtension As String
    Dim sFullPath As String, fName As String
    Dim sMask As String
    Dim rootFolder As String
    Dim subFolder As String
    Dim num As String
    Dim newName As String
    
    ' Select target folder.
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = False Then Exit Sub
    rootFolder = fd.SelectedItems( 1 )
    
    ' Define mask.
    sMask = "Набор-*"
    
    ' Create new sub-folder.
    subFolder = rootFolder & "\NewFiles"
    If fso.FolderExists(subFolder) Then fso.DeleteFolder subFolder, True
    fso.CreateFolder subFolder
    
    For Each aFile In fso.GetFolder(rootFolder).Files
        sExtension = fso.GetExtensionName(aFile.Name)
        If sExtension Like "xls*" Then
            ' Copy this file to sub-folder.
            fName = fso.GetBaseName(aFile.Name)
            If fName Like sMask Then
                num = Right(fName, Len(fName) - InStr( 1 , fName, "-", VbCompareMethod.vbTextCompare))
                newName = "Итог-" & num
                sFullPath = subFolder & "\" & newName & "." & sExtension
                aFile.Copy sFullPath
            End If
        End If
    Next
    
End Sub
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192214
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yudzhin,

Чтобы не пропускались "XLS", в самом верху модуля под Option Explicit напиши Option Compare Text
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192274
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YudzhinYudzhin,

Чтобы не пропускались "XLS", в самом верху модуля под Option Explicit напиши Option Compare Text
Понял! Помогло.

Огромное спасибо всем за неоценимую помощь!!! Узнал для себя много интересного и нового.
Сегодня же начну переделывать программу. А то меня уже на работе запинали... ;)
Но не прощаюсь! :)
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192324
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

Пиши! На всякий случай вот тебе ссылка на справку формате chm о FileSystemObject. С тех пора, как я узнал про Windows Scripting, больше никогда не пользовался стандартными средствами VBA. :)

Windows Script 5.6 Documentation
http://www.microsoft.com/downloads/en/details.aspx?familyid=01592c48-207d-4be1-8a76-1c4099d7bbb9&displaylang=en

Windows Script 5.7 for Windows XP
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=47809025-d896-482e-a0d6-524e7e844d81&displaylang=en
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192394
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yudzhin,

Спасибо. А я по старинке, на Турбо Паскале компилирую ЕХЕ-ник с нужной начинкой. Но возможностей и знаний все равно не хватает!
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192479
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

С FileSystemObject приятно работать. Тем более что если в VBE сделать ссылку на библиотке Microsoft Scripting Runtime, то заработает AutoComplete - будут выпадать все свойства и методы. Удобно! Но можно и late binding с помощью CreateObject, но тогда AutoComplete'a не будет.
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192557
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

Кстати, небольшое уточнение. Если у тебя есть ещё символ "-" в названии файла, то лучше воспользовацо функцией InStrRev. Она ищет не слева направо, а справа налево. Учитывая, что номера стоят в конце названия файла, и перед этим номер стоит символ "-", то безопаснее будет использовать InStrRev. Итак, итоговая процедура.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
Option Explicit
Option Compare Text

Sub CreateNewFiles()

    Dim fd          As FileDialog
    Dim fso         As New FileSystemObject
    Dim aFile       As File
    Dim sMask       As String
    Dim sNumber     As String
    Dim sNewName    As String
    Dim sFileName   As String
    Dim sFullPath   As String
    Dim sExtension  As String
    Dim sSubFolder  As String
    Dim sRootFolder As String
    
    
    
    ' Select target folder.
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    
    ' If user selected nothing, exit sub.
    If fd.Show = False Then Exit Sub
    
    ' Get root folder path.
    sRootFolder = fd.SelectedItems( 1 )
    
    ' Define mask.
    sMask = "Набор-*"
    
    ' Create new sub-folder. It will be located in the root folder.
    ' Create path to sub-folder.
    sSubFolder = sRootFolder & "\NewFiles"
    
    ' If sub-folder already exists, delete it.
    If fso.FolderExists(sSubFolder) Then fso.DeleteFolder sSubFolder, True
    
    ' Create sub-folder.
    fso.CreateFolder sSubFolder
    
    
    ' Process each and every file.
    For Each aFile In fso.GetFolder(sRootFolder).Files
        
        ' Get file extension.
        sExtension = fso.GetExtensionName(aFile.Name)
        
        ' If it's an Excel file, process it further.
        If sExtension Like "xls*" Then
            
            ' Get file name without extension.
            sFileName = fso.GetBaseName(aFile.Name)
            
            ' Check whether file name matches mask.
            If sFileName Like sMask Then
                
                ' Get number.
                ' InStrRev searches for "-" from right to left.
                sNumber = Right$(sFileName, Len(sFileName) - InStrRev(sFileName, "-"))
                
                ' Create new Excel file name.
                sNewName = "Итог-" & sNumber
                                
                ' Create full path to new Excel file.
                sFullPath = sSubFolder & "\" & sNewName & "." & sExtension
                
                ' Copy original file to sub-folder.
                aFile.Copy sFullPath
                
            End If
            
        End If
        
    Next
    
End Sub
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192628
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yudzhin,

Работать с FileSystemObject интересно. Посмотрел справочник - свойств много! Надо будет взять на вооружение.
Жалко, что не поддерживает доступ к двоичным файлам. Иногда бывает надо.
А как легко текст набивать, типа:
Код: plaintext
1.
2.
3.
4.
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("This is a test.")
a.Close
А с функцией InStrRev я знаком, использовал. Но таких тонкостей не знал... И код короче с ней.

Ещё раз огромное спасибо!
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37192799
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

А зачем ты используешь CreateObject? Нет, ну если ты будешь писать на VBScript, то я согласен. В VBScript - это единственный способ, а вот в VBA ты потеряешь AutoComplete! Лучше сделай в VBE ссылку на библиотеку - и увидишь все свойства и методы. Так проще, чем рыться в справке, да и можешь ошибицо при наборе. :)
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37193938
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yudzhin,

А как применять fso.OpenTextFile?
Пытался открыть файл так:
Код: plaintext
fso.OpenTextFile(aFile.Name)
или
Код: plaintext
fso.OpenTextFile(aFile)
ничего не получилось - ни ошибки, ни сообщения...
Использование
Код: plaintext
Workbooks.Open aFile
сработало как всегда.
Хотелось бы понять , что что же все-таки делает fso.OpenTextFile, как и когда его применять?
...
Рейтинг: 0 / 0
Диалог- "Открыть файл"
    #37194050
Yudzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex37,

Читаем текстовый файл и выводим содержимое на экран.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub ReadTextFile()

    Dim msg As String
    Dim sFile As String
    Dim txtStream As TextStream
    Dim fso As New FileSystemObject
    
    sFile = "c:\shut down.txt"
    
    Set txtStream = fso.OpenTextFile(sFile, ForReading)
    
    msg = txtStream.ReadAll
    
    MsgBox msg

End Sub
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Диалог- "Открыть файл"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]