簡體   English   中英

從工作表中獲取圖片到 Excel 用戶表單

[英]Get Picture from Worksheet into Excel Userform

我希望在用戶窗體上的圖像控件中查看工作表中的圖像。

此圖像將根據組合框上的值進行更改。 我已經插入(使用:插入 -> 圖片)幾個圖像到我的工作簿的“Sheet1”中,並將它們命名為“Picture1”和“Picture2”。

我創建了以下用戶窗體:

表格 http://im56.gulfup.com/msKyqi.png

這是我為了從工作表加載圖像而嘗試使用的代碼,但不幸的是,目前這不起作用。

Private Sub ComboBox1_Change()

UserForm1.Image1.Picture = LoadPicture(Worksheets("Sheet1").Shapes(ComboBox1.Value))

End Sub

Private Sub UserForm_Initialize()

UserForm1.ComboBox1.Clear
UserForm1.ComboBox1.AddItem "Picture1"
UserForm1.ComboBox1.AddItem "Picture2"

UserForm1.ComboBox1.Value = "Picture1"

UserForm1.Image1.Picture = LoadPicture(Worksheets("Sheet1").Shapes(ComboBox1.Value))

End Sub

每次運行此代碼時,都會出現以下錯誤:

錯誤 http://im43.gulfup.com/YoWvTp.png

請指教。

我想到了!

當我使用 UserForm 時,有一個解決方法。

而不是在工作表中放置圖像然后嘗試以表單加載它們,我首先嘗試將它們放置在用戶表單中,這里是如何。

在您的用戶表單上創建一個框架:框架 http://im88.gulfup.com/Moy8I6.png

將框架的可見屬性設置為“ False ”:可見 http://im88.gulfup.com/sAIQqh.png

通過添加圖片控件並加載圖片來插入圖片,您可以根據需要添加任意數量的圖片:圖片 http://im88.gulfup.com/oas0EQ.png

命名圖像:命名 http://im88.gulfup.com/cIO317.png

將所有圖像一個接一個地拖入框架中,(然后您可以將框架移到一個角落,這樣它就不會打擾您:

拖動 http://im88.gulfup.com/1fOSut.png移開 http://im88.gulfup.com/Q1fzKd.png

接下來創建一個圖片控件,這是您將用於根據選擇顯示圖片的內容:

表單視圖 http://im88.gulfup.com/X1UVRB.png

在此示例中,我將使用組合框進行選擇。 現在將以下代碼插入到非常簡單的表單中:

    Private Sub ComboBox1_Change()

    ' Image1 is the name of the created picture control
    UserForm3.Controls.Item("Image1").Picture = UserForm3.Controls.Item(UserForm3.ComboBox1.Value).Picture 

    End Sub

    Private Sub UserForm_Initialize()

    UserForm3.ComboBox1.AddItem "Argentina"
    UserForm3.ComboBox1.AddItem "Brazil"
    UserForm3.ComboBox1.AddItem "Chile"

    End Sub

正如您將看到的,帶有圖片的框架是隱藏的,並且圖片在圖片控件內根據選擇發生變化:

結果 http://im88.gulfup.com/MSqyHF.png

我認為這是更好的方法,而不是將圖像從工作表導出到 Temp 文件夾,然后將它們加載回圖片控件。

LoadImage() 函數需要一個文件名(可以用驅動器號和路徑完全限定)。 你得到一個類型不匹配,因為它需要一個字符串,你給它一個圖像對象。

據我所知,沒有簡單的方法可以將駐留在當前應用程序中的圖像放入圖像控件中。 我所知道的(hackish)解決方法是將圖像導出到文件,然后使用 LoadImage() 導入相同的文件。

如果您想將動態更新的圖表嵌入到用戶表單中,這與您必須走的路徑相同。 您將圖表導出為圖像(例如,JPEG),然后使用 LoadImage() 將圖像拉回到圖像控件中。

我知道這篇文章很古老,但我在這里找到了方法。 我想出了一個稍微不同的解決方案來解決這個問題。 我需要根據組合框選擇加載大約 30 張圖片。 首先,所有組合框選項(用於討論“XX”)都保存到一個單獨的工作表中,該工作表對用戶“非常隱藏”,並在用戶表單激活時加載到組合框中。 在用戶表單上添加了一個框架,在框架內放置了 30 個完全重疊的圖像框。 每個圖像框都被小心地命名為“Img_XX”,其中 XX 是簡單的兩個字母標識符。

通過這種設置,現在可以遍歷框架中的每個“控件”(圖像框)並將它們全部隱藏,除了名稱與組合框值匹配的那個。 用戶表單模塊中的代碼,在 Combobox_Change() 函數中,看起來像這樣:

 Private Sub ComboBox_Change()
    Dim SearchValue as String
    SearchValue = me.Combobox.value

    Dim Ctrl as Control
    For each Ctrl in Me.TestFrame.Controls
        If Ctrl.Name Like "img_" & SearchValue Then
            Ctrl.visible = True
        else
            Ctrl.Visible = False
        End If
    next Ctrl
 End Sub

我希望這會有所幫助,讓我知道您的想法。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM