Чуть подвиньте картинки. Нужно, чтобы нижний правый угол картинки (BottomRightCell) был внутри ячейки. Вернее, чтобы низ картинки был чуть-чуть выше границы ячейки
Чуть подвиньте картинки. Нужно, чтобы нижний правый угол картинки (BottomRightCell) был внутри ячейки. Вернее, чтобы низ картинки был чуть-чуть выше границы ячейки_Boroda_
Minerva76, Да, действительно, у Вас картинка смещена чуть выше, чем нужно... не попадает ровно в нужную ячейку. Мб лучше "починить" загрузчик картинок в эксель файл? В любом случае, можно сделать сравнение по функции, по которой нужно, чтобы координата Y середины рисунка должна была бы хотя бы попасть в диапазон координат Y соответствующей ячейки. [vba]
Код
Sub kartinki_von() Dim i As Long, i_n As Long Dim obj As Shape Dim NWS As Worksheet, AWS As Worksheet Set AWS = ActiveSheet Set NWS = ActiveWorkbook.Sheets.Add i_n = AWS.Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To i_n For Each obj In AWS.Shapes If obj.Type = 13 Then If RoundPlace(AWS.Cells(i, 2), obj) Then obj.Copy With NWS.ChartObjects.Add(0, 0, obj.Width, obj.Height).Chart .ChartArea.Border.LineStyle = 0 .Paste .Export Filename:=ActiveWorkbook.Path & "\" & AWS.Cells(i, 2) & ".jpg", FilterName:="JPG" .Parent.Delete End With End If End If Next obj Next i Application.DisplayAlerts = False NWS.Delete Application.DisplayAlerts = True End Sub Function RoundPlace(r As Range, shp As Shape) As Boolean Dim Middle As Single Middle = shp.Top + shp.Height / 2 RoundPlace = (r.Top <= Middle And Middle < r.Top + r.Height) End Function
[/vba]
Minerva76, Да, действительно, у Вас картинка смещена чуть выше, чем нужно... не попадает ровно в нужную ячейку. Мб лучше "починить" загрузчик картинок в эксель файл? В любом случае, можно сделать сравнение по функции, по которой нужно, чтобы координата Y середины рисунка должна была бы хотя бы попасть в диапазон координат Y соответствующей ячейки. [vba]
Код
Sub kartinki_von() Dim i As Long, i_n As Long Dim obj As Shape Dim NWS As Worksheet, AWS As Worksheet Set AWS = ActiveSheet Set NWS = ActiveWorkbook.Sheets.Add i_n = AWS.Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To i_n For Each obj In AWS.Shapes If obj.Type = 13 Then If RoundPlace(AWS.Cells(i, 2), obj) Then obj.Copy With NWS.ChartObjects.Add(0, 0, obj.Width, obj.Height).Chart .ChartArea.Border.LineStyle = 0 .Paste .Export Filename:=ActiveWorkbook.Path & "\" & AWS.Cells(i, 2) & ".jpg", FilterName:="JPG" .Parent.Delete End With End If End If Next obj Next i Application.DisplayAlerts = False NWS.Delete Application.DisplayAlerts = True End Sub Function RoundPlace(r As Range, shp As Shape) As Boolean Dim Middle As Single Middle = shp.Top + shp.Height / 2 RoundPlace = (r.Top <= Middle And Middle < r.Top + r.Height) End Function
Roman777, Излишнее цитирование удалено Спасибо Вам огромное за помощь! Вы во второй раз спасли меня ! Постараюсь и с загрузчиком картинок разобраться.
Roman777, Излишнее цитирование удалено Спасибо Вам огромное за помощь! Вы во второй раз спасли меня ! Постараюсь и с загрузчиком картинок разобраться.Minerva76
Сообщение отредактировал Manyasha - Понедельник, 30.10.2017, 11:18
Roman777, файл был взят из этой темы, вот он. Возможно ли это из-зав того что версия Excel 2016? Если да, то есть ли возможность исправить этот макрос
Roman777, файл был взят из этой темы, вот он. Возможно ли это из-зав того что версия Excel 2016? Если да, то есть ли возможность исправить этот макрос lbarmen
lbarmen, мб и из-за версии, не проверить сейчас, нет 2016-го. Попробуйте такой... работает? [vba]
Код
Sub kartinki_von() Dim i As Long, i_n As Long Dim obj As Shape Dim NWS As Worksheet, AWS As Worksheet Set AWS = ActiveSheet Set NWS = ActiveWorkbook.Sheets.Add i_n = AWS.Cells(Rows.Count, 2).End(xlUp).Row Application.ScreenUpdating = False For i = 2 To i_n For Each obj In AWS.Shapes If obj.Type = 13 Then If AWS.Cells(i, 2).Top = obj.BottomRightCell.Top Then obj.Copy With NWS.ChartObjects.Add(0, 0, obj.Width, obj.Height).Chart .ChartArea.Select .ChartArea.Border.LineStyle = 0 .Paste .Export Filename:=ActiveWorkbook.Path & "\" & AWS.Cells(i, 2) & ".jpg", FilterName:="JPG" .Parent.Delete End With End If End If Next obj Next i Application.DisplayAlerts = False NWS.Delete Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
[/vba]
lbarmen, мб и из-за версии, не проверить сейчас, нет 2016-го. Попробуйте такой... работает? [vba]
Код
Sub kartinki_von() Dim i As Long, i_n As Long Dim obj As Shape Dim NWS As Worksheet, AWS As Worksheet Set AWS = ActiveSheet Set NWS = ActiveWorkbook.Sheets.Add i_n = AWS.Cells(Rows.Count, 2).End(xlUp).Row Application.ScreenUpdating = False For i = 2 To i_n For Each obj In AWS.Shapes If obj.Type = 13 Then If AWS.Cells(i, 2).Top = obj.BottomRightCell.Top Then obj.Copy With NWS.ChartObjects.Add(0, 0, obj.Width, obj.Height).Chart .ChartArea.Select .ChartArea.Border.LineStyle = 0 .Paste .Export Filename:=ActiveWorkbook.Path & "\" & AWS.Cells(i, 2) & ".jpg", FilterName:="JPG" .Parent.Delete End With End If End If Next obj Next i Application.DisplayAlerts = False NWS.Delete Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
мб и из-за версии, не проверить сейчас, нет 2016-го. Попробуйте такой... работает?
Добрый день! Скачал файл из этой ветки, попробовал в версии 2021 и также белые фото сохраняются. Подскажите, пожалуйста, что нужно поправить в коде, чтобы фото сохранялись как надо? Заранее огромное спасибо!
мб и из-за версии, не проверить сейчас, нет 2016-го. Попробуйте такой... работает?
Добрый день! Скачал файл из этой ветки, попробовал в версии 2021 и также белые фото сохраняются. Подскажите, пожалуйста, что нужно поправить в коде, чтобы фото сохранялись как надо? Заранее огромное спасибо!aho3