Как добавить фотографии в определенные ячейки листа Excel с компьютера? [закрытый]

это код, который я использую :

Private Sub Image1_Click()
  Range("C1").Select
  Application.Dialogs(xlDialogInsertPicture).Show
End Sub


Private Sub Image2_Click()
  Range("D1").Select
  Application.Dialogs(xlDialogInsertPicture).Show
End Sub

Private Sub Image3_Click()
  Range("E1").Select
  Application.Dialogs(xlDialogInsertPicture).Show
End Sub

Private Sub Image4_Click()
  Range("F1").Select
 Application.Dialogs(xlDialogInsertPicture).Show
End Sub

Private Sub Image5_Click()
  Range("G1").Select
  Application.Dialogs(xlDialogInsertPicture).Show
End Sub

Private Sub Image6_Click()
  Range("K1").Select
  Application.Dialogs(xlDialogInsertPicture).Show
End Sub

Я хочу сделать именно так:

  • когда я нажимаю инструменты изображения в моей пользовательской форме, если добавить фотографию, это будет похоже на:(1)
  • когда я добавляю две фотографии, это будет автоматически две части и размер будет равен:(2)
  • если я добавлю три фотографии, это будет автоматически три части и размер будет равен:(3)

I хочу добавить фото, когда я нажимаю на изображение в моей пользовательской формы они будут apperar в моем workseet ячеек Excel, который я хочу (специфические клетки я хочу). Я особенно хочу добавить фотографии между строками 1-5 и столбцами C-L, и автоматически их размер будет равен.

я использовал этот код, чтобы добавить, что я не могу сделать то, что я сказал с этим:

What I want to do
Когда я использовал этот код фотографии не равны в конкретных ячейках, когда я хочу, и не быть в определенном размере, который я хочу (слева один из них-мои инструменты userform и image, которые я нажимаю, справа - это то, как скрипт добавляет фотографии на лист)

what I did

мне нужно исправить их размер автоматически. В сценарии Каца я могу добавить их в определенные ячейки, но если я добавляю фотографию, ее размер не заполняет ячейки, которые я хочу, или если я добавляю две фотографии, не заполняют ячейки автоматически, которые я хочу . В итоге этот скрипт добавляет фотографии в ячейку и размер, который я написал в скрипт . Не исправлять их автоматически в конкретные ячейки как равные .
(Хочу сделать как первую фотографию но могу по этому скрипту вторую фотографию)

Private Sub Image1_Click()
Dim fileName1 As Variant
fileName1 = Application.GetOpenFilename(filefilter:="Tiff Files(*.tif;*.tiff),*.tif;*.tiff,JPEG Files (*.jpg;*.jpeg;*.jfif;*.jpe),*.jpg;*.jpeg;*.jfif;*.jpe,Bitmap Files(*.bmp),*.bmp", FilterIndex:=2, Title:="Choose picture", MultiSelect:=False)
    If fileName1 = False Then
    'if cancel pressed
    Exit Sub
Else
ActiveWorkbook.Sheets("Coursebooking").Select
Range("A4").Select 'choose your start range
Dim picture1 As Object
Set picture1 = ActiveWorkbook.Sheets("Coursebooking").Pictures.Insert(fileName1)
With picture1
    .Top = Range("A4").Top 'set as needed
    .Left = Range("A4").Left 'set as needed
    .Width = 600 'set as needed
    .Height = .Width * 3 / 4 'set as needed
End With
End If
End Sub
22
задан Excellll
26.04.2023 5:59 Количество просмотров материала 3360
Распечатать страницу

1 ответ

из того, что я понимаю в вашем вопросе, вам не хватает ключевой части: диапазоны имеют такие свойства, как левый, верхний, правый и ширина, как и изображения. Вот функция, которая принимает Range объект в качестве параметра, предлагает пользователю выбрать изображения, а затем помещает изображения в этот диапазон. Узловой пункт: основанный на вашей просьбе, написано так, что коэффициент сжатия не будет поддержан поэтому изображения могут показаться squashed или растянутый.

Option Explicit
Sub testImportPicturesToRange()
    ImportPicturesToRange Range("B3:H10")
End Sub
Function ImportPicturesToRange(rngTarget As Range)

    'Declaration
    Dim picFormats As String, picPaths, picPath, pic
    Dim i As Long, numPics As Long, picWidth As Long

    'Select the pictures to import
    picFormats = "*.gif; *.jpg; *.bmp; *.png; *.tif"
    picPaths = Application.GetOpenFilename("Pictures (" & picFormats & ")," & picFormats, , "Select Picture to Import", , True)

    'Exit if user clicked Cancel
    If TypeName(picPaths) = "Boolean" Then Exit Function

    'Initialize
    i = 0
    numPics = 0
    For Each picPath In picPaths
        If picPath <> False Then numPics = numPics + 1
    Next
    picWidth = rngTarget.Width / numPics

    'Import the pictures
    On Error Resume Next
    For Each picPath In picPaths
        If picPath <> False Then
            Set pic = ActiveSheet.Pictures.Insert(picPath)
            pic.ShapeRange.LockAspectRatio = msoFalse
            pic.Top = rngTarget.Top
            pic.Left = rngTarget.Left + (i * picWidth)
            pic.Height = rngTarget.Height
            pic.Width = picWidth
            i = i + 1
        End If
    Next

    'Cleanup
    Set pic = Nothing
    Set picPath = Nothing
    Set picPaths = Nothing

End Function




обновление: из того, что я вижу в вашем вопросе, я think вот как вы хотите это реализовать.

Private Sub Image1_Click()
    ImportPicturesToRange Range("C1")
End Sub
2
отвечен Engineer Toast 2023-04-27 13:47

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

microsoft-excel
microsoft-excel-2010
vba
visual-studio
visual-studio-2012
Вверх