Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Просмотр сообщений

Сообщения - Дмитрий Щербаков(The_Prist)

#1
Цитата: Vladislav10 от Сегодня в 14:21:50Я бы понял, и не такое понимали
ну да, ну да :)
Тогда вопрос: а обязательно вставлять именно как мета-файл? В этом есть какой-то определенный смысл? Не пробовали вставлять как Shape, например? Вставляется не вся информация или это просто недопустимо?
#2
Цитата: Vladislav10 от 08.12.2025, 10:55:26При чём тут имитация ПКМ?
вот при чём:
Цитата: Vladislav10 от 05.12.2025, 16:38:09если нажать ПКМ и выбрать Изменение рисунка - становится видимым полностью и при конвертации в инлайн остаётся полным. Как это выполнить на VBA?
Вы бы сами поняли себя, если бы так поставили задачу? Описали кучу действий и только один вопрос: как это выполнить. Я и задал первым делом вопрос: что именно "это"? И дальше уже стал описывать, какие варианты понимания задачи появляются при подобной их постановке.

Насчет команды "Изменить изображение". У меня её вообще нет - все действия по редактированию выполняются с панели при выделенном изображении. Да я и не помню, чтобы такая команда была. Изменить изображение появляется один раз - при вставке изображения. В дальнейшем его можно заменить или изменять свойства и параметры через панель.
Вам точно надо именно "Изменить изображение"? Какова конечная цель выполнения этой команды? Может быть можно найти другие пути решения - если знать, что именно искать.
#3
Цитата: Vladislav10 от 05.12.2025, 16:38:09Как это выполнить на VBA
Это - это что? ПКМ по рисунку? Конвертирование? Конкретизируйте. Картинка не подгружается и что Вы там делаете и что надо вообще непонятно.
Конвертировать: h.ConvertToInlineShape
ПКМ - нельзя имитировать простыми средствами, там надо через API заморачиваться. Проще докопаться до причины. Возможно глюк или неполная прорисовка сразу после вставки и нужно время(тот же цикл от 1 до 100 с DoEvents)
#4
Цитата: Aleksey от 03.12.2025, 18:54:38линии не переносятся
сделали бы на листе ФИЛЬТР эти линии через границы ячеек, а не фигурами - тогда и лишних телодвижений не потребовалось бы.
Ну а без этого - можно накрутить лишнего(что не всегда хорошо):
Sub iSort_()
Dim Itog As Worksheet, wsFilter As Worksheet
Dim iLastRow As Long
Dim i As Long
Dim sh As Shape
  Set wsFilter = ActiveSheet
  Set Itog = ThisWorkbook.Worksheets("Итог")
  iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    With Itog
      .Cells.Clear
      .DrawingObjects.Delete
      wsFilter.Range("A1:J" & iLastRow + 1).Copy .Cells(1, 1)
      .Cells.UnMerge
      .Cells.Value = Empty
      wsFilter.Range("A1:J" & iLastRow + 1).Copy
      .Cells(1, 1).PasteSpecial xlPasteValues
      .Cells(1, 1).PasteSpecial xlPasteFormats
      Application.CutCopyMode = False
        iLastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
      .Range("A22:J" & iLastRow).Sort Key1:=.Range("F4"), Order1:=xlAscending, Header:=xlYes
'        iLastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
       
        .Range("A23") = 1
        .Range("A23").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
        Step:=1, Stop:=iLastRow - 22, Trend:=False

       
        For i = iLastRow To 23 Step -1
        If IsDate(.Cells(i - 1, "F")) Then
          If Month(.Cells(i, "F")) <> Month(.Cells(i - 1, "F")) Then
            .Rows(i).Insert
            .Range("A" & i & ":J" & i).Merge
            .Range("A" & i).HorizontalAlignment = xlCenter
            .Range("A" & i) = Format(.Cells(i + 1, "F"), "MMMM")
          End If
        End If
        Next
            .Range("A23").EntireRow.Insert
            .Range("A23 :J23").Merge
            .Range("A23 :J23").HorizontalAlignment = xlCenter
            .Range("A23 :J23") = Format(.Cells(24, "F"), "MMMM")
    End With
End Sub
да, заменил цикл по фигурам на одну строку удаления - цикл лишний, от слова совсем, да еще с Like на любую строку.
#5
Попробуйте заменить эту строку:
Range("A1:J" & iLastRow).Copy .Cells(1, 1)на такие:
Range("A1:J" & iLastRow).Copy
.Cells(1, 1).PasteSpecial xlPasteValues
.Cells(1, 1).PasteSpecial xlPasteFormats
Application.CutCopyMode = false
#6
Цитата: Kuzmich от 23.11.2025, 15:35:13подсказки не появляются
у меня появляются. Наводите на иконку, ждете секунду - всплывает подсказка.
#7
Kuzmich - Коды оформляйте тегами Code(Код). п.п. 4.25 Правил форума.
Я не могу постоянно делать это за Вас :)
#8
Можете написать мне в личные сообщения на форуме или через форму заказа на сайте: Заказ на разработку
Задачу тогда надо будет обсуждать более детально, прежде чем начать разработку.
#9
Там почти все править надо. Возьмите код из ссылки, которую я выше скидывал. Там код как раз берет и файлы в папке и в подпапках. А в приложенном Вами - только в одной папке.
А сама ошибка означает, что некорректное имя файла. Возможно, проблема в том, что Вы пытаетесь перебрать все файлы, а не только файлы Excel. А там могут быть и временные, и скрытые, и системные.
#10
Вместо этого куска:
On Error Resume Next
        appExcel.Workbooks.Open fullPath
        If Err.Number <> 0 Then
            newName = "ПОДОЗРИТЕЛЬНЫЙ_ФАЙЛ_" & fileName
            fso.MoveFile fullPath, folderPath & newName
            Err.Clear
        Else
            appExcel.ActiveWorkbook.Close
        End If
попробуйте вот такой:
On Error Resume Next
set wb = Nothing
set wb = appExcel.Workbooks.Open(fullPath)
If wb is Nothing Then
    newName = "ПОДОЗРИТЕЛЬНЫЙ_ФАЙЛ_" & fileName
    fso.MoveFile fullPath, folderPath & newName
    Err.Clear
Else
    ws.Close 0
End If
И где-нибудь вверху добавьте объявление:
Dim wb As Object
И не забывайте оформлять коды соответствующими тегами.
#11
А хоть что-то Вы уже попробовали? И что значит "проблемы с открытием"? Какого рода проблемы? И формат файлов не забудьте уточнить.
Про просмотр файлов в папке на сайте есть статья: Просмотреть все файлы в папке
Останется лишь добавить проверку на "проблему с открытием".
#12
Нет. Но в Вашем случае это просто некая "хитрость", чтобы заставить программу отбирать значения, разбросанные подобным образом. И то не все и не всегда.
У Вас клиенты записаны напротив каждого договора - а программа отбирает по сути те строки, у которых максимальный уровень группировки в таблице. Тоже и с отсрочкой.
Если бы эти данные были записаны "по правилам" - для каждой самой детализированной строки - то можно было бы обойтись без финтов - приложил скрин настроек, если бы в строке(например, 26) были бы продублированы данные по клиенту и отсрочке.
Т.е. для перевода такой таблицы в нормальную плоскую надо что-то отдельное делать, т.к. разбивка данных отличается несколько от классических.
Вам вообще проще собрать основные данные через надстройку, а потом клиентов и отсрочки через ВПР подтянуть на основании договора. Быстрее будет.
#13
Этого файла больше нет, поэтому скинуть не смогу.
#14
В Вашем случае я бы сделал в несколько ходов - уж очень разбросаны по структуре дополнительные данные.
Сначала заполняете все ячейки клиентами: выделяете диапазон С15:С88 -MulTEx -Диапазоны -Автозаполнение строк. Параметр "Ячейка с которой начать заполнение" - С15. Скрин приложил.
Тоже самое с отсрочкой(и другими подобными столбцами).
Потом приводите заголовки в порядок(это больше для того, чтобы в итоговой форме заголовки прописались). Я снял объединение и записал все заголовки в одну строку 12.
А далее применяете настройки со скрина.
#15
Тема перенесена в соответствующий раздел - на форуме есть отдельная ветка для обсуждений проблем и вопросов, связанных с надстройкой MulTEx.
По сути - ниже скрин, как можно сделать. Сама проблема в том, что клиенты у Вас записаны не в первой строке договора, поэтому надо слегка "помудрить" с указанием заголовков.
Яндекс.Метрика Рейтинг@Mail.ru