Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Однократный выбор файла для манипуляций - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Однократный выбор файла для манипуляций (Макросы/Sub)
Однократный выбор файла для манипуляций
ant6729 Дата: Суббота, 18.11.2017, 17:50 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Добрый вечер, не могу понять, как выбрать файл для дальнейшей обработки

У меня есть два кода(два первых в примере ниже), которые выдают путь к файлу, а мне нужно только имя файла, без пути

[vba]
Код
Sub AttachFile_test()    ' пример использования
    Filename$ = GetFilePath()
    If Filename$ = "" Then Exit Sub
    MsgBox "Выбран файл: " & Filename$
End Sub

Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:\", _
                     Optional ByVal FilterDescription As String = "Файлы счетов", _
                     Optional ByVal FilterExtention As String = "*.*") As String
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title:
        .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1)
        
        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
    End With
End Function
Sub fffff()

Dim wb2 As Workbook
Dim myPath2 As String
Dim myFile2 As String
Dim myExtension2 As String

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

myPath2 = "G:\"
myExtension2 = "Вася.xlsx"
myFile2 = Dir(myPath2 & myExtension2)
  
Set wb = Workbooks.Open(Filename:=myPath2 & myFile2)

Dim wb_ As Workbook
Dim lc As Variant

'fp_ = "G:\34\"
'fn_ = Dir(fp_ & "*.xls*", vbNormal)

On Error Resume Next

Set wb_ = GetObject(Filename$) ' сюда хочу передать название имени выбранного файла, чтобы в условный файл  Вася.xlxx из него заполнились данные
        With wb_.Sheets("Лист1")

ronumber = .Cells(1, 3).Value
Cells(1, 1).Value = ronumber
a = Split(Cells(20, 3).Value)
Cells(20, 3).Value = a(0) + " " + Left$(a(1), 1) + ". " + Left$(a(2), 1) + "."
        End With

        wb_.Close False
        lr_ = Empty
        fn_ = Dir()

wb.Close SaveChanges:=True
myFile2 = Dir

Application.DisplayAlerts = False
Application.DisplayAlerts = True
ActiveWorkbook.Close SaveChanges:=True
    
End Sub
[/vba]

Это мне нужно, чтобы в sub fffff я смог проставить значение из этого выбранного файла.

Кто - нибудь может мне помочь?
Ибо массово из прописанной или руками указанной папки через Do While Loop я могу использовать все файлы, а вот однократное целеуказание на работу с одним из этих файлов как сделать, не могу понять...
Подскажите, пожалуйста, как это сделать.


Сообщение отредактировал ant6729 - Суббота, 18.11.2017, 18:44
 
Ответить
СообщениеДобрый вечер, не могу понять, как выбрать файл для дальнейшей обработки

У меня есть два кода(два первых в примере ниже), которые выдают путь к файлу, а мне нужно только имя файла, без пути

[vba]
Код
Sub AttachFile_test()    ' пример использования
    Filename$ = GetFilePath()
    If Filename$ = "" Then Exit Sub
    MsgBox "Выбран файл: " & Filename$
End Sub

Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:\", _
                     Optional ByVal FilterDescription As String = "Файлы счетов", _
                     Optional ByVal FilterExtention As String = "*.*") As String
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title:
        .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1)
        
        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
    End With
End Function
Sub fffff()

Dim wb2 As Workbook
Dim myPath2 As String
Dim myFile2 As String
Dim myExtension2 As String

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

myPath2 = "G:\"
myExtension2 = "Вася.xlsx"
myFile2 = Dir(myPath2 & myExtension2)
  
Set wb = Workbooks.Open(Filename:=myPath2 & myFile2)

Dim wb_ As Workbook
Dim lc As Variant

'fp_ = "G:\34\"
'fn_ = Dir(fp_ & "*.xls*", vbNormal)

On Error Resume Next

Set wb_ = GetObject(Filename$) ' сюда хочу передать название имени выбранного файла, чтобы в условный файл  Вася.xlxx из него заполнились данные
        With wb_.Sheets("Лист1")

ronumber = .Cells(1, 3).Value
Cells(1, 1).Value = ronumber
a = Split(Cells(20, 3).Value)
Cells(20, 3).Value = a(0) + " " + Left$(a(1), 1) + ". " + Left$(a(2), 1) + "."
        End With

        wb_.Close False
        lr_ = Empty
        fn_ = Dir()

wb.Close SaveChanges:=True
myFile2 = Dir

Application.DisplayAlerts = False
Application.DisplayAlerts = True
ActiveWorkbook.Close SaveChanges:=True
    
End Sub
[/vba]

Это мне нужно, чтобы в sub fffff я смог проставить значение из этого выбранного файла.

Кто - нибудь может мне помочь?
Ибо массово из прописанной или руками указанной папки через Do While Loop я могу использовать все файлы, а вот однократное целеуказание на работу с одним из этих файлов как сделать, не могу понять...
Подскажите, пожалуйста, как это сделать.

Автор - ant6729
Дата добавления - 18.11.2017 в 17:50
ant6729 Дата: Суббота, 18.11.2017, 21:41 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Все... когда что-то не идет... надо просто на 5 часов пойти погулять...

Счастью моему нету предела, вот решение

[vba]
Код
Sub fffff()

Dim wb2 As Workbook
Dim myPath2 As String
Dim myFile2 As String
Dim myExtension2 As String

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

Dim GetFilePath As String
On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title:
        .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Sub
        GetFilePath = .SelectedItems(1)
        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
    End With

    Filename$ = GetFilePath
    
If Filename$ = "" Then Exit Sub
MsgBox "Выбран файл: " & Filename$

myPath2 = "G:\"
myExtension2 = "Название файла, в который парсим.xlsx"
myFile2 = Dir(myPath2 & myExtension2)
  
Set wb = Workbooks.Open(Filename:=myPath2 & myFile2)

Dim wb_ As Workbook
Dim lc As Variant

fn_ = Dir(Filename$, vbNormal)
On Error Resume Next
Set wb_ = GetObject(fn_)
On Error Resume Next

With wb_.Sheets("Название листа книги, с которого парсим")

ronumber = .Cells(1, 3).Value
Cells(1, 1).Value = ronumber
a = Split(Cells(20, 3).Value)
Cells(20, 3).Value = a(0) + " " + Left$(a(1), 1) + ". " + Left$(a(2), 1) + "."
        End With

        wb_.Close False
        lr_ = Empty
        fn_ = Dir()

wb.Close SaveChanges:=True
myFile2 = Dir

Application.DisplayAlerts = False
Application.DisplayAlerts = True
ActiveWorkbook.Close SaveChanges:=True
    
End Sub
[/vba]
 
Ответить
СообщениеВсе... когда что-то не идет... надо просто на 5 часов пойти погулять...

Счастью моему нету предела, вот решение

[vba]
Код
Sub fffff()

Dim wb2 As Workbook
Dim myPath2 As String
Dim myFile2 As String
Dim myExtension2 As String

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

Dim GetFilePath As String
On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title:
        .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Sub
        GetFilePath = .SelectedItems(1)
        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
    End With

    Filename$ = GetFilePath
    
If Filename$ = "" Then Exit Sub
MsgBox "Выбран файл: " & Filename$

myPath2 = "G:\"
myExtension2 = "Название файла, в который парсим.xlsx"
myFile2 = Dir(myPath2 & myExtension2)
  
Set wb = Workbooks.Open(Filename:=myPath2 & myFile2)

Dim wb_ As Workbook
Dim lc As Variant

fn_ = Dir(Filename$, vbNormal)
On Error Resume Next
Set wb_ = GetObject(fn_)
On Error Resume Next

With wb_.Sheets("Название листа книги, с которого парсим")

ronumber = .Cells(1, 3).Value
Cells(1, 1).Value = ronumber
a = Split(Cells(20, 3).Value)
Cells(20, 3).Value = a(0) + " " + Left$(a(1), 1) + ". " + Left$(a(2), 1) + "."
        End With

        wb_.Close False
        lr_ = Empty
        fn_ = Dir()

wb.Close SaveChanges:=True
myFile2 = Dir

Application.DisplayAlerts = False
Application.DisplayAlerts = True
ActiveWorkbook.Close SaveChanges:=True
    
End Sub
[/vba]

Автор - ant6729
Дата добавления - 18.11.2017 в 21:41
Wasilich Дата: Суббота, 18.11.2017, 22:01 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Просмотрел и предыдущие посты и этот и чё то, сложно понять что надо то. Набросал наугад короткий пример, а тут уже и собственное решение появилось. Ну для примера и дальнейшего развития сброшу.
[vba]
Код
Sub WWWWW()
  Dim iFail$, iPath$, iRash$, X
  Application.ScreenUpdating = 0
  iPath = "D:\000\" 'Указываем свой путь
  'iPath = ThisWorkbook.Path & "\" 'если рабочий файл в этой же папке
  iFail = "111" 'имя файла. можно взять из ячейки - iFail = range("A1")
  iRash = ".xls"
  Application.Workbooks.Open Filename:=iPath & iFail & iRash 'открываем найденный файл
  With Workbooks(iFail).Sheets(1)
        'берем данные из него всеми известными способами
        X = Range("B1") ' данные
  End With
  Workbooks(iFail).Close 'закрываем найденный файл
  Range("B1") = X 'пишем данные в рабочий файл
  Application.ScreenUpdating = 1
End Sub
[/vba]
 
Ответить
СообщениеПросмотрел и предыдущие посты и этот и чё то, сложно понять что надо то. Набросал наугад короткий пример, а тут уже и собственное решение появилось. Ну для примера и дальнейшего развития сброшу.
[vba]
Код
Sub WWWWW()
  Dim iFail$, iPath$, iRash$, X
  Application.ScreenUpdating = 0
  iPath = "D:\000\" 'Указываем свой путь
  'iPath = ThisWorkbook.Path & "\" 'если рабочий файл в этой же папке
  iFail = "111" 'имя файла. можно взять из ячейки - iFail = range("A1")
  iRash = ".xls"
  Application.Workbooks.Open Filename:=iPath & iFail & iRash 'открываем найденный файл
  With Workbooks(iFail).Sheets(1)
        'берем данные из него всеми известными способами
        X = Range("B1") ' данные
  End With
  Workbooks(iFail).Close 'закрываем найденный файл
  Range("B1") = X 'пишем данные в рабочий файл
  Application.ScreenUpdating = 1
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 18.11.2017 в 22:01
ant6729 Дата: Суббота, 18.11.2017, 22:30 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Ну, да... у Вас поменьше кода...конечно

Но в этой конкретной ситуации я хотел "динамичный" код, на случай, если запрашиваемый файл предварительно будет каждый день формироваться в разные папки, то и адрес к нему придется постоянно прописывать в коде... а не хотелось бы... поэтому я подумал, что лучше с выбором

Равно, как и имя файла будет требоваться всегда разное и его тоже придется прописывать.

У меня остался последний рубикон: как из папки с многими файлами выбрать n ое количество и данные из них по очереди записывать в один и тот же файл.
То есть с длинными очередями я решил(когда сразу все файлы из директории пишутся по очереди в файл) Помогли тут, спасибо.
Решил короткими очередями, когда один из многих
Сейчас хочу понять, как несколько из многих. Но это потом.
Спасибо за Ваш вариант!
 
Ответить
СообщениеНу, да... у Вас поменьше кода...конечно

Но в этой конкретной ситуации я хотел "динамичный" код, на случай, если запрашиваемый файл предварительно будет каждый день формироваться в разные папки, то и адрес к нему придется постоянно прописывать в коде... а не хотелось бы... поэтому я подумал, что лучше с выбором

Равно, как и имя файла будет требоваться всегда разное и его тоже придется прописывать.

У меня остался последний рубикон: как из папки с многими файлами выбрать n ое количество и данные из них по очереди записывать в один и тот же файл.
То есть с длинными очередями я решил(когда сразу все файлы из директории пишутся по очереди в файл) Помогли тут, спасибо.
Решил короткими очередями, когда один из многих
Сейчас хочу понять, как несколько из многих. Но это потом.
Спасибо за Ваш вариант!

Автор - ant6729
Дата добавления - 18.11.2017 в 22:30
Hugo Дата: Суббота, 18.11.2017, 23:02 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Как-то Вы всё усложняете... Вот совершенно Вам не нужно имя файла (отдельно), если Вы его выбирает в диалоге, чтоб потом открыть.
А чтоб "как несколько из многих" - совсем чуть осталось доработать:
[vba]
Код
Sub AttachFile_test()    ' пример использования
    Filenames = GetFilePath()
End Sub

Private Sub test(s)
    MsgBox "Выбран файл: " & s
End Sub

Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:\", _
                     Optional ByVal FilterDescription As String = "Файлы счетов", _
                     Optional ByVal FilterExtention As String = "*.*") As String
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title:
        .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        .AllowMultiSelect = True

        If .Show <> -1 Then Exit Function
        For Each vrtSelectedItem In .SelectedItems
            Call test(vrtSelectedItem)
        Next vrtSelectedItem

        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
    End With
End Function
[/vba]

Выбирайте в диалоге сколько нужно файлов (только сперва для теста пару тройку, не больше :) )


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеКак-то Вы всё усложняете... Вот совершенно Вам не нужно имя файла (отдельно), если Вы его выбирает в диалоге, чтоб потом открыть.
А чтоб "как несколько из многих" - совсем чуть осталось доработать:
[vba]
Код
Sub AttachFile_test()    ' пример использования
    Filenames = GetFilePath()
End Sub

Private Sub test(s)
    MsgBox "Выбран файл: " & s
End Sub

Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:\", _
                     Optional ByVal FilterDescription As String = "Файлы счетов", _
                     Optional ByVal FilterExtention As String = "*.*") As String
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title:
        .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        .AllowMultiSelect = True

        If .Show <> -1 Then Exit Function
        For Each vrtSelectedItem In .SelectedItems
            Call test(vrtSelectedItem)
        Next vrtSelectedItem

        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
    End With
End Function
[/vba]

Выбирайте в диалоге сколько нужно файлов (только сперва для теста пару тройку, не больше :) )

Автор - Hugo
Дата добавления - 18.11.2017 в 23:02
Wasilich Дата: Суббота, 18.11.2017, 23:32 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
я хотел "динамичный" код
Ну, я думаю, еще один из вариантов - создать на листе список папок, если известно в какие из них будут сброшены запрашиваемые файлы. Выбрав папку из списка, создать макросом список файлов этой папки. Отметить нужный файл для обработки (или несколько файлов), тискаем кнопку и вуаля. Если такой вариант заинтересует, набросаю пример. :)


Сообщение отредактировал Wasilich - Суббота, 18.11.2017, 23:34
 
Ответить
Сообщение
я хотел "динамичный" код
Ну, я думаю, еще один из вариантов - создать на листе список папок, если известно в какие из них будут сброшены запрашиваемые файлы. Выбрав папку из списка, создать макросом список файлов этой папки. Отметить нужный файл для обработки (или несколько файлов), тискаем кнопку и вуаля. Если такой вариант заинтересует, набросаю пример. :)

Автор - Wasilich
Дата добавления - 18.11.2017 в 23:32
ant6729 Дата: Воскресенье, 19.11.2017, 06:40 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Wasilich
создать на листе список папок,

Не, ну, тогда их надо туда парсить... это тоже отдельный код выводить список папок на лист из директории
Но, конечно, интересно было бы посмотреть методов клика
Hugo
Только этот кусочек
[vba]
Код

        If .Show <> -1 Then Exit Function
        For Each vrtSelectedItem In .SelectedItems
            Call test(vrtSelectedItem)
        Next vrtSelectedItem

        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
[/vba]

Вот так:
[vba]
Код
        If .Show <> -1 Then Exit Function
        For Each vrtSelectedItem In .SelectedItems

        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$

            Call test(vrtSelectedItem)
        Next vrtSelectedItem
[/vba]

В противном случае не парсится.

Всем спасибо!


Сообщение отредактировал ant6729 - Воскресенье, 19.11.2017, 11:32
 
Ответить
СообщениеWasilich
создать на листе список папок,

Не, ну, тогда их надо туда парсить... это тоже отдельный код выводить список папок на лист из директории
Но, конечно, интересно было бы посмотреть методов клика
Hugo
Только этот кусочек
[vba]
Код

        If .Show <> -1 Then Exit Function
        For Each vrtSelectedItem In .SelectedItems
            Call test(vrtSelectedItem)
        Next vrtSelectedItem

        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
[/vba]

Вот так:
[vba]
Код
        If .Show <> -1 Then Exit Function
        For Each vrtSelectedItem In .SelectedItems

        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$

            Call test(vrtSelectedItem)
        Next vrtSelectedItem
[/vba]

В противном случае не парсится.

Всем спасибо!

Автор - ant6729
Дата добавления - 19.11.2017 в 06:40
Wasilich Дата: Воскресенье, 19.11.2017, 11:28 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
если запрашиваемый файл предварительно будет каждый день формироваться в разные папки,

отдельный код выводить список папок на лист из директории

Вот не понятно мне: - Файлы формируются каждый день в разные папки.
А разные папки, тоже, что ли, формируются каждый день новые?
А как же вы определяете, какой/какие файлы в какой папке надо обработать?
Я надеялся что папки постоянны. В таком случае их список можно создать вручную.
Что то типа так. Пример для развития.
К сообщению приложен файл: ant6729.xls (48.5 Kb)
 
Ответить
Сообщение
если запрашиваемый файл предварительно будет каждый день формироваться в разные папки,

отдельный код выводить список папок на лист из директории

Вот не понятно мне: - Файлы формируются каждый день в разные папки.
А разные папки, тоже, что ли, формируются каждый день новые?
А как же вы определяете, какой/какие файлы в какой папке надо обработать?
Я надеялся что папки постоянны. В таком случае их список можно создать вручную.
Что то типа так. Пример для развития.

Автор - Wasilich
Дата добавления - 19.11.2017 в 11:28
ant6729 Дата: Воскресенье, 19.11.2017, 11:36 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Wasilich
Красиво, конечно, это уже на интерфейс программы похоже!
Возьму на вооружение, спасибо!
 
Ответить
СообщениеWasilich
Красиво, конечно, это уже на интерфейс программы похоже!
Возьму на вооружение, спасибо!

Автор - ant6729
Дата добавления - 19.11.2017 в 11:36
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Однократный выбор файла для манипуляций (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!