在Excel Userform

时间:2018-03-13 23:46:18

标签: excel vba image excel-vba userform

我对VBA很新,一直试图解决这个问题,但没有任何运气。

我正在尝试创建产品目录并构建了一个用户表单,以允许在电子表格的第一个空白行中输入新产品。到现在为止还挺好。

然而,我遇到困难的是,我需要在用户表单中嵌入产品图片(例如https://image.shutterstock.com/z/stock-photo-coffee-cup-and-coffee-beans-on-table-261745823.jpg),以便能够将文件从计算机移植到计算机而不会丢失已加载到电子表格中的图像。

理想情况下,我根本不想将URL本身插入电子表格中。当用户点击提交时,我希望用户表单从在线&将其插入电子表格的第一个空白行中的A列。将其调整为特定宽度/高度。 (待定)。

我发现了类似于我需要的问题here& here& here。问题要么没有得到解答,要么我不确定如何使它们符合我的需要。

这是我现在的代码,但它提出了运行时424对象错误,我显然错过了一些><

Private Sub cmdSubmitForm_Click()

Dim StorePrice As Currency, SupplierPrice As Currency
Dim pic As String 'file path of pic

Dim LastRow As Long, ws As Worksheet
Set ws = Sheets("Pricing")

'Finds the last blank row
LastRow = ws.Range("B" & Rows.Count).End(xlUp).Row + 1

StorePrice = txtStorePrice.value
SupplierPrice= txtSupplier.Price.Value

ws.Range("B" & LastRow).Value = txtProductName.Text
ws.Range("C" & LastRow).Value = txtStorePrice.Text
ws.Range("D" & LastRow).Value = cboCategory.Text
ws.Range("E" & LastRow).Value = cboSubCategory.Text
ws.Range("F" & LastRow).Value = txtStoreLink.Text
ws.Range("G" & LastRow).Value = txtSupplierName.text
ws.Range("H" & LastRow).Value = txtSupplierPrice.text
ws.Range("I" & LastRow).Value = txtSupplierLink.text
ws.Range("J" & LastRow).Value = StorePrice- SupplierPrice
ws.Range("K" & LastRow).Value = txtNotes.Text

ws.Range("A" & LastRow).Value = Pictures.Insert(txtImgUrl.Value)


'handler:
'MsgBox "Error"

End Sub

如果有人对如何解决这个问题有任何想法我会非常感激!!!!

提前致谢:)

1 个答案:

答案 0 :(得分:0)

我不确定为什么会出现运行时424对象错误。你能指定哪行代码会给你错误吗?

我会说这个链接Inserting an Online Picture to Excel with VBA包含你真正需要的一切。

您应该为图片声明一个对象变量

Set myPicture = Pictures.Insert(txtImgUrl.Value)

每次插入图片时重复此操作:

您需要通过设置myPicture对象变量的值将图片插入工作表。在你的情况下,它将是这样的:

With myPicture
    .ShapeRange.LockAspectRatio = msoFalse 'Unlock aspect ratio
    .Width = ws.Range("A" & LastRow).Width 'Picture width equal to cell width
    .Height = ws.Range("A" & LastRow).Height 'Picture height equal to cell height
    .Top = Rows(ws.Range("A" & LastRow).Row).Top 'Picture aligned to the top edge of the cell
    .Left = Columns(ws.Range("A" & LastRow).Column).Left 'Picture aligned to the left edge of the cell
End With

然后添加一些有关如何在工作表上放置此图片的详细信息

*.ico