Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 135 След.
Изменить имя VBA с VBAProject на EmptyProject
 
Игорь, спасибо за уточнения. В структуре файла шаблона XLT, XLTX, XLTM имя проекта сохраняется, но при загрузке в Excel это имя действительно игнорируется. Очевидно, это такая особенность шаблонов Excel.
Изменено: ZVI - 12 Мар 2019 17:09:58
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Изменить имя VBA с VBAProject на EmptyProject
 
В VBE -Tools - VBAProject Properties... - на вкладке 'General' записать имя проекта в поле 'Project Name' - OK
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Почему 1*1=36526?
 
Правый клик на A1 - Формат ячейки - (Все форматы) - 1
И если активировать A1, то в поле формулы fx видно число 36526. Или на A1 нажать F2
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Альтернатива стандартной VBA функции Replace
 
Добрый день, многие увлекались соревнованием с Replace с помощью Mid$() :)
Но, например, этот тест  не пройдет:
Код
Sub Test()
  Debug.Print aReplace("123123", "12", "x"), Replace("123123", "12", "x")
  Debug.Print aReplace("123123", "1", "xx"), Replace("123123", "1", "xx")
End Sub

И и у штатной функции Replace есть еще параметры: Start и Count
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Убрать текст в скобках
 
Можно ещё добавить в конце функции 2 строчки:
Код
    pReg.Pattern = "[.] "
    getShortest = pReg.Replace(getShortest, ".")

Останется еще точку в конце текста убрать ;)
Изменено: ZVI - 8 Мар 2019 23:41:15
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Макрос "почистить глобально ZVI" (почему увеличился размер файла многократно)
 
Спасибо за полученный от автора темы файл, а Михаилу - за уточнение ссылки на него.
Исправил код в 2-х строчках. Файл ужался с 6382 МБ до 771 614 Байта, т.е. уменьшился примерно в 8 раз.
Внутри XLSM файла (по сути это ZIP-архив) размер элемента Sheet1.xml был 85 MБ, а стал 3196 КБ, т.е. уменьшился примерно в 26 раз.
Код
Sub MrExcelDiet()
' ZVI:2009-08-08 Active workbook excess formatting clearing
' Idea & original code of Just_Jon: http://www.mrexcel.com/forum/showthread.php?t=120831
' First attempt of modification: http://www.mrexcel.com/forum/showthread.php?t=339144
' Bugs tracking:
' 1. Range("A1") fixed to .Range("A1")
' 2. Exchanging:
'   .EntireRow.RowHeight to ws.StandardHeight
'   .EntireColumn.ColumnWidth to ws.StandardWidth
' Revised:2010-06-16
' 3.(ZVI:2010-06-16) Code for StandardHeight corrected. Comments shapes are skipped
'   https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&TID=73659&MID=617994#message617994
' 4.(ZVI:2019-03-08) Deleting of entire columns & rows is used instead of Clear method
'   https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&TID=114886&MID=954470#message954470
  Const Title = "MrExcelDiet: Just_Jon's code modified by ZVI"
  Const vbTab2 = vbTab & vbTab
  Dim Wb As Workbook, Ws As Worksheet, LastCell As Range, Shp As Shape, Chrt As Chart
  Dim Prot As Boolean, ProtWarning As Boolean, DoCharts As Boolean
  Dim LastRow&, LastCol&, ShpLastRow&, ShpLastCol&, i&, ac, x
  Dim SheetsTotal&, SheetsCleared&, ChartsCleared&, SheetsProtSkipped&
  Dim FileNameTmp$, BytesInFileOld&, BytesInFileNew&
  ' Choose the clearing mode
  Set Wb = ActiveWorkbook
  x = MsgBox("Excess formatting clearing of " & Wb.Name & vbCr & vbCr & _
             "Apply full clearing?" & vbCr & vbCr & _
             "Yes" & vbTab & "- Full mode, including chart's AutoScaleFont=False" & vbCr & _
             "No" & vbTab & "- Medium mode, without charts processing" & vbCr & _
             "Cancel" & vbTab & "- Stop clearing & Exit", _
             vbInformation + vbYesNoCancel, _
             Title)
  If x = vbCancel Then Exit Sub
  DoCharts = (x = vbYes)
  ' Freeze on
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    ac = .Calculation: .Calculation = xlCalculationManual
  End With
  ' Calculate the old file size
  On Error Resume Next
  With CreateObject("Scripting.FileSystemObject")
    FileNameTmp = .GetSpecialFolder(2) & "\" & Wb.Name & ".TMP"
    Wb.SaveCopyAs FileNameTmp
    BytesInFileOld = .GetFile(FileNameTmp).Size
  End With
  ' Processing in each worksheet
  ProtWarning = True
  SheetsTotal = Wb.Sheets.Count
  For Each Ws In Wb.Worksheets
    With Ws
      ' Clear an error flag
      Err.Clear
      ' Inform on processing status
      Application.StatusBar = "MrExcelDiet: processing of sheet " & Ws.Name
      ' Check protection
      Prot = .ProtectContents
      ' Try to unprotect without password
      If Prot Then .Unprotect ""
      If (Err <> 0 Or .ProtectContents) And ProtWarning Then
        SheetsProtSkipped = SheetsProtSkipped + 1
        x = MsgBox(Ws.Name & " is protected and will be skipped" & vbCr & vbCr & _
                   "Skip warning on protected sheets?" & vbCr & vbCr & _
                   "Yes" & vbTab & "- Skip warning, clear sheets silently" & vbCr & _
                   "No" & vbTab & "- Warning on each protected sheets" & vbCr & _
                   "Cancel" & vbTab & "- Stop clearing & Exit", _
                   vbExclamation + vbYesNoCancel, _
                   Title)
        ProtWarning = (x = vbNo)
        If x = vbCancel Then GoTo exit_
      Else
        ' Count processed worksheets
        SheetsCleared = SheetsCleared + 1
        ' Determine the last used cell with a formula or value or comment in Ws
        Set LastCell = GetLastCell(Ws)
        ' Determine the last column and last row
        If Not LastCell Is Nothing Then
          LastCol = LastCell.Column
          LastRow = LastCell.Row
        End If
        ' Determine if any merged cells are beyond the last row
        For Each x In Range(.Cells(LastRow, 1), .Cells(LastRow, LastCol))
          If x.MergeCells Then
            With x.MergeArea
              LastRow = Max(LastRow, .Rows(.Rows.Count).Row)
            End With
          End If
        Next
        ' Determine if any merged cells are beyond the last column
        For Each x In Range(.Cells(1, LastCol), .Cells(LastRow, LastCol))
          If x.MergeCells Then
            With x.MergeArea
              LastCol = Max(LastCol, .Columns(.Columns.Count).Column)
            End With
          End If
        Next
        ' Determine if any shapes are beyond the last row and last column
        ShpLastCol = LastCol
        ShpLastRow = LastRow
        For Each Shp In .Shapes
          If Shp.Type <> msoComment Then  ' ZVI:2010-06-16
            ShpLastCol = Max(ShpLastCol, Shp.BottomRightCell.Column)
            ShpLastRow = Max(ShpLastRow, Shp.BottomRightCell.Row)
          End If
        Next
        ' Clear cells beyond the last column
        If LastCol < .Columns.Count Then
          With .Range(.Columns(LastCol + 1), .Columns(.Columns.Count))
            .EntireColumn.Delete ' rev4.
            If LastCol >= ShpLastCol Then
              ' Set StandardWidth to columns which are beyond the last col
              .EntireColumn.ColumnWidth = IIf(Ws.StandardWidth, Ws.StandardWidth, 8.43)  'Ws.StandardWidth
            End If
          End With
          If ShpLastCol < .Columns.Count Then
            ' Set StandardWidth to columns which are beyond the Shapes
            With .Range(.Columns(ShpLastCol + 1), .Columns(.Columns.Count))
              .EntireColumn.ColumnWidth = IIf(.StandardWidth, .StandardWidth, 8.43)  'Ws.StandardWidth
            End With
          End If
        End If
        ' Clear cells beyond the last row
        If LastRow < .Rows.Count Then
          With .Range(.Rows(LastRow + 1), .Rows(.Rows.Count))
            .EntireRow.Delete ' rev.4
            If LastRow >= ShpLastRow Then
              ' Set StandardWidth to rows which are beyond the last row
              .EntireRow.RowHeight = IIf(Ws.StandardHeight, Ws.StandardHeight, 12.75)
            End If
          End With
          If ShpLastRow < .Rows.Count Then
            ' Set StandardHeight to rows which are beyond the Shapes
            With .Range(.Rows(ShpLastRow + 1), .Rows(.Rows.Count))
              .EntireRow.RowHeight = IIf(.StandardHeight, .StandardHeight, 12.75)
            End With
          End If
        End If
        ' Reset last cell position of the sheet
        With .UsedRange: End With
        ' Protect the sheet if it was unprotected
        If Prot Then .Protect
      End If
      ' Apply setting to worksheet's charts: ChartArea.AutoScaleFont = False
      If DoCharts Then
        For i = 1 To .ChartObjects.Count
          Application.StatusBar = "MrExcelDiet: processing of chart " & .ChartObjects(i).Name
          .ChartObjects(i).Chart.ChartArea.AutoScaleFont = False
          ChartsCleared = ChartsCleared + 1
        Next
      End If
    End With
  Next
  ' Apply setting to workbook's charts: ChartArea.AutoScaleFont = False
  If DoCharts Then
    With Wb
      For i = 1 To .Charts.Count
        ' Clear an error flag
        Err.Clear
        ' Inform on processing status
        Application.StatusBar = "MrExcelDiet: processing of chart " & .Charts(i).Name
        ' Check chart sheet protection
        Prot = .Charts(i).ProtectContents
        ' Try to unprotect chart sheet without password
        If Prot Then .Charts(i).Unprotect ""
        If (Err <> 0 Or .Charts(i).ProtectContents) And ProtWarning Then
          SheetsProtSkipped = SheetsProtSkipped + 1
          x = MsgBox(Ws.Name & " is protected and will be skipped" & vbCr & vbCr & _
                     "Skip warning on protected sheets?" & vbCr & vbCr & _
                     "Yes" & vbTab & "- Skip warning, clear sheets silently" & vbCr & _
                     "No" & vbTab & "- Warning on each protected sheets" & vbCr & _
                     "Cancel" & vbTab & "- Stop clearing & Exit", _
                     vbExclamation + vbYesNoCancel, _
                     Title)
          ProtWarning = (x = vbNo)
          If x = vbCancel Then GoTo exit_
        Else
          ' Set AutoScaleFont = False for chart sheet
          .Charts(i).ChartArea.AutoScaleFont = False
          SheetsCleared = SheetsCleared + 1
          ChartsCleared = ChartsCleared + 1
          ' Protect the chart sheet if it was unprotected
          If Prot Then .Charts(i).Protect
        End If
      Next
    End With
  End If
exit_:
  ' Calculate the new file size
  Wb.SaveCopyAs FileNameTmp
  BytesInFileNew = CreateObject("Scripting.FileSystemObject").GetFile(FileNameTmp).Size
  Kill FileNameTmp
  ' Freeze off
  With Application
    .Calculation = ac
    .ScreenUpdating = True
    .EnableEvents = True
  End With
  ' Report on results
  Application.StatusBar = False
  x = MsgBox("Statistics of excess formatting clearing" & vbLf & vbLf & _
             "Workbook:" & vbTab & ActiveWorkbook.Name & "'" & vbLf & _
             "Sheets total:" & vbTab2 & SheetsTotal & vbLf & _
             "Sheets cleared:" & vbTab2 & SheetsCleared & vbLf & _
             "Protected sheets skipped: " & vbTab & SheetsProtSkipped & vbLf & _
             "Other sheets skipped:" & vbTab & SheetsTotal - SheetsCleared - SheetsProtSkipped & vbLf & _
             "Charts cleared:" & vbTab2 & ChartsCleared & vbLf & _
             "File size old:" & vbTab & Format(BytesInFileOld, "# ### ##0") & " Bytes" & vbLf & _
             "File size new:" & vbTab & Format(BytesInFileNew, "# ### ##0") & " Bytes" & vbLf & _
             vbLf & _
             "Save the cleared workbook to keep the changes?" & vbLf & _
             "Yes" & vbTab & "- Save & Exit" & vbLf & _
             "No" & vbTab & "- Exit without saving, cleared", _
             vbInformation + vbYesNo + IIf(BytesInFileNew < BytesInFileOld, vbDefaultButton1, vbDefaultButton2), _
             Title)
  If x = vbYes Then Wb.Save
End Sub
 
' ZVI:2009-02-02 Get last cell within values/formulas/comments of sheet Sh
' Auto-filtered & hidden rows/columns are also calculated without ShowAllData
' ActiveSheet is used if optional Sh is missing
' If VisibleOnly=True then only visible cells are searched
Function GetLastCell(Optional Sh As Worksheet, Optional VisibleOnly As Boolean) As Range
  Dim SpecCells(), Rng As Range, r&, c&, x, a
  SpecCells = Array(xlCellTypeConstants, xlCellTypeFormulas, xlCellTypeComments)
  On Error Resume Next
  If Sh Is Nothing Then Set Sh = ActiveSheet
  Set Rng = Sh.UsedRange
  If VisibleOnly Then Set Rng = Rng.SpecialCells(xlCellTypeVisible)
  For Each x In SpecCells
    For Each a In Rng.SpecialCells(x).Areas
      With a.Cells(a.Rows.Count, a.Columns.Count)
        c = Max(c, .Column)
        r = Max(r, .Row)
      End With
    Next
  Next
  If r * c <> 0 Then Set GetLastCell = Sh.Cells(r, c)
End Function
 
' Aux function: max value of arguments
Private Function Max(ParamArray Values())
  Dim x
  For Each x In Values
    If x > Max Then Max = x
  Next
End Function
Изменено: ZVI - 8 Мар 2019 20:17:47
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Макрос "почистить глобально ZVI" (почему увеличился размер файла многократно)
 
Цитата
Wild.Godlike написал: Кому интересно могу скинуть на почту
Добрый день, скиньте, пожалуйста, проблемный файл мне на почту (есть в моем профиле).
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Троян в макросе
 
Если в VBA коде есть фрагмент с .DeleteLines для удаления строк кода, то многие антивирусы этого не любят и ложно считают такой код вирусом.
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Как найти точку начала подъема кривой?, Как найти точку начала подъема кривой?
 
Цитата
БМВ написал: Практически каждый пример в темах содержит ссылку на тем
Добрый день, Михаил. Если речь о первой строчке комментария, то там: автор-дата-ссылка на тему. И ниже еще могут быть комментарии о ревизиях. Это упрощает мне поиск исходной темы, когда файл кочует по другим темам/архивам и т.п., либо присылается по почте с просьбой что-то поменять. И это конечно же не строка о копирайте (здесь же public domain), а просто стиль комментирования. Есть надстройки VBE для автоматической вставки шаблона комментариев подобного типа, например в MZTools пункт Add Procedure Header вставит такой комментарий:
'---------------------------------------------------------------------------------------
' Procedure : RaisePoint
' Author    : ZVI
' Date      : 26.02.2019
' Purpose   :
'---------------------------------------------------------------------------------------
'

Эти шаблоны можно там создавать под свой вкус.
Но я использую упрощенный вариант в одну строчку, который вставляю вручную.
Изменено: ZVI - 26 Фев 2019 23:43:29
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Как найти точку начала подъема кривой?, Как найти точку начала подъема кривой?
 
Вариант пользовательской функции RaisePoint(X;Y;[Divider=4]), вводимой в F2:H2 как формула массива по Ctrl-Shift-Enter.
Изменяя параметр Divider (значение ячейки H2) можно в некоторых пределах выбрать момент начала положительного ускорения Y. Значение Divider рекомендую выбирать в интервале от 2 до 10, по умолчанию это значение равно 4.
Изменено: ZVI - 26 Фев 2019 23:15:43
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Все верно. Все же надеюсь, что совместными усилиями помогли немного Лунтику, он тоже старался здесь как мог
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Цитата
БМВ написал: Тему Владимира все равно попортили
Михаил, я открывал тему и предложил вариант именно по названию темы "Альтернатива РАЗНДАТ обычными формулами"
Здесь же давно отошли от темы и пишут что хотят :) вместо того, чтобы создавать свои темы и обсуждать это там, как предписано правилами. Поэтому не соучаствую уже, как и Вы.
Изменено: ZVI - 13 Фев 2019 17:58:33
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Методики с датами обычно все какие-то кривоватые (стаж и выслуги и т.п.), да и в VBA даты обязаны были унаследовать ошибки истории
Изменено: ZVI - 12 Фев 2019 11:53:57
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Лунтик,  в приложенной таблице заполните, пожалуйста, столбцы C:D , а в E напишите комментарии по расчету.
Мы тогда либо разберемся в необходимом Вам алгоритме, либо поймем, что он противоречив.
Изменено: ZVI - 11 Фев 2019 19:00:24
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Лунтик, посчитайте по такой логике все остальные ячейки, где дата больше текущей, и приложите результат.
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
...Удалено...
Изменено: ZVI - 12 Фев 2019 14:30:33
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Посмотрите, так Вам нужно?
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Цитата
Лунтик написал: а должно быть 53 мес 9 дн
Покажите расчет, как получается 9
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Лунтик, Вы файл смотреть-то будете?
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Цитата
Лунтик написал: Покажите в файле, пожалуйста.
К сообщению #18 прикреплен файл
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Цитата
БМВ написал: но вопрос про 45 так и останется открытым
Михаил, да вроде учел же ж ))
Для C23: 28-11=17 дн  
Изменено: ZVI - 11 Фев 2019 15:26:19
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
=12*(ГОД(C24)-ГОД(СЕГОДНЯ()))+МЕСЯЦ(C24)-МЕСЯЦ(СЕГОДНЯ())-(ДЕНЬ(C24)<ДЕНЬ(СЕГОДНЯ()))&" мес "&ЕСЛИ(ДЕНЬ(C24)<ДЕНЬ(СЕГОДНЯ());ДЕНЬ(C24)+ДЕНЬ(КОНМЕСЯЦА(СЕГОДНЯ();0))-ДЕНЬ(СЕГОДНЯ());ДЕНЬ(C24)-ДЕНЬ(СЕГОДНЯ()))&" дн"

или немного покороче:
=12*(ГОД(C24)-ГОД(СЕГОДНЯ()))+МЕСЯЦ(C24)-МЕСЯЦ(СЕГОДНЯ())-(ДЕНЬ(C24)<ДЕНЬ(СЕГОДНЯ()))&" мес "&
ДЕНЬ(C24)-ДЕНЬ(СЕГОДНЯ())+ЕСЛИ(ДЕНЬ(C24)<ДЕНЬ(СЕГОДНЯ());ДЕНЬ(КОНМЕСЯЦА(СЕГОДНЯ();0)); )&" дн"
Изменено: ZVI - 11 Фев 2019 15:18:55
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
На всякий случай, когда-то уже приводил примеры ошибок функции РАЗНДАТ в теме Разница дат
Причем, у разных версий Office попадались свои ошибки.
У РАЗНДАТ странная логика, но её назначение было в совместимости в Lotus 1-2-3 со всеми ошибками, поэтому она и скрыта.
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Новый офис 2019, Excel 2019
 
Пингвины - надежные лошадки, используем на работе в железках.
А с Office 2019 хочется поиграться, но пока не до него.
Если кто уже установил себе, то отпишитесь, пожалуйста, какие там новые функции есть по сравнению с 2016-м.
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Не завершается процесс Excel.exe после выхода из приложения
 
Можно посоветовать отключить все надстройки, в том числе, COM-надстройки.
Если эффект пропадет, то потом поочередно повключать их обратно и отловить, на какой надстройке зависнет.
Изменено: ZVI - 7 Фев 2019 21:16:10
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Новый офис 2019, Excel 2019
 
Не одушевляйте Windows, она/они этого не любят :)
Изменено: ZVI - 7 Фев 2019 21:07:42
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Михаил, добрый вечер, я специально не вникал в нюансы Fuzzy Logic темы, а лишь изобразил прямой аналог РАЗНДАТ по результату, так как где-то там звучало, что в ОpenОffice нет такой функции. А сойдет или нет - мне не очень-то и важно  ;)
Изменено: ZVI - 7 Фев 2019 22:21:15
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
[ Закрыто] Альтернатива РАЗНДАТ обычными формулами
 
Видел кратко сегодня 2 темы Лунтика по замене скрытой функции РАЗНДАТ на обычные формулы.
Пока отвлекся, уже одну тему закрыли, а другую удалили.
Сильно не вникал в задачу иначе бы точно запутался ))
Но так как что-то уже было надергано из источника, то выложу здесь вариант для дат, больших текущей, аналогично использованию РАЗНДАТ с параметрами "m" и "md".  В столбце F - формулы с использованием РАЗНДАТ а в столбце G - обычными формулами.
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Некорректная работа надстройки XLAM
 
Еще в коде есть ссылки на отсутствующие процедуры/функции, например, shCopy.
А также много необъявленных переменных.
Чтобы найти подобные артефакты выберите в VBE - Debug - Compile VBAProject  
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Некорректная работа надстройки XLAM
 
Измените имя модуля с кодом Selection , например, на mSelection.
И избегайте имен модулей и функций, которые совпадают со встроенными именами VBA.
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 135 След.
Наверх