Выше ответы полезны, я просто хотел бы добавить пример, который, я думаю, демонстрирует, что происходит, когда мы передаем параметр без ключевого слова ref, даже если этот параметр является ссылочным типом:
MyClass c = new MyClass(); c.MyProperty = "foo";
CNull(c); // only a copy of the reference is sent
Console.WriteLine(c.MyProperty); // still foo, we only made the copy null
CPropertyChange(c);
Console.WriteLine(c.MyProperty); // bar
private void CNull(MyClass c2)
{
c2 = null;
}
private void CPropertyChange(MyClass c2)
{
c2.MyProperty = "bar"; // c2 is a copy, but it refers to the same object that c does (on heap) and modified property would appear on c.MyProperty as well.
}
Попробуйте:
With xlApp.ActiveSheet.Pictures.Insert(PicPath)
With .ShapeRange
.LockAspectRatio = msoTrue
.Width = 75
.Height = 100
End With
.Left = xlApp.ActiveSheet.Cells(i, 20).Left
.Top = xlApp.ActiveSheet.Cells(i, 20).Top
.Placement = 1
.PrintObject = True
End With
Лучше не выбирать что-либо в Excel, обычно это никогда не требуется и замедляет ваш код.
Если вы просто вставляете и изменяете размер картинки, попробуйте код ниже.
Для конкретного заданного вами вопроса свойство TopLeftCell возвращает объект диапазона, связанный с ячейкой, в которой припаркован верхний левый угол. Чтобы разместить новое изображение в определенном месте, я рекомендую создать изображение в «правильном» месте и зарегистрировать его верхние и левые значения свойств манекена для двойных переменных.
Вставьте свой Pic, назначенный переменной, чтобы легко изменить ее имя. Объект Shape будет иметь то же имя, что и объект Picture.
Sub Insert_Pic_From_File(PicPath as string, wsDestination as worksheet)
Dim Pic As Picture, Shp as Shape
Set Pic = wsDestination.Pictures.Insert(FilePath)
Pic.Name = "myPicture"
'Strongly recommend using a FileSystemObject.FileExists method to check if the path is good before executing the previous command
Set Shp = wsDestination.Shapes("myPicture")
With Shp
.Height = 100
.Width = 75
.LockAspectRatio = msoTrue 'Put this later so that changing height doesn't change width and vice-versa)
.Placement = 1
.Top = 100
.Left = 100
End with
End Sub
Удачи!