Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 76 След.
Не работают формулы в файле эксель (пустые ячейки), На одном компьютере работает, а на другом нет.
 
а лучше без подставить 9/10 33/10 вместо 0,9 и 3,3
Не работают формулы в файле эксель (пустые ячейки), На одном компьютере работает, а на другом нет.
 
а вы раскройте скрытые столбцы - появятся и ошибки
откройте скрытые столбцы и перетяните формулу из D2 как посоветовал Павел - и будет работать везде
Код
=ПОДСТАВИТЬ(ЕСЛИ(A2="ЩУВ AL 0,3х0,3х1,5м б/у*";0,9;
ЕСЛИ(A2="ЩУН AL 0,5х0,5х3,3м б/у*";3,3;
ЕСЛИ(A2="ЩУН AL 0,5х0,5х3,0м б/у*";3;
ЕСЛИОШИБКА(ПСТР(A2;1+ПОИСК("(";A2);
ПОИСК("м2";A2)-ПОИСК("(";A2)-1);0))));
",";ПСТР(1%;2;1))
Изменено: Тимофеев - 10.02.2026 16:53:28
Не работают формулы в файле эксель (пустые ячейки), На одном компьютере работает, а на другом нет.
 
очень странно что настройки одинаковые у меня стоит запятая - меняю на точку улетаю в ошибки - других предположений больше нет
Не работают формулы в файле эксель (пустые ячейки), На одном компьютере работает, а на другом нет.
 
скрин 123 откуда с компьютера где формулы работают?
Изменено: Тимофеев - 10.02.2026 16:27:47
Не работают формулы в файле эксель (пустые ячейки), На одном компьютере работает, а на другом нет.
 
В D тоже формулы - и если системный разделитель точка то улетит в ошибку - вот и весь ответ о том что на одном работает на другом не работает
Изменено: Тимофеев - 10.02.2026 16:16:58
Не работают формулы в файле эксель (пустые ячейки), На одном компьютере работает, а на другом нет.
 
это если точка стоит то будет пусто
Не работают формулы в файле эксель (пустые ячейки), На одном компьютере работает, а на другом нет.
 
может у них системный разделитель точка?
как получить список файлов в архиве (в тихом режиме)?, vba
 
заставлять дать рабочий вариант его нужно долга - попытка 2
Скрытый текст
как получить список файлов в архиве (в тихом режиме)?, vba
 
от ИИ совет
Скрытый текст
Создание генератора чисел
 
Код
=LET(
    totalCards;122;
    rowsPerCard;3;
    colsPerRow;5;
    minNum;1;
    maxNum;20;
    totalNumbers;maxNum-minNum+1;
    numbersPerCard;rowsPerCard*colsPerRow;
    cardsMatrix;MAKEARRAY(totalCards;numbersPerCard;LAMBDA(cardIdx;numIdx;
        LET(
            shuffled;СОРТПО(ПОСЛЕД(totalNumbers);СЛМАССИВ(totalNumbers));
            ИНДЕКС(shuffled;numIdx)+minNum-1
        )
    ));
    result;MAKEARRAY(totalCards*rowsPerCard;colsPerRow;LAMBDA(r;c;
        LET(
            cardIndex;ЦЕЛОЕ((r-1)/rowsPerCard)+1;
            rowInCard;ОСТАТ(r-1;rowsPerCard)+1;
            startIdx;(rowInCard-1)*colsPerRow+1;
            valueIdx;startIdx+c-1;
            ИНДЕКС(cardsMatrix;cardIndex;valueIdx)
        )
    ));
    result
)
Фильтр по объеденённым ячейкам
 
  1. Выделите объединенные ячейки

  2. Нажмите "Разъединить ячейки" на вкладке "Главная" → "Выравнивание"

  3. Заполните пустые ячейки значениями сверху:

    • Выделите весь диапазон (например, A1:A100)

    • Нажмите F5 → "Выделить" → "Пустые ячейки" → OK

    • Не нажимая мышью, введите = и нажмите стрелку вверх (↑)

    • Нажмите Ctrl+Enter одновременно

Удаление дубликатов текста с переносом (alt+enter) внутри ячейки, Удаление дубликатов текста с переносом (alt+enter) внутри ячейки
 
'делим текст в ячейке по пробелам
      arWords = Split(WorksheetFunction.Trim(cell.Value), Chr(10))
Выбор значения из массива по критериям
 
Код
=ИНДЕКС(C2:H13; ПОИСКПОЗ(B16 & B17; B2:B13 & A2:A13; 0); ПОИСКПОЗ(B20; C1:H1; 0)+1)
добавьте единичку к предыдущей формуле дату же нашли на 1 столбец правее сместите
Изменено: Тимофеев - 15.01.2026 13:39:15
Рандомайзер с условием
 
Код
=ИНДЕКС(ФИЛЬТР(Таблица4[Название];Таблица4[Статус]=H2);
СЛУЧМЕЖДУ(1;СЧЁТЗ(ФИЛЬТР(Таблица4[Название];Таблица4[Статус]=H2))))
Изменено: Тимофеев - 12.01.2026 16:37:36
Сильно тормозит небольшой по объему файл
 
проблема наверное в файле у меня тоже он тупит хотя формулы простейщие и не так много
Ошибка при запуске макроса для замены нескольких значений в столбце.
 
For i = 2 To 15
или
For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
Изменено: Тимофеев - 29.12.2025 16:05:07
Перейти к файлу через функцию ГИПЕРССЫЛКА, Почему excel2016 и excel2024 по разному обрабатывает нажатие на функцию ГИПЕРССЫЛКА?
 
Создайте текстовый файл и вставьте туда это:
Код
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Security\Trusted Locations\Location999]
"Path"="E:\Docs"
"Description"="Auto-fix for hyperlinks"
"AllowSubfolders"=dword:00000001
Назовите этот файл FixHyperlinks.reg
Запустите этот файл.
Папка E:\Docs станет доверенной и гиперссылка будет работать как раньше.
Изменено: Тимофеев - 23.12.2025 17:46:01
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
Уважаемый Senaki! Нейронки дают направление - не всегда несут чушь - исправляя у себя же ошибки по чуть-чуть учатся одновременно (возможно). От них можно добиться приемлемого результата - но на это можно потратить конечно много времени.
Я устал читать по ВПР или суммесли на форуме.
Давайте что-то обсуждать и дописывать с помощью нейронки что-то интересное - заодно и больше примеров откуда взять правильный вариант у нейронки будет в процессе диалога.
В 45 посте про Autocad например недоработанная версия - интересна не всем - но может быть полезна кому-то.
Давайте например доработаем связку со Смета.ру через Excel - тоже навряд ли всем нужно, но на всякий случай болванка начала
Примеру и куски кода могут быть использованы в качестве примера кому-то в создании чего-то своего.
В большинстве своём гуру кодинга свои наработки не показывают - им проще про впр ответить или ещё что-нибудь монотонное, повседневное, форумное, повторяющееся по пару раз в неделю с заменой яблоки на груши.
А вообще все меньше вопросов и меньше людей становится на форуме из наблюдений
Изменено: Тимофеев - 23.12.2025 09:42:59
Ошибка при создании скриншота
 
nilske, был бы исходный файл - проверил - нет - просто набор буков
Ошибка при создании скриншота
 
Код
' Модуль 1: Основной макрос для создания скриншота
Option Explicit

Sub СделатьКачественныйСкриншот()
    Dim wsУказатели As Worksheet, wsДанные As Worksheet
    Dim начЯчейка As String, конЯчейка As String
    Dim rngДиапазон As Range
    Dim filePath As String
    Dim startTime As Double, oldZoom As Integer
    Dim oldActiveSheet As Worksheet
    
    startTime = Timer
    
    ' Сохраняем текущее состояние приложения
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    
    On Error GoTo ErrorHandler
    
    ' Инициализация
    Set wsУказатели = ThisWorkbook.Sheets("Указатели")
    Set wsДанные = ThisWorkbook.Sheets("Данные")
    
    ' Сохраняем текущий активный лист
    Set oldActiveSheet = ActiveSheet
    
    ' Получаем диапазон
    начЯчейка = Trim(wsУказатели.Range("A2").Value)
    конЯчейка = Trim(wsУказатели.Range("B2").Value)
    
    If начЯчейка = "" Or конЯчейка = "" Then
        MsgBox "Не указаны диапазоны в ячейках A2 и B2!", vbExclamation
        Exit Sub
    End If
    
    ' Проверяем, что диапазон существует
    On Error Resume Next
    Set rngДиапазон = wsДанные.Range(начЯчейка & ":" & конЯчейка)
    If rngДиапазон Is Nothing Then
        MsgBox "Некорректный диапазон: " & начЯчейка & ":" & конЯчейка, vbExclamation
        Exit Sub
    End If
    On Error GoTo ErrorHandler
    
    ' Активируем лист Данные и сохраняем текущий масштаб ОКНА
    wsДанные.Activate
    oldZoom = ActiveWindow.Zoom ' Теперь правильно!
    
    ' Устанавливаем масштаб 100% для точности
    ActiveWindow.Zoom = 100
    
    ' Путь для сохранения
    filePath = ThisWorkbook.Path & "\Скриншот_" & Format(Now, "yyyy-mm-dd_hh-mm-ss") & ".png"
    
    ' Создаем скриншот с максимальным качеством
    Call ЭкспортСМаксимальнымКачеством(rngДиапазон, filePath)
    
    ' Восстанавливаем масштаб окна
    ActiveWindow.Zoom = oldZoom
    
    ' Возвращаемся на исходный лист
    oldActiveSheet.Activate
    
CleanUp:
    ' Восстанавливаем состояние приложения
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    
    ' Проверяем результат
    If ФайлСоздан(filePath) Then
        MsgBox "Скриншот создан успешно!" & vbCrLf & _
               "Размер файла: " & Format(FileLen(filePath) / 1024, "0") & " KB" & vbCrLf & _
               "Время выполнения: " & Format(Timer - startTime, "0.0") & " сек." & vbCrLf & _
               "Файл: " & filePath, vbInformation
        ' Открываем папку с файлом
        Shell "explorer /select,""" & filePath & """", vbNormalFocus
    Else
        MsgBox "Не удалось создать скриншот!", vbExclamation
    End If
    Exit Sub
    
ErrorHandler:
    MsgBox "Ошибка №" & Err.Number & ": " & Err.Description & vbCrLf & _
           "Процесс прерван.", vbCritical
    Resume CleanUp
End Sub

' Функция для создания скриншота с высоким качеством
Function ЭкспортСМаксимальнымКачеством(rng As Range, filePath As String) As Boolean
    Dim wsTemp As Worksheet
    Dim pic As Picture
    Dim chartObj As ChartObject
    Dim scaleFactor As Integer
    
    On Error GoTo ErrorHandler
    
    ' Удаляем временный лист, если существует
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets("TempForScreenshot").Delete
    Application.DisplayAlerts = True
    On Error GoTo ErrorHandler
    
    ' Создаем временный лист
    Set wsTemp = ThisWorkbook.Sheets.Add
    wsTemp.Name = "TempForScreenshot"
    wsTemp.Visible = xlSheetVeryHidden
    
    ' Копируем ширину столбцов
    Dim srcCol As Long, dstCol As Long
    For srcCol = rng.Column To rng.Column + rng.Columns.Count - 1
        dstCol = srcCol - rng.Column + 1
        wsTemp.Columns(dstCol).ColumnWidth = rng.Worksheet.Columns(srcCol).ColumnWidth
    Next srcCol
    
    ' Копируем высоту строк
    Dim srcRow As Long, dstRow As Long
    For srcRow = rng.Row To rng.Row + rng.Rows.Count - 1
        dstRow = srcRow - rng.Row + 1
        wsTemp.Rows(dstRow).RowHeight = rng.Worksheet.Rows(srcRow).RowHeight
    Next srcRow
    
    ' Копируем диапазон как рисунок (xlScreen важно для примечаний!)
    rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    
    ' Вставляем на временный лист
    wsTemp.Range("A1").PasteSpecial
    
    ' Находим вставленную картинку
    Set pic = wsTemp.Pictures(wsTemp.Pictures.Count)
    
    ' Определяем коэффициент масштабирования для качества
    ' Для больших диапазонов используем меньший масштаб, но не менее 100%
    scaleFactor = 150 ' 150% обычно дает хороший баланс качества/размера
    
    ' Для очень больших диапазонов уменьшаем масштаб
    If pic.Width > 5000 Or pic.Height > 5000 Then
        scaleFactor = 100 ' 100% для очень больших изображений
    End If
    
    ' Создаем диаграмму для экспорта
    Set chartObj = wsTemp.ChartObjects.Add( _
        Left:=0, _
        Top:=0, _
        Width:=pic.Width, _
        Height:=pic.Height)
    
    With chartObj.Chart
        ' Настраиваем диаграмму как контейнер
        .ChartArea.Format.Fill.Visible = msoFalse
        .PlotArea.Format.Fill.Visible = msoFalse
        .ChartArea.Border.LineStyle = 0
        .PlotArea.Border.LineStyle = 0
        
        ' Копируем картинку в диаграмму
        pic.Copy
        .Paste
        
        ' Экспортируем с выбранным масштабом
        .Export filePath, "PNG", scaleFactor
    End With
    
    ' Очистка
    chartObj.Delete
    pic.Delete
    Application.DisplayAlerts = False
    wsTemp.Delete
    Application.DisplayAlerts = True
    
    ЭкспортСМаксимальнымКачеством = True
    Exit Function
    
ErrorHandler:
    ' Очистка при ошибке
    On Error Resume Next
    If Not wsTemp Is Nothing Then
        Application.DisplayAlerts = False
        wsTemp.Delete
        Application.DisplayAlerts = True
    End If
    ЭкспортСМаксимальнымКачеством = False
End Function

' Функция проверки существования файла
Function ФайлСоздан(filePath As String) As Boolean
    On Error Resume Next
    ФайлСоздан = (Dir(filePath) <> "")
    On Error GoTo 0
End Function

' Модуль 2: Альтернативный метод через PDF (если PNG не работает)
Sub СоздатьPDFСкриншот()
    Dim wsУказатели As Worksheet, wsДанные As Worksheet
    Dim начЯчейка As String, конЯчейка As String
    Dim rngДиапазон As Range
    Dim pdfPath As String
    Dim oldPrintArea As String
    
    On Error GoTo ErrorHandler
    
    Set wsУказатели = ThisWorkbook.Sheets("Указатели")
    Set wsДанные = ThisWorkbook.Sheets("Данные")
    
    ' Получаем диапазон
    начЯчейка = Trim(wsУказатели.Range("A2").Value)
    конЯчейка = Trim(wsУказатели.Range("B2").Value)
    
    Set rngДиапазон = wsДанные.Range(начЯчейка & ":" & конЯчейка)
    
    ' Сохраняем старую область печати
    oldPrintArea = wsДанные.PageSetup.PrintArea
    
    ' Настраиваем страницу для печати
    With wsДанные.PageSetup
        .PrintArea = rngДиапазон.Address
        .Zoom = False
        .FitToPagesWide = 1 ' Все колонки на одну страницу в ширину
        .FitToPagesTall = 9999 ' Все строки на столько страниц, сколько нужно
        .Orientation = xlLandscape ' Альбомная ориентация
        .LeftMargin = Application.InchesToPoints(0.25)
        .RightMargin = Application.InchesToPoints(0.25)
        .TopMargin = Application.InchesToPoints(0.25)
        .BottomMargin = Application.InchesToPoints(0.25)
    End With
    
    ' Путь для сохранения PDF
    pdfPath = ThisWorkbook.Path & "\Скриншот_" & Format(Now, "yyyy-mm-dd_hh-mm-ss") & ".pdf"
    
    ' Экспортируем в PDF
    rngДиапазон.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=pdfPath, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
    ' Восстанавливаем область печати
    wsДанные.PageSetup.PrintArea = oldPrintArea
    
    ' Показываем результат
    If ФайлСоздан(pdfPath) Then
        MsgBox "PDF создан успешно!" & vbCrLf & _
               "Файл: " & pdfPath & vbCrLf & vbCrLf & _
               "PDF имеет отличное качество. Для конвертации в PNG используйте:" & vbCrLf & _
               "1. Онлайн-конвертер (например, smallpdf.com)" & vbCrLf & _
               "2. Adobe Acrobat" & vbCrLf & _
               "3. Другие программы для конвертации PDF в PNG", vbInformation
        
        ' Открываем папку с файлом
        Shell "explorer /select,""" & pdfPath & """", vbNormalFocus
    End If
    
    Exit Sub
    
ErrorHandler:
    MsgBox "Ошибка при создании PDF: " & Err.Description, vbCritical
End Sub

' Модуль 3: Быстрый тестовый скриншот для диапазона B2:HG247
Sub ТестовыйСкриншотB2_HG247()
    Dim wsДанные As Worksheet
    Dim rngДиапазон As Range
    Dim filePath As String
    
    Set wsДанные = ThisWorkbook.Sheets("Данные")
    
    ' Указываем ваш диапазон напрямую
    Set rngДиапазон = wsДанные.Range("B2:HG247")
    
    ' Путь для сохранения
    filePath = ThisWorkbook.Path & "\Тестовый_скриншот_" & Format(Now, "hh-mm-ss") & ".png"
    
    ' Создаем скриншот
    If ЭкспортСМаксимальнымКачеством(rngДиапазон, filePath) Then
        MsgBox "Тестовый скриншот создан!" & vbCrLf & "Файл: " & filePath, vbInformation
        Shell "explorer /select,""" & filePath & """", vbNormalFocus
    Else
        MsgBox "Не удалось создать тестовый скриншот", vbExclamation
    End If
End Sub

' Модуль 4: Упрощенная версия (без сохранения масштаба)
Sub ПростойСкриншот()
    Dim wsУказатели As Worksheet, wsДанные As Worksheet
    Dim начЯчейка As String, конЯчейка As String
    Dim rngДиапазон As Range
    Dim wsTemp As Worksheet
    Dim pic As Picture
    Dim ch As ChartObject
    Dim filePath As String
    
    Application.ScreenUpdating = False
    
    ' Инициализация
    Set wsУказатели = ThisWorkbook.Sheets("Указатели")
    Set wsДанные = ThisWorkbook.Sheets("Данные")
    
    ' Получаем диапазон
    начЯчейка = Trim(wsУказатели.Range("A2").Value)
    конЯчейка = Trim(wsУказатели.Range("B2").Value)
    
    If начЯчейка = "" Or конЯчейка = "" Then
        MsgBox "Не указаны диапазоны!", vbExclamation
        Exit Sub
    End If
    
    Set rngДиапазон = wsДанные.Range(начЯчейка & ":" & конЯчейка)
    
    ' Путь для сохранения
    filePath = ThisWorkbook.Path & "\Скриншот_простой_" & Format(Now, "yyyy-mm-dd_hh-mm-ss") & ".png"
    
    ' Создаем временный лист
    Set wsTemp = ThisWorkbook.Worksheets.Add
    
    ' Копируем размеры ячеек
    Dim i As Long
    For i = 1 To rngДиапазон.Columns.Count
        wsTemp.Columns(i).ColumnWidth = rngДиапазон.Columns(i).ColumnWidth
    Next i
    
    For i = 1 To rngДиапазон.Rows.Count
        wsTemp.Rows(i).RowHeight = rngДиапазон.Rows(i).RowHeight
    Next i
    
    ' Копируем как рисунок
    rngДиапазон.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    wsTemp.Range("A1").PasteSpecial
    
    ' Находим картинку
    Set pic = wsTemp.Pictures(wsTemp.Pictures.Count)
    
    ' Создаем диаграмму для экспорта
    Set ch = wsTemp.ChartObjects.Add(0, 0, pic.Width, pic.Height)
    
    With ch.Chart
        .ChartArea.Format.Fill.Visible = msoFalse
        .PlotArea.Format.Fill.Visible = msoFalse
        
        ' Копируем картинку в диаграмму
        pic.Copy
        .Paste
        
        ' Экспортируем с увеличенным масштабом для качества
        .Export filePath, "PNG", 150 ' 150% масштаб
    End With
    
    ' Очистка
    ch.Delete
    Application.DisplayAlerts = False
    wsTemp.Delete
    Application.DisplayAlerts = True
    
    Application.ScreenUpdating = True
    
    ' Результат
    If Dir(filePath) <> "" Then
        MsgBox "Скриншот создан: " & filePath, vbInformation
        Shell "explorer /select,""" & filePath & """", vbNormalFocus
    Else
        MsgBox "Ошибка при создании скриншота", vbExclamation
    End If
End Sub
Ошибка при создании скриншота
 
Код
Sub СделатьКачественныйСкриншот()
    Dim wsУказатели As Worksheet, wsДанные As Worksheet
    Dim начЯчейка As String, конЯчейка As String
    Dim rngДиапазон As Range
    Dim chartObj As ChartObject
    Dim filePath As String
    Dim startTime As Double, oldZoom As Integer
    
    startTime = Timer
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    
    On Error GoTo ErrorHandler
    
    ' Инициализация
    Set wsУказатели = ThisWorkbook.Sheets("Указатели")
    Set wsДанные = ThisWorkbook.Sheets("Данные")
    
    ' Получаем диапазон
    начЯчейка = Trim(wsУказатели.Range("A2").Value)
    конЯчейка = Trim(wsУказатели.Range("B2").Value)
    
    If начЯчейка = "" Or конЯчейка = "" Then
        MsgBox "Не указаны диапазоны в ячейках A2 и B2!", vbExclamation
        Exit Sub
    End If
    
    Set rngДиапазон = wsДанные.Range(начЯчейка & ":" & конЯчейка)
    
    ' Сохраняем текущий масштаб и увеличиваем для лучшего качества
    oldZoom = wsДанные.Zoom
    wsДанные.Zoom = 100 ' Устанавливаем 100% для точных размеров
    
    ' Путь для сохранения
    filePath = ThisWorkbook.Path & "\Скриншот_" & Format(Now, "yyyy-mm-dd_hh-mm-ss") & ".png"
    
    ' Метод 1: Прямой экспорт через диаграмму (лучшее качество)
    Call ЭкспортСМаксимальнымКачеством(rngДиапазон, filePath)
    
    ' Метод 2 (альтернативный, если первый не работает)
    ' If Not ФайлСоздан(filePath) Then
    '     Call ЭкспортЧерезShape(rngДиапазон, filePath)
    ' End If
    
    ' Восстанавливаем масштаб
    wsДанные.Zoom = oldZoom
    
CleanUp:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    
    ' Проверяем результат
    If ФайлСоздан(filePath) Then
        MsgBox "Скриншот создан!" & vbCrLf & _
               "Размер: " & FileLen(filePath) \ 1024 & " KB" & vbCrLf & _
               "Время: " & Format(Timer - startTime, "0.0") & " сек." & vbCrLf & _
               "Файл: " & filePath, vbInformation
        Shell "explorer /select,""" & filePath & """", vbNormalFocus
    Else
        MsgBox "Не удалось создать скриншот!", vbExclamation
    End If
    Exit Sub
    
ErrorHandler:
    MsgBox "Ошибка: " & Err.Description, vbCritical
    Resume CleanUp
End Sub

Function ЭкспортСМаксимальнымКачеством(rng As Range, filePath As String)
    ' Метод с использованием Windows API для максимального качества
    Dim wsTemp As Worksheet
    Dim ch As Chart
    Dim pic As Picture
    Dim scaleFactor As Integer
    Dim maxDimension As Long
    
    ' Удаляем временный лист, если существует
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets("TempForExport").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0
    
    ' Создаем временный лист
    Set wsTemp = ThisWorkbook.Sheets.Add
    wsTemp.Name = "TempForExport"
    wsTemp.Visible = xlSheetVeryHidden
    
    ' Копируем ширину столбцов и высоту строк
    Dim i As Long
    For i = 1 To rng.Columns.Count
        wsTemp.Columns(i).ColumnWidth = rng.Columns(i).ColumnWidth
    Next i
    
    For i = 1 To rng.Rows.Count
        wsTemp.Rows(i).RowHeight = rng.Rows(i).RowHeight
    Next i
    
    ' Копируем диапазон КАК РИСУНОК С ЭКРАНА (это важно для примечаний!)
    rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    
    ' Вставляем на временный лист
    wsTemp.Range("A1").Select
    wsTemp.Paste
    
    ' Находим вставленную картинку
    On Error Resume Next
    Set pic = wsTemp.Pictures(wsTemp.Pictures.Count)
    On Error GoTo 0
    
    If Not pic Is Nothing Then
        ' Создаем диаграмму точно по размеру картинки
        Set ch = wsTemp.ChartObjects.Add( _
            Left:=0, _
            Top:=0, _
            Width:=pic.Width, _
            Height:=pic.Height).Chart
        
        With ch
            ' Настраиваем диаграмму как контейнер для картинки
            .ChartArea.Format.Fill.Visible = msoFalse
            .PlotArea.Format.Fill.Visible = msoFalse
            .ChartArea.Border.LineStyle = 0
            .PlotArea.Border.LineStyle = 0
            
            ' Устанавливаем размеры области построения
            .PlotArea.Left = 0
            .PlotArea.Top = 0
            .PlotArea.Width = pic.Width
            .PlotArea.Height = pic.Height
            
            ' Копируем картинку и вставляем в диаграмму
            pic.Copy
            .Paste
            
            ' ВАЖНО: Экспортируем с увеличенным масштабом для качества
            ' Масштаб 200% = вдвое больше DPI
            scaleFactor = 200 ' 200% для качества
            
            ' Проверяем максимальный размер (Excel имеет ограничения)
            maxDimension = Application.Max(pic.Width, pic.Height) * scaleFactor / 100
            
            If maxDimension > 10000 Then ' Если слишком большой
                scaleFactor = 10000 * 100 / Application.Max(pic.Width, pic.Height)
                If scaleFactor < 100 Then scaleFactor = 100
            End If
            
            ' Экспортируем с увеличенным масштабом
            .Export filePath, "PNG", scaleFactor
            
            ' Удаляем диаграмму
            .Parent.Delete
        End With
        
        ' Удаляем картинку
        pic.Delete
    End If
    
    ' Удаляем временный лист
    Application.DisplayAlerts = False
    wsTemp.Delete
    Application.DisplayAlerts = True
    
    Set wsTemp = Nothing
End Function

Function ЭкспортЧерезShape(rng As Range, filePath As String)
    ' Альтернативный метод через Shape (иногда лучше качество)
    Dim wsTemp As Worksheet
    Dim shp As Shape
    Dim chartObj As ChartObject
    
    ' Создаем временный лист
    Set wsTemp = ThisWorkbook.Sheets.Add
    wsTemp.Name = "TempShape"
    wsTemp.Visible = xlSheetVeryHidden
    
    ' Копируем размеры
    Dim i As Long
    For i = 1 To rng.Columns.Count
        wsTemp.Columns(i).ColumnWidth = rng.Columns(i).ColumnWidth
    Next i
    
    For i = 1 To rng.Rows.Count
        wsTemp.Rows(i).RowHeight = rng.Rows(i).RowHeight
    Next i
    
    ' Копируем как рисунок
    rng.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
    
    ' Вставляем как Shape
    wsTemp.Paste
    Set shp = wsTemp.Shapes(wsTemp.Shapes.Count)
    
    ' Создаем диаграмму по размеру Shape
    Set chartObj = wsTemp.ChartObjects.Add( _
        Left:=shp.Left, _
        Top:=shp.Top, _
        Width:=shp.Width, _
        Height:=shp.Height)
    
    With chartObj.Chart
        .ChartArea.Format.Fill.Visible = msoFalse
        .PlotArea.Format.Fill.Visible = msoFalse
        
        ' Копируем Shape в диаграмму
        shp.Copy
        .Paste
        
        ' Экспортируем с высоким качеством
        .Export filePath, "PNG", 300 ' 300% для супер качества
        
        ' Удаляем диаграмму
        .Parent.Delete
    End With
    
    ' Удаляем Shape
    shp.Delete
    
    ' Удаляем временный лист
    Application.DisplayAlerts = False
    wsTemp.Delete
    Application.DisplayAlerts = True
End Function

Function ФайлСоздан(filePath As String) As Boolean
    ' Проверяем, создан ли файл
    On Error Resume Next
    ФайлСоздан = (Dir(filePath) <> "")
    On Error GoTo 0
End Function

' Альтернатива: использование Print to PDF и конвертация (максимальное качество)
Sub СкриншотЧерезPDF()
    Dim wsУказатели As Worksheet, wsДанные As Worksheet
    Dim начЯчейка As String, конЯчейка As String
    Dim rngДиапазон As Range
    Dim pdfPath As String
    Dim oldPrintArea As String
    
    Set wsУказатели = ThisWorkbook.Sheets("Указатели")
    Set wsДанные = ThisWorkbook.Sheets("Данные")
    
    начЯчейка = Trim(wsУказатели.Range("A2").Value)
    конЯчейка = Trim(wsУказатели.Range("B2").Value)
    
    Set rngДиапазон = wsДанные.Range(начЯчейка & ":" & конЯчейка)
    
    ' Сохраняем старую область печати
    oldPrintArea = wsДанные.PageSetup.PrintArea
    
    ' Устанавливаем новую область печати
    wsДанные.PageSetup.PrintArea = rngДиапазон.Address
    
    ' Настраиваем страницу
    With wsДанные.PageSetup
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 9999 ' Все строки на одной странице
        .Orientation = xlLandscape ' Альбомная ориентация
        .LeftMargin = Application.InchesToPoints(0.25)
        .RightMargin = Application.InchesToPoints(0.25)
        .TopMargin = Application.InchesToPoints(0.25)
        .BottomMargin = Application.InchesToPoints(0.25)
    End With
    
    ' Сохраняем как PDF (максимальное качество)
    pdfPath = ThisWorkbook.Path & "\Скриншот_" & Format(Now, "yyyy-mm-dd_hh-mm-ss") & ".pdf"
    
    rngДиапазон.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=pdfPath, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
    
    ' Восстанавливаем область печати
    wsДанные.PageSetup.PrintArea = oldPrintArea
    
    MsgBox "PDF создан: " & pdfPath & vbCrLf & _
           "PDF имеет векторное качество. Для PNG конвертируйте онлайн.", vbInformation
End Sub
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
Пик эволюции VBA кода достигнут, хотя просил улучшить небольшой макрос поиск по выпадающим спискам
Скрытый текст
Изменено: Тимофеев - 22.12.2025 10:16:45
Поиск минимального и максимального значения в потоке данных
 
говорят что может и да
Скрытый текст
Изменено: Тимофеев - 19.12.2025 12:32:56
Поздравительные видео с НГ, в таблицах
 
.
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
Попросил его написать без комментариев остальное без изменений
Скрытый текст
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
МатросНаЗебре, сейчас докину ответ. Попросил его написать без коментариев остальное без изменений - чтоб можно было просто скопировать и вставить - позже скину
Скрытый текст
Изменено: Тимофеев - 12.12.2025 15:54:31
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
ИИ даёт направление и это уже большая помощь - куда это направление тебя в итоге выведет сразу не видно - но очень интересно всё равно
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
Да ИИ много неточностей даёт - куча раз приходиться переспрашивать - но определенно польза есть.
Вот например сейчас его заставляю двустороннюю связь с автокад настроить - кое-что сделано кое-что не получается
Можете посмотреть если интересно
Прозрачность не меняет, и не выгружает атрибуты и параметры дин блоков пока и соответсвенно не меняет их из эксель
Изменено: Тимофеев - 12.12.2025 15:11:21
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
Все верно ) внимательный testuser - так и есть. Если человеку это может помочь - почему не скинуть.
Ну скинул 5 ответов - потому что сейчас его плотно тестирую просто и смотрю результаты по своим запросам - а эти просто попутно попались по ходу движения
Вы же не стали разбираться в куча модулей и тонны кода - просто попросили скинуть и пошли дальше
Изменено: Тимофеев - 12.12.2025 15:01:18
Замедление работы макросов в фоновом режиме на ноутбучном железе
 
и ускорение ощутимо в итоге?
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 76 След.
Наверх