Add ảnh vào form VBA

Quảng cáo

huancv

Thành viên mới
Tham gia ngày
19 Tháng mười một 2010
Bài viết
11
Được thích
0
Điểm
0
Tuổi
37
Thưa các ad
Hiện tại em đang làm 1 form chèn ảnh vào form VBA như bên dưới.
Nhưng chỉ chèn được ảnh đuôi JPG, còn đuôi GIF và PNG lại không chèn vào được.
Nhờ các ad giúp đỡ với ạ.

"Private Sub img_Browse_Click()

Dim img As String
img = Application.GetOpenFilename(filefilter:="Png image,*.jpg,*.jpeg,*.png,*.GIF,*.bmp", Title:="Please select an image")

If Dir(img) <> "" Then
Me.Image_URL.value = img
Me.img_Photo.Picture = LoadPicture(Me.Image_URL.value)

End If

End Sub"

1604377443663.png
 

File đính kèm

  • Add picture.xlsm
    25.2 KB · Đọc: 18

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,725
Được thích
53,555
Điểm
50
Thưa các ad
Hiện tại em đang làm 1 form chèn ảnh vào form VBA như bên dưới.
Nhưng chỉ chèn được ảnh đuôi JPG, còn đuôi GIF và PNG lại không chèn vào được.
Nhờ các ad giúp đỡ với ạ.

"Private Sub img_Browse_Click()

Dim img As String
img = Application.GetOpenFilename(filefilter:="Png image,*.jpg,*.jpeg,*.png,*.GIF,*.bmp", Title:="Please select an image")

If Dir(img) <> "" Then
Me.Image_URL.value = img
Me.img_Photo.Picture = LoadPicture(Me.Image_URL.value)

End If

End Sub"

View attachment 248525
Phải sửa rất nhiều mới dùng được nha bạn. Có bàn ở đây nè:
 

File đính kèm

  • Add picture.xlsm
    27.3 KB · Đọc: 27

huancv

Thành viên mới
Tham gia ngày
19 Tháng mười một 2010
Bài viết
11
Được thích
0
Điểm
0
Tuổi
37
KÍnh gửi các ad.
xin cảm ơn các ad đã giúp cho ảnh PNG vào được form .
tuy nhiên sau khi ảnh vào Listbox lại không load được ảnh từ ListBox.
Nhờ anh chị giúp đỡ với ạ.
Hiện tại lệnh bên dưới chỉ load được ảnh JPG, không load được ảnh PNG
=====================
Private Sub ListBox1_Click() 'List danh sach tim kiem
On Error Resume Next

Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 3)

'Load picture
If Me.Image_URL.value <> "" Then
Me.img_Photo.Picture = LoadImage("")

Me.img_Photo.Picture = LoadImage(Me.Image_URL.value)
End If

End Sub
 

File đính kèm

  • Add picture (All).xlsm
    31.7 KB · Đọc: 16

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,901
Được thích
6,100
Điểm
2,568
KÍnh gửi các ad.
xin cảm ơn các ad đã giúp cho ảnh PNG vào được form .
tuy nhiên sau khi ảnh vào Listbox lại không load được ảnh từ ListBox.
Nhờ anh chị giúp đỡ với ạ.
Hiện tại lệnh bên dưới chỉ load được ảnh JPG, không load được ảnh PNG
=====================
Private Sub ListBox1_Click() 'List danh sach tim kiem
On Error Resume Next

Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 3)

'Load picture
If Me.Image_URL.value <> "" Then
Me.img_Photo.Picture = LoadImage("")

Me.img_Photo.Picture = LoadImage(Me.Image_URL.value)
End If

End Sub
1. Trước tiên xét đoạn code trong sub Timkiem_Change
Mã:
For i = 2 To Application.WorksheetFunction.CountA(Data.Range("A:C"))
    For X = 2 To 3
        a = Len(Me.Timkiem.Text)
        If Left(Data.Cells(i, X).value, a) = Me.Timkiem.Text And Me.Timkiem.Text <> "" Then
            Me.ListBox1.AddItem Data.Cells(i, 1).value
            For c = 1 To 3
                Me.ListBox1.List(ListBox1.ListCount - 1, c) = Data.Cells(i, c + 1).value
            Next c
        End If
    Next X
Next i
For i = 2 To Application.WorksheetFunction.CountA(Data.Range("A:C")) là không chính xác. Giả sử chỉ 10 dòng có dữ liệu. Lúc đó Application.WorksheetFunction.CountA(Data.Range("A:C")) trả về 30 do mỗi dòng có 3 cột dữ liệu A, B và C. Code xét 29 dòng từ 2 đến 30?

2.
Mã:
If Left(Data.Cells(i, X).value, a) = Me.Timkiem.Text And Me.Timkiem.Text <> "" Then
            Me.ListBox1.AddItem Data.Cells(i, 1).value
            For c = 1 To 3
                Me.ListBox1.List(ListBox1.ListCount - 1, c) = Data.Cells(i, c + 1).value
            Next c
End If
Nếu tìm thấy thì thêm Mã từ cột A vào cột đầu tiên (cột có chỉ số 0) của ListBox (ListBox1.AddItem), cái này đúng. Nhưng sau đó thêm 3 giá trị từ cột B, C i D (do Data.Cells(i, c + 1).value với c = 1 To 3) vào 3 cột tiếp theo của ListBox1? Do c = 1 To 3 nên 3 giá trị được thêm vào 3 cột có chỉ số 1, 2 và 3 của ListBox1. Nhưng do cột D không có giá trị (rỗng) nên cột có chỉ số 3 (cột thứ 4)trong ListBox1 chỉ chứa toàn giá trị rỗng - "". Tóm lại nhập cột D vào cột thứ 4 (có chỉ số 3) của ListBox1 là thừa.

3. Bây giờ xét dòng Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 3) trong ListBox1_Click.
Như trên đã nói thì cột thứ 4 của ListBox1, tức cột có chỉ số 3, chỉ chứa toàn giá trị rỗng nên đương nhiên Me.Image_URL.Text = "". Chính vì thế cụm IF ... End If tiếp theo không được thực hiện.

Tóm lại nếu chỉ sửa ít nhất thì phải là
Mã:
Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 2)

Nếu yêu thích sự chính xác thì sửa tiếp trong Timkiem_Change thành For c = 1 To 2. Và sửa For i = 2 To XYZ
 

huancv

Thành viên mới
Tham gia ngày
19 Tháng mười một 2010
Bài viết
11
Được thích
0
Điểm
0
Tuổi
37
1. Trước tiên xét đoạn code trong sub Timkiem_Change
Mã:
For i = 2 To Application.WorksheetFunction.CountA(Data.Range("A:C"))
    For X = 2 To 3
        a = Len(Me.Timkiem.Text)
        If Left(Data.Cells(i, X).value, a) = Me.Timkiem.Text And Me.Timkiem.Text <> "" Then
            Me.ListBox1.AddItem Data.Cells(i, 1).value
            For c = 1 To 3
                Me.ListBox1.List(ListBox1.ListCount - 1, c) = Data.Cells(i, c + 1).value
            Next c
        End If
    Next X
Next i
For i = 2 To Application.WorksheetFunction.CountA(Data.Range("A:C")) là không chính xác. Giả sử chỉ 10 dòng có dữ liệu. Lúc đó Application.WorksheetFunction.CountA(Data.Range("A:C")) trả về 30 do mỗi dòng có 3 cột dữ liệu A, B và C. Code xét 29 dòng từ 2 đến 30?

2.
Mã:
If Left(Data.Cells(i, X).value, a) = Me.Timkiem.Text And Me.Timkiem.Text <> "" Then
            Me.ListBox1.AddItem Data.Cells(i, 1).value
            For c = 1 To 3
                Me.ListBox1.List(ListBox1.ListCount - 1, c) = Data.Cells(i, c + 1).value
            Next c
End If
Nếu tìm thấy thì thêm Mã từ cột A vào cột đầu tiên (cột có chỉ số 0) của ListBox (ListBox1.AddItem), cái này đúng. Nhưng sau đó thêm 3 giá trị từ cột B, C i D (do Data.Cells(i, c + 1).value với c = 1 To 3) vào 3 cột tiếp theo của ListBox1? Do c = 1 To 3 nên 3 giá trị được thêm vào 3 cột có chỉ số 1, 2 và 3 của ListBox1. Nhưng do cột D không có giá trị (rỗng) nên cột có chỉ số 3 (cột thứ 4)trong ListBox1 chỉ chứa toàn giá trị rỗng - "". Tóm lại nhập cột D vào cột thứ 4 (có chỉ số 3) của ListBox1 là thừa.

3. Bây giờ xét dòng Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 3) trong ListBox1_Click.
Như trên đã nói thì cột thứ 4 của ListBox1, tức cột có chỉ số 3, chỉ chứa toàn giá trị rỗng nên đương nhiên Me.Image_URL.Text = "". Chính vì thế cụm IF ... End If tiếp theo không được thực hiện.

Tóm lại nếu chỉ sửa ít nhất thì phải là
Mã:
Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 2)

Nếu yêu thích sự chính xác thì sửa tiếp trong Timkiem_Change thành For c = 1 To 2. Và sửa For i = 2 To XYZ
Mình đã sửa lại code.
Nhưng sau khi sửa song thì trong listbox_click lại không hiển thị được file ảnh 3160070.PNG
nhờ ad support giúp thêm lỗi này nữa ạ.
thanks ad nhiều
 

File đính kèm

  • Add picture (All).xlsm
    34.9 KB · Đọc: 18
  • 3160070.PNG
    3160070.PNG
    156.2 KB · Đọc: 17

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,901
Được thích
6,100
Điểm
2,568
Mình đã sửa lại code.
Nhưng sau khi sửa song thì trong listbox_click lại không hiển thị được file ảnh 3160070.PNG
Tôi đã bỏ nhiều công sức và thời gian của mình để giải thích và hướng dẫn chỉnh sửa. Nhưng bạn không làm như tôi hướng dẫn. Tôi đã ghi rất rõ
Tóm lại nếu chỉ sửa ít nhất thì phải là

Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 2)
Bạn không sửa vì vẫn là Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 3). Trong khi đó lại bỏ If và End If đi. Bỏ đi thì giúp được gì? Tôi đã viết rất rõ là nếu không sửa cái tôi nói thì Me.Image_URL.Text = "". Khi đó LoadImage(Me.Image_URL.value) trả về NOTHING vì đường dẫn tới tập tin ảnh là RỖNG: Me.Image_URL.value = RỖNG. Kết cục là không hiện ảnh.
 

huancv

Thành viên mới
Tham gia ngày
19 Tháng mười một 2010
Bài viết
11
Được thích
0
Điểm
0
Tuổi
37
Phải sửa rất nhiều mới dùng được nha bạn. Có bàn ở đây nè:
Thank you ad ạ ::::)))
 

huancv

Thành viên mới
Tham gia ngày
19 Tháng mười một 2010
Bài viết
11
Được thích
0
Điểm
0
Tuổi
37
Tôi đã bỏ nhiều công sức và thời gian của mình để giải thích và hướng dẫn chỉnh sửa. Nhưng bạn không làm như tôi hướng dẫn. Tôi đã ghi rất rõ

Bạn không sửa vì vẫn là Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 3). Trong khi đó lại bỏ If và End If đi. Bỏ đi thì giúp được gì? Tôi đã viết rất rõ là nếu không sửa cái tôi nói thì Me.Image_URL.Text = "". Khi đó LoadImage(Me.Image_URL.value) trả về NOTHING vì đường dẫn tới tập tin ảnh là RỖNG: Me.Image_URL.value = RỖNG. Kết cục là không hiện ảnh.
Buồn quá, mình đã thử Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 3). và Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 2). đều không load được ảnh PNG mà chỉ load được ảnh JPG thôi,
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,901
Được thích
6,100
Điểm
2,568
Buồn quá, mình đã thử Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 3). và Me.Image_URL.Text = ListBox1.List(ListBox1.ListIndex, 2). đều không load được ảnh PNG mà chỉ load được ảnh JPG thôi,
Vấn đề dùng code để load được ảnh PNG là vấn đề khác. Tôi đã giúp bạn về code để sao cho đường dẫn không là RỖNG, vì code của bạn sai. Còn code để load PNG chẳng phải là bạn đã cám ơn tận 2 lần ở bài #3 và bài #9 là gì? Vậy thì đi hỏi người ta chứ sao lại hỏi tôi?

Bạn tự xoay xở nhé, tôi không giúp bạn nữa đâu.
 
Lần chỉnh sửa cuối:
Quảng cáo
Top Bottom