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

Страницы: 1 2 3 4 След.
Вставка изображений, изменение масштаба (увеличение/уменьшение) при нажатии - VBA макрос
 
Извините, конечно, но диалог выбора файлов и прописывание конкретного пути, где будет выполняться поиск изображение, это не то, что я имел виду. В моём случае речь про то, что ни файл, ни изображения не должны быть привязаны к какому-то конкретному пути. Задумка в том, что, в какую бы папку пользователь ни положил файлы, код будет работать автономно, не нужно будет заходить в код и прописывать новый путь.

Цитата
написал:
диалог выбора файлов:
Код
    '   если путь надо указать статичный - вместо диалога прописываем одну строку
    '   sPicsPath = "C:\images\"

Это понял, спасибо!
Цитата
написал:
убираете блок выбора папки(у которого тоже есть комментарий: 'выбираем путь к папке с картинками). И оставляете только эту строку:
Код
sPicsPath = ThisWorkbook.Path
Вставка изображений, изменение масштаба (увеличение/уменьшение) при нажатии - VBA макрос
 
Дмитрий(The_Prist) Щербаков, добрый день.

Правильно понимаю, что нужно этот код использовать? (уже добавил в него oShp.OnAction = "ClickResizeImage"). Этот код помещаю в модуль, а коды для PlaceImage и ClickResizeImage в "ЭтаКнига"?

И ещё момент, можно ли в Вашем коде сделать так, чтобы путь до файлов изображений был тот же, что и путь этой книги Excel? Что-то вроде folderPath = ThisWorkbook.path & "\".
Код
Option Explicit
 
Sub InsertPictureByVal()
    Dim sPicsPath As String
    Dim sPicName As String, sPFName As String, sSpName As String
    Dim llastr As Long, lr As Long
    Dim oShp As Shape
    Dim zoom As Double
 
    'выбираем путь к папке с картинками
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выбрать папку с картинками"       'заголовок окна диалога
        .ButtonName = "Выбрать папку"
        .Filters.Clear                              'очищаем установленные ранее типы файлов
        .InitialFileName = ThisWorkbook.Path        'назначаем первую папку отображения
        .InitialView = msoFileDialogViewLargeIcons  'вид диалогового окна
        If .Show = 0 Then Exit Sub               'показываем диалог
        sPicsPath = .SelectedItems(1) 'считываем путь к папке
    End With
    '   если путь надо указать статичный - вместо диалога прописываем одну строку
    '   sPicsPath = "C:\images\"
 
 
    'проверяем, есть ли слеш после пути к папке
    'если нет - добавляем, иначе путь к картинке будет неверный
    If Right(sPicsPath, 1) <> Application.PathSeparator Then
        sPicsPath = sPicsPath & Application.PathSeparator
    End If
    'определяем последнюю ячейку по столбцу с именами картинок
    llastr = Cells(Rows.Count, 2).End(xlUp).Row
    'если кроме шапки в столбце с именами картинок ничего нет
    If llastr < 2 Then
        Exit Sub
    End If
    'цикл по столбцу с именами картинок
    For lr = 2 To llastr
        sPicName = Cells(lr, 2).Value
        'проверяем наличие картинки в папке
        sPFName = sPicsPath & sPicName
        If Dir(sPFName, 16) <> "" And sPicName <> "" Then
            'в эту ячейку вставляем картинку
            With Cells(lr, 3)
 
                'задаем картинке уникальный адрес,
                'привязанный к адресу ячейки
                sSpName = "_" & .Address(0, 0) & "_autopaste"
                'если картинка уже есть - удаляем её
                Set oShp = Nothing
                On Error Resume Next
                Set oShp = ActiveSheet.Shapes(sSpName)
                If Not oShp Is Nothing Then
                    oShp.Delete
                End If
                On Error GoTo 0
                'вставляем выбранную картинку
                Set oShp = ActiveSheet.Shapes.AddPicture(sPFName, False, True, .Left + 1, .Top + 1, -1, -1)
                'определяем размеры картинки в зависимости от размера ячейки
                zoom = Application.Min(.Width / oShp.Width, .Height / oShp.Height)
                oShp.Height = oShp.Height * zoom - 2
                'переименовываем вставленную картинку(чтобы потом можно было заменить)
                oShp.Name = sSpName
                oShp.OnAction = "ClickResizeImage"
            End With
        End If
    Next
End Sub
Вставка изображений, изменение масштаба (увеличение/уменьшение) при нажатии - VBA макрос
 
Вот так у меня сейчас реализованы оба варианта. Изображение в C2 масштабируемое, но код, который я привёл выше, это "ручное добавление".
Изменено: art_TD - 08.07.2025 12:36:49
Вставка изображений, изменение масштаба (увеличение/уменьшение) при нажатии - VBA макрос
 
Спасибо, это решение видел, тестировал. Там, к сожалению, не рассматривается вторая часть задачи - масштабирование изображений.
Цитата
написал:
У Дмитрия Щербакова ЕСТЬ
Изменено: art_TD - 08.07.2025 12:28:52
Вставка изображений, изменение масштаба (увеличение/уменьшение) при нажатии - VBA макрос
 
Добрый день.

Для базы данных ищу решение такой задачи (из 2 пунктов):

1. Нужно вставить изображение по критерию (артикул). Расширение файлов изображений может быть любым.
Вариант решения тут: https://www.planetaexcel.ru/techniques/25/28717/
Но здесь сначала нужно создать ссылки на изображения, затем по ним будет выполнен поиск. Ссылку на изображения я получаю с помощью формулы.
Код
=СЦЕПИТЬ(ПОДСТАВИТЬ(ЯЧЕЙКА("имяфайла");СЖПРОБЕЛЫ(ЛЕВСИМВ(ПРАВСИМВ(ПОДСТАВИТЬ(ЯЧЕЙКА("имяфайла");"\";ПОВТОР(" ";100));100);100));"");A1;".png")

2. Нужно сделать масштабирование изображения, то есть нажимаем на маленькое изображение - оно увеличивается, нажимаем по увеличенному - оно возвращается к исходному размеру.

Найденный в интернете код работает частично, так как вставка изображений происходит по сути в ручном режиме - нужно выбирать ячейку и путь к файлу, чтобы сделать связку.
Код
Sub InsertImage()
    Dim SHP As Shape, fName As String, Cel As Range
    Set Cel = Application.InputBox("select cell for image placement & click on OK", "", , , , , , 8)
    fName = Application.GetOpenFilename(Title:="Select image", FileFilter:="Images (*.gif;*.jpg;*.jpeg;*.bmp;*.png),*.gif;*.jpg;*.jpeg;*.bmp;*.png")
    Cel.Select
    ActiveSheet.Pictures.Insert(fName).Select
    Set SHP = Selection.ShapeRange.Item(1)
    Call PlaceImage(Cel, SHP)
    SHP.OnAction = "ClickResizeImage"               '(assign macro)
    Cel.Select
End Sub
Sub PlaceImage(Cel As Range, SHP As Shape)
    Dim W As Double, H As Double, L As Double, T As Double
    Cel.Select: W = Cel.Width: H = Cel.Height: L = Cel.Left: T = Cel.Top
    With SHP
        .LockAspectRatio = msoTrue
        .Width = W
        If .Height > H Then .Height = H
        .Left = L + (W - SHP.Width) / 2
        .Top = T + (H - SHP.Height) / 2
    End With
End Sub
Sub ClickResizeImage()
    Dim SHP As Shape, Cel As Range, W As Double, H As Double, L As Double, T As Double
    Set SHP = ActiveSheet.Shapes(Application.Caller)
    Set Cel = SHP.TopLeftCell
    Cel.Select: W = Cel.Width: H = Cel.Height: L = Cel.Left: T = Cel.Top
    If SHP.Width < W Or SHP.Height < H Then SHP.Width = W * 5 Else Call PlaceImage(Cel, SHP)
End Sub

Можно ли как-то объединить коды, чтобы получить такой результат?
1. В колонке A список артикулов.
2. В колонку B автоматически вставляются изображения, найденные по артикулу в той же папке, где лежит файл Excel (в формате "иконок" под высоту ячейки, без каких-либо ссылок).
3. Иконки можно масштабировать до полного изображения и обратно.

Работаю в MS Excel 2016.
Извлечение изображения с листа (книг) Excel
 
Можно и так. Но файлов несколько. Указанный по ссылке макрос обрабатывает сразу несколько файлов и складывает картинки в одну папку.

К тому же, файлы имеют название Image 1, Image 2 и так далее. Будет пересечение названий между файлами, придётся вручную переименовывать. Конкретно сейчас речь про ~2000 объектов в 15 Excel-книгах.  
Изменено: art_TD - 07.07.2025 11:35:32
Извлечение изображения с листа (книг) Excel
 
Добрый день.

Столкнулся с такой проблемой как "массовое извлечение изображений из Excel". Нашёл интересный код на VBA, работает хорошо, но сохраняет изображения в том виде, как они представлены на листе, то есть уменьшенного размера. А надо сохранить в исходном разрешении. Есть у кого-то идеи, как нужно дополнить код? (я в макросах совершенно не силён)

https://www.excel-vba.ru/chto-umeet-excel/kak-soxranit-kartinki-iz-lista-excel-v-kartinki-jpg/#allfi...
Power Query - вывод результатов запроса в обычную таблицу Excel
 
Получилось, спасибо!  
Изменено: art_TD - 17.02.2025 15:55:46
Power Query - вывод результатов запроса в обычную таблицу Excel
 
PQ по умолчанию результат выводит на новый лист. У меня не получается сделать так, чтобы на том же листе выводились данные.  
Power Query - вывод результатов запроса в обычную таблицу Excel
 
Добрый день.

Вопрос - возможно ли в Excel как-то сделать PQ-запрос (веб-запрос) таким образом, чтобы результаты он возвращал в конкретный столбец на обычной (или умной сводной) таблице листа Excel?

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

Пока что у меня решение только через ВПР, что не позволяет обновлять данные, не заходя в сам запрос.  
Power Query - Заполнить таблицу пустой строкой, если веб-запрос вернулся с ошибкой
 
Добрый день.

Подскажите, пожалуйста, как можно решить такую проблему? Есть список кодов, которые подставляются через параметр к ссылке, далее извлекается информация с веб-страницы. Так получилось, что есть случаи, когда страницы с таким кодом нет, соответственно в таблице выводится ошибка, дальше обработка других кодов прекращается. Мне нужно, чтобы строка просто игнорировалась, если веб-страницы нет. В таблице колонки, соответственно, с нулями.

Весь файл скидывать не буду, он тяжелый. Вызываемая функция работает следующим образом:

Шаг 1. = Web.BrowserContents("https://www.ifcg.ru/kb/tnved/" & #"Код ТН ВЭД")
Шаг 2. = Html.Table(Источник, {{"Название", ".subtitle"}, {"Импорт", "TR:nth-child(1) > :nth-child(2)"}, {"НДС", "TR:nth-child(3) > :nth-child(2)"}, {"Экспорт", ".h3:nth-last-child(2)"}}, [RowSelector=".subtitle"])
Шаг 3. = Table.TransformColumnTypes(#"Извлеченная таблица из HTML",{{"Название", type text}, {"Импорт", type text}, {"НДС", type text}, {"Экспорт", Percentage.Type}})

Удаление строк с ошибками не помогает.
Power Query - Разделить список на несколько столбцов
 
...
Изменено: art_TD - 10.02.2025 16:22:54
Power Query - Разделить список на несколько столбцов
 
MadNike, спасибо большое! То, что требовалось.
Изменено: art_TD - 10.02.2025 16:23:10
Power Query - Разделить список на несколько столбцов
 
Добрый день.

Получаю желаемые данные из веб-запроса, но в форме списка. Далее этот список надо преобразовать в отдельные колонки с данными.

Так понимаю, что надо использовать разбивку на столбцы с функцией Text.StartsWith, но не получается так.

Файл прилагается. В нем уже содержится на листе 2 (3) нужный результат, который руками сделан после транспонирования таблицы.
Excel Power Query - парсер страницы с деревом, которое надо раскрыть (значения скрыты под "+")
 
Добрый день. Не подскажете, как быть с изменением таблицы, если кол-во строк (столбцов) в запросе отличается? Выдает ошибку (столбец показывает "Error"), если его не находит.

Надо как-то сделать, чтобы было по умолчанию 5 столбцов, но у меня не получается это победить.

То есть нужно, чтобы если по одному какому-то столбцу нет данных, то, соответственно, выводило пустое значение. Простое добавление доп. строки не помогает, там вылезает ошибка на CSS.
Изменено: art_TD - 31.01.2025 10:01:52
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
IKor, помимо собственно формулировки запроса (спорить не буду, мог и неоднозначно это сделать), к моему сообщению был приложен файл. Согласитесь, странно, если я на просьбу помочь с оптимизацией моей формулы, которая дает правильный результат, я получаю решения с другими результатами. Тут тогда тоже могу парировать "к вопросу о мастерстве ознакомления с файлом".

Спасибо за предложенное решение! Это в любом случае помощь в попытке достичь желаемого.

Изначально я так и делал, у меня созданы три столбца под каждое условие. Потом были долгие попытки все в один столбец запихать, что я и сделал в итоге. Решение в моем файле.
Цитата
написал:
Рекомендую задуматься об организации пары вспомогательных столбцов для указания границ диапазонов - либо сразу используйте два столбца и не экспериментируйте с обработкой текста вместо чисел.
Изменено: art_TD - 29.01.2025 17:25:41
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
Еще раз - мой запрос был оптимизировать/упростить формулу, а не придумать другую логику для значений, включая придирки формата ">200" - это не "не менее 200".

Если сказано, что число 200 может входить в диапазоны ">200", "200-300", но не может входить в "140-200", значит так оно и должно быть, даже если математически это не так.

"140-200" означает ДО 200, то есть само 200 НЕ входит в него включительно. А вот в "200-300" или ">200" (то есть ОТ 200) - это то, что надо. Надо принять логику, а не изменять ее. Вопрос касается только доработки формулы. Нет идей, не надо предлагать неправильные, пожалуйста.  
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
Цитата
написал:
Кстати, >200 - это не "не менее 200", а "более 200". Чувствуете разницу? 200 туда не входит
Я в курсе, что >200 - это словесно "более 200". Но для визуализации я сделал именно так. Если бы посмотрели формулу, то увидели бы там "$B$1>=ЗНАЧЕН". Можно было бы, конечно, указать вот так: "=>200"...

Цитата
написал:
Чрезвычайно информативно. Пойду за волшебным шаром, может, он подскажет, что же там такое "не то".
Моя формула работает правильно, Ваши нули и единицы не совпадают с моими результатами. Как тут написали, не хотелось бы ковыряться в другой формуле, пытаясь понять логику.  
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
Цитата
написал:
На мой взгляд числа " 200", а также "200-300" и "300-400" выходят за границы диапазона; в то время как числа "100-140" и "100-200" должны в него входить. Но видимо, Ваша логика какая-то иная.
Так число-то одно - 200, выделено желтой заливкой. Проверяется оно на предмет вхождения в нижеуказанные диапазоны, а не наоборот.

Вместо 200 можно подставлять другое - 98, 101, 385, например. И каждый раз это число будет проверяться формулой. Где попало в условия, диапазон выделяется "ИСТИНА", где нет - "ЛОЖЬ".
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
Цитата
написал:
Почему в B17:B19 ЛОЖЬ, хотя диапазоны больше 200
Стесняюсь спросить, а должна быть ИСТИНА? Диапазон 300-400, число 200 в него не входит однозначно, а вот условию ">200" оно удовлетворяет, поэтому ИСТИНА. Проверяется заданное число на соответствие каждой конкретной строке, а не списку в целом - по-моему, это весьма логично.  
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
_Boroda_, нет, не то решение.
Изменено: art_TD - 29.01.2025 16:28:56
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
IKor, моя формула считает правильно, но она громоздкая. В вашей формуле не то, что надо (видимо, вследствие того, что я не указал в запросе, что требуется).
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
Цитата
написал:
Невнятная какая-то задача. Почему в B17:B19 ЛОЖЬ, хотя диапазоны больше 200? Ну и т.п.
Добавил комментарии в файл, чтобы было понятно, почему так, а не иначе.
[ Закрыто] Проверка, входит ли значение в диапазон (в том числе, значения со знаками < и >)
 
Добрый день.

Можно ли как-то оптимизировать/упростить формулу проверки соответствия числа заданным критериям (то есть входит в диапазон 100-200, например, или является <100 (>200))?

Файл прилагается.
Excel Power Query - парсер страницы с деревом, которое надо раскрыть (значения скрыты под "+")
 
Вообще в условиях этой инструкции написано, что надо ставить значение года как "Текстовое", чтобы в ссылке потом слияние было корректное. Но по-моему нет такого, что сам список для прогрузки должен содержать текстовые значения. У меня были числа, я переделал все колонку в текст.

Но очень долго идет загрузка. Список значений от 0 до 30000 сделал (с прицелом на будущее, если ничего в структуре не поменяется). Так ~8500 строк грузились около 2 часов. Остановил загрузку. Пока не знаю, как идти дальше, чтобы в итоге получить список ссылок. Даже вручную на предпросмотре таблица прогружается быстрее, чем программно.  
Excel Power Query - парсер страницы с деревом, которое надо раскрыть (значения скрыты под "+")
 
Вот так пока что...

ОБН. Преобразовал в текст числа. Считает строки...
Изменено: art_TD - 17.01.2025 11:57:29
Excel Power Query - парсер страницы с деревом, которое надо раскрыть (значения скрыты под "+")
 
Спасибо! Пытаюсь по этой инструкции сделать запросы. Но пока не получается вывести значения списком.

Идея такая, что:
1. Получаю список кодов.
2. Получаю ссылки на коды.
3. Получаю информацию со страниц.
Excel Power Query - парсер страницы с деревом, которое надо раскрыть (значения скрыты под "+")
 
Попробовал рандомные числа в УИН вставить, где-то что-то открывается как надо, а где-то просто пустая страница. Но идея мне нравится. Осталось логику образования УИНов понять.  
Excel Power Query - парсер страницы с деревом, которое надо раскрыть (значения скрыты под "+")
 
Для уточнения. Дерево находится условно на главной странице, после раскрытия до нужного кода, он будет иметь прямую ссылку для перехода на страницу кода.
Изменено: art_TD - 16.01.2025 15:34:30
Excel Power Query - парсер страницы с деревом, которое надо раскрыть (значения скрыты под "+")
 
Добрый день.

Подскажите, пожалуйста, можно ли как-то путем запросов в Power Query раскрыть список (см. приложенный скрин) и вывести найденные 10-значные коды списком?

https://САЙТ/КОД
Страницы: 1 2 3 4 След.
Наверх