Làm cách nào tạo nút rải xuống chứa các hình như B5 đến B7 khi cần dùng hình nào thi ta chỉ bấm vào nút xuống để chọn hình va các nét vẽ đó mình có thể cố định được không giông như tạo block cho nó vậy . Em có đính kèm file mong anh chị coi file lam giup e voi
Làm cách nào tạo nút rải xuống chứa các hình như B5 đến B7 khi cần dùng hình nào thi ta chỉ bấm vào nút xuống để chọn hình va các nét vẽ đó mình có thể cố định được không giông như tạo block cho nó vậy . Em có đính kèm file mong anh chị coi file lam giup e voi
Làm cách nào tạo nút rải xuống chứa các hình như B5 đến B7 khi cần dùng hình nào thi ta chỉ bấm vào nút xuống để chọn hình va các nét vẽ đó mình có thể cố định được không giông như tạo block cho nó vậy . Em có đính kèm file mong anh chị coi file lam giup e voi
Theo mình hiểu thì bạn muốn dùng List trong (Data Validation) để lấy hình vẽ Shapes
hiện tại điều bạn mong muốn chưa thành hiện thực
Mình cũng đã từng nghĩ tới nhưng không thực hiện được với hình vẽ Shapes
Theo mình hiểu thì bạn muốn dùng List trong (Data Validation) để lấy hình vẽ Shapes
hiện tại điều bạn mong muốn chưa thành hiện thực
Mình cũng đã từng nghĩ tới nhưng không thực hiện được với hình vẽ Shapes
Chẳng có gì là không được cả
Có điều tác giả gửi bài vào box HÀM VÀ CÔNG THỨC, chứng tỏ muốn giải quyết bài toàn bằng các công cụ có sẵn ---> Vậy thì không được là cái chắc rồi (nên tôi chưa tham gia)
Tuy nhiên, nếu lập trình thì vô tư
---------------------------------
Giống vầy đúng không:
Chẳng có gì là không được cả
Có điều tác giả gửi bài vào box HÀM VÀ CÔNG THỨC, chứng tỏ muốn giải quyết bài toàn bằng các công cụ có sẵn ---> Vậy thì không được là cái chắc rồi (nên tôi chưa tham gia)
Tuy nhiên, nếu lập trình thì vô tư
---------------------------------
Giống vầy đúng không:
Thôi thì cứ đưa file (của bài này) lên đây! Bạn tự mình tùy biến nhé (các Shape nằm ở sheet2)
Lưu ý:
- Code nằm tại Module1, Module2 và Sheet1
- Phần code tại Module1 bạn không cần quan tâm, chỉ cần biết xài là được (hàm PictureFromObject)
- Bạn chỉ cần quan tâm phần code ở sheet2 + Module2 ---> Tùy biến nó cho phù hợp với dữ liệu của mình nhé
Thôi thì cứ đưa file (của bài này) lên đây! Bạn tự mình tùy biến nhé (các Shape nằm ở sheet2)
Lưu ý:
- Code nằm tại Module1, Module2 và Sheet1
- Phần code tại Module1 bạn không cần quan tâm, chỉ cần biết xài là được (hàm PictureFromObject)
- Bạn chỉ cần quan tâm phần code ở sheet2 + Module2 ---> Tùy biến nó cho phù hợp với dữ liệu của mình nhé
Tôi thấy hơi lạ: File của tôi nhưng khi bạn download về sao lại có tên là Xl0000...3.xls nhỉ?
Trong khi file của tôi rõ ràng tên là ImageCombo, đuôi file là XLSM đàng hoàng
Tôi thấy hơi lạ: File của tôi nhưng khi bạn download về sao lại có tên là Xl0000...3.xls nhỉ?
Trong khi file của tôi rõ ràng tên là ImageCombo, đuôi file là XLSM đàng hoàng
Việc dùng phiên bản nào là do ý thích của cá nhân, khả năng của máy tính, túi tiền - không ai ép buộc ai cả,
lỗi mà bạn nêu ở đây là do tại BQT không chú ý cho phep các Thành viên tự ghi và cung cấp thông tin đang dùng Version excel nào tiện cho ng trợ giúp (thường các diễn đàn khác cho thành viên ghi chú phiên bản - giống như ghi chú NƠI CƯ NGỤ).
Chào Thấy !
Em tải file cua thầy về rồi e mở ra có nút rải xuống mà không có hình dạng thanh thép gì hết chỉ khoản trắng không àh
chon ô màu vang nó hiện ImageCombo21 nhấn nút rải xuống nó hiện khoản trắng ạ
Em mở các File khác thì bình thường
Thông báo trên em cũng đã từng gặp rồi
không biết có phải do lỗi ở phiên bản Excel 64bit và 32 bit không?
Thầy đang dùng Excel gì vậy? 2010, 2007.. bản bao nhiêu bit ạ
Em mở các File khác thì bình thường
Thông báo trên em cũng đã từng gặp rồi
không biết có phải do lỗi ở phiên bản Excel 64bit và 32 bit không?
Thầy đang dùng Excel gì vậy? 2010, 2007.. bản bao nhiêu bit ạ
Em đang có ý định Ứng dụng code của thầy nhưng VBA vẫn còn kém đọc thay đổi một số nội dung nhưng chưa được
1. Em muốn hình vẽ sau khi chọn ở List thì nó được căn vào giữa ô theo chiều dọc và chiều ngang
cái dòng .Top = Target.Top: .Left = Target.Left
Em cho thay đổi thành .Mid
nhưng không được
2. Hiện tại sheet2 có 3 hình Em muốn thêm hình vào Sheet 2 thì phải sửa dòng nào ạ
Em đang có ý định Ứng dụng code của thầy nhưng VBA vẫn còn kém đọc thay đổi một số nội dung nhưng chưa được
1. Em muốn hình vẽ sau khi chọn ở List thì nó được căn vào giữa ô theo chiều dọc và chiều ngang
cái dòng .Top = Target.Top: .Left = Target.Left
Em cho thay đổi thành .Mid
nhưng không được
Private Sub ImageCombo1_Click()
Dim strName As String
On Error Resume Next
Shapes(ActiveCell.Address).Delete
strName = Me.ImageCombo1.SelectedItem.Key
Sheet2.Shapes(strName).Copy
ActiveCell.PasteSpecial
[COLOR=#ff0000] [B]Selection[/B][/COLOR].Name = ActiveCell.Address
ActiveCell.Select
End Sub
Cái thằng Selection chính là hình vẽ đã được gán xuống sheet đấy
Từ đây, muốn canh thế nào thì cứ lôi đầu em Selection ra mà "mần"
Chẳng hạn Selection.Top = ??? : Selection.Left = ??? vân vân... nhưng hổng có cái vụ .Mid đâu nha
====================
Cái thằng Selection chính là hình vẽ đã được gán xuống sheet đấy
Từ đây, muốn canh thế nào thì cứ lôi đầu em Selection ra mà "mần"
Chẳng hạn Selection.Top = ??? : Selection.Left = ??? vân vân... nhưng hổng có cái vụ .Mid đâu nha
Không biết bạn có tự tính ra được không nhỉ? Chỉ là phép toán cộng trừ nhân chia thôi
Selection.Left = ActiveCell.Left + (ActiveCell.Width - Selection.Width) / 2
Selection.Top = ActiveCell.Top + (ActiveCell.Height - Selection.Height) / 2
Toàn bộ code sửa lại thành:
Mã:
Private Sub ImageCombo1_Click()
Dim strName As String, pic As Picture
On Error Resume Next
Shapes(ActiveCell.Address).Delete
strName = Me.ImageCombo1.SelectedItem.Key
Sheet2.Shapes(strName).Copy
ActiveCell.PasteSpecial
[COLOR=#ff0000]Set pic = Selection
pic.Left = ActiveCell.Left + (ActiveCell.Width - pic.Width) / 2
pic.Top = ActiveCell.Top + (ActiveCell.Height - pic.Height) / 2
pic.Name = ActiveCell.Address[/COLOR]
ActiveCell.Select
End Sub
Không biết bạn có tự tính ra được không nhỉ? Chỉ là phép toán cộng trừ nhân chia thôi
Selection.Left = ActiveCell.Left + (ActiveCell.Width - Selection.Width) / 2
Selection.Top = ActiveCell.Top + (ActiveCell.Height - Selection.Height) / 2
Toàn bộ code sửa lại thành:
Mã:
Private Sub ImageCombo1_Click()
Dim strName As String, pic As Picture
On Error Resume Next
Shapes(ActiveCell.Address).Delete
strName = Me.ImageCombo1.SelectedItem.Key
Sheet2.Shapes(strName).Copy
ActiveCell.PasteSpecial
[COLOR=#ff0000]Set pic = Selection
pic.Left = ActiveCell.Left + (ActiveCell.Width - pic.Width) / 2
pic.Top = ActiveCell.Top + (ActiveCell.Height - pic.Height) / 2
pic.Name = ActiveCell.Address[/COLOR]
ActiveCell.Select
End Sub
Đúng là Im chiu chiu
cộng trừ nhân chia trong bảng tính thì em còn nghĩ được trong Vba thì khó thật
thầy không chỉ thì em ngồi vò đầu đến ngày mai cũng chưa ra được
đọc đến đây thì em đã hiểu pic.Left = ActiveCell.Left + (ActiveCell.Width - pic.Width) / 2
pic.Top = ActiveCell.Top + (ActiveCell.Height - pic.Height) / 2
thay ơi cho e hỏi lam cách nào mình tùy biến cac shape nằm ở sheet2 được thầy , và làm cách nào tạo thêm các [h=2]Dropdown list cho các ô khác vậy thầy[/h]
Bạn để ý khi nhấn Alt + F11 => vào cửa sổ VBA
Kích vào Sheet 1 có đoạn Code
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next If Not Intersect(Range("B5:B15"), Target) Is Nothing Then
If Target.Count = 1 Then
With Me.ImageCombo1
.Visible = True
.Enabled = True
.Top = Target.Top: .Left = Target.Left
.Width = Target.Width: .Height = Target.Height
End With
End If
Else
Me.ImageCombo1.Enabled = False
Me.ImageCombo1.Visible = False
AppActivate ThisWorkbook.Name
End If
End Sub
tạo thêm đến địa chỉ B bao nhiêu thì bạn chỉ cần thay đổi cái dòng màu đỏ đấy thôi
Thêm hình vào sheet2 thì cứ vẽ bình thường nhớ là hình nhiều nét thì phải Group vào nhé hay Copy hình vào bình thường sau đó nhấn Alt+F8 kích đúp Autpen để cập nhật thêm hình
Thêm hình vào sheet2 thì cứ vẽ bình thường nhớ là hình nhiều nét thì phải Group vào nhé hay Copy hình vào bình thường sau đó nhấn Alt+F8 kích đúp Autpen để cập nhật thêm hình
Làm bằng tay thì làm thế, tuy nhiên ta vẫn có thể tự động hóa (khỏi cần phải chạy Autpen). Chẳng hạn dùng sự kiện Worksheet_Deactivate cho Sheet2 thế này:
Mã:
Private Sub Worksheet_Deactivate()
Auto_Open
End Sub
Điều này có nghĩa là:
- Mỗi lần muốn thêm hình, bắt buộc ta phải vào sheet 2
- Vậy sau khi thêm hình xong, ta di chuyển sang sheet khác thì lập tức sự kiện Worksheet_Deactivate được kích hoạt và chạy Sub Autpen
Bạn tự mình tìm hiểu xem
Có thể bạn chưa đọc bài #26 và bài #27
Bạn đọc thử xem nhé
E chưa hiểu công dụng của đoạn Code này thầy ạ
Sub Auto_Close()
Set img = Nothing
End Sub
Chạy nó chưa thấy gì thay đổi em nghĩ thầy định viết thêm đoạn gì đó để đóng cái data list
Em có ứng dụng Code của thầy vào thống kê thép rồi
nhưng Cái Tam giác : Data list hình ấy nhạy cảm quá khi gửi File cho bên dưới công trường kiểm soát lại File thì nhìn thấy chọn được hình sướng quá chọn luôn hình khác thay thế do họ tò mò thấy lạ nên cứ nghịch
Thầy có thể viết thêm một đoạn để khi chạy Code thì data list không chọn được nữa (không thay đổi hình đã chọn)
và khi chạy lại Code thì lại cho Data list thay đổi được
khi protect sheet thì Data list kia sẽ không cho thay đổi nhưng em không muốn protect sheet
Đối với biến Object thì sau khi xong việc người ta thường có động tác "giải phóng tài nguyên"
Đương nhiên bạn không nhìn thấy nó có tác dụng gì rồi nhưng mà.. anh Bill thấy
Ẹc... Ẹc...
Đoạn code của thầy DU hay quá nhưng mình không hiểu sao ở sheet 1 cai ô chọn hình nhỏ xíu àh mình không con thây hình nữa mà thấy chữ không àh chon đại nó ra hình , bạn giúp minh lam cach nào để thấy rõ đuoc hình không
Vâng nó gần như vậy thầy ạ
khi em thống kê song đóng gói gửi File cho người khác kiểm tra thì muốn giải phóng cái Tam giác kia để người ta không chọn được hình khác hình em đã chọn, muốn chọn được hình khác thì phải chạy một đoạn code Open
Còn khi chưa đóng gói (chưa chạy code Close thì vẫn thay đổi được)
ngoài cách Protect sheet vùng có hình ra còn một cách khác là em lưu về dạng xlsx để không còn tí gì về VBA thì người khác cũng không chọn được nhưng như thế thì Ác quá, khi họ bắt em sửa tiếp thì coi như lại phải copy code lại
Có khi nào giải phóng được cái tam giác ấy thì dung lượng File sẽ giảm đi và chạy nhanh hơn
Em thấy lưu ở dạng xlsx dung lượng bằng 1/2 lưu ở dạng xlsm
Đoạn code của thầy DU hay quá nhưng mình không hiểu sao ở sheet 1 cai ô chọn hình nhỏ xíu àh mình không con thây hình nữa mà thấy chữ không àh chon đại nó ra hình , bạn giúp minh lam cach nào để thấy rõ đuoc hình không
Bạn sang cái Sheet 2 Sheet có hình thư viện kéo rộng cột hình này ra điều chỉnh cho hình bên sheet này rộng ra,
Cái chữ đặt tên của bạn có thể dài quá đặt tên lại cho nó ngắn
Kích chọn vào hình cần đổi tên\đưa chuột lên Box hiện địa chỉ ô gần chỗ thanh công thức gõ tên mới , gõ tên ngắn thôi nhé
Vâng nó gần như vậy thầy ạ
khi em thống kê song đóng gói gửi File cho người khác kiểm tra thì muốn giải phóng cái Tam giác kia để người ta không chọn được hình khác hình em đã chọn, muốn chọn được hình khác thì phải chạy một đoạn code Open
Còn khi chưa đóng gói (chưa chạy code Close thì vẫn thay đổi được)
ngoài cách Protect sheet vùng có hình ra còn một cách khác là em lưu về dạng xlsx để không còn tí gì về VBA thì người khác cũng không chọn được nhưng như thế thì Ác quá, khi họ bắt em sửa tiếp thì coi như lại phải copy code lại
Có khi nào giải phóng được cái tam giác ấy thì dung lượng File sẽ giảm đi và chạy nhanh hơn
Em thấy lưu ở dạng xlsx dung lượng bằng 1/2 lưu ở dạng xlsm
Thì cũng dễ thôi. Bạn có thể dùng 1 cell nào đó trên sheet để "đánh dấu" cho phép ImageCombox hoạt động hoặc không
Ví dụ tôi dùng cell M1 để đánh dấu: Nếu gõ số 1 vào cell M1 thì ImageCombox sẽ được phép hoạt động và ngược lại
Code sẽ được sửa lại như sau:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Range("M1").Value = 1 Then
[COLOR=#ff0000][SIZE=4] 'Đoạn code cũ[/SIZE][/COLOR]
Else
Me.ImageCombo1.Enabled = False
Me.ImageCombo1.Visible = False
AppActivate ThisWorkbook.Name
End If
End Sub
Từ bây giờ, khi bạn muốn chèn hình thì gõ số 1 vào cell M1 rồi làm việc bình thường. Xong việc, xóa số 1 ở cell M1 thì mọi thứ liên quan đến ImageCombo lập tức mất tác dụng
Có thể thay cell M1 thành cell nào tùy bạn (mút chỉ tận IV1 cũng được ---> Chỉ mình bạn biết)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Range("M1").Value = 1 Then If Not Intersect(Range("B5:B23"), Target) Is Nothing Then
If Target.Count = 1 Then
With Me.ImageCombo1
.Visible = True
.Enabled = True
.Top = Target.Top: .Left = Target.Left
.Width = Target.Width: .Height = Target.Height
End With
End If
Else
Me.ImageCombo1.Enabled = False
Me.ImageCombo1.Visible = False
AppActivate ThisWorkbook.Name
End If
Else
Me.ImageCombo1.Enabled = False
Me.ImageCombo1.Visible = False
AppActivate ThisWorkbook.Name
End If
End Sub
Đoạn code cũ là đoạn màu đỏ trên thầy nhỉ
Em thấy đoạn này
Else
Me.ImageCombo1.Enabled = False
Me.ImageCombo1.Visible = False
AppActivate ThisWorkbook.Name
End If
được lặp lại 2 lần Em đang định sóa bớt 1 đoạn theo kiểu nhìn thấy số ∞ thì dựng đứng thành 8
Em thấy đoạn này
Else
Me.ImageCombo1.Enabled = False
Me.ImageCombo1.Visible = False
AppActivate ThisWorkbook.Name
End If
được lặp lại 2 lần Em đang định sóa bớt 1 đoạn theo kiểu nhìn thấy số ∞ thì dựng đứng thành 8
Hiếu ơi cho mình hỏi mình insert thêm một sheet nữa gọi là sheet 3 mình copy đoạn code sheet 1 past vào sheet 3 để sử dụng nó báo lỗi như sau :
Option ExplicitPrivate Sub ImageCombo1_Click()
Dim strName As String, pic As Picture
On Error Resume Next
Shapes(ActiveCell.Address).Delete
strName = Me.ImageCombo1.SelectedItem.Key
Sheet2.Shapes(strName).Copy
ActiveCell.PasteSpecial
Set pic = Selection
pic.Left = ActiveCell.Left + (ActiveCell.Width - pic.Width) / 2
pic.Top = ActiveCell.Top + (ActiveCell.Height - pic.Height) / 2
pic.Name = ActiveCell.Address
ActiveCell.Select
End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Range("C9:C250"), Target) Is Nothing Then
If Target.Count = 1 Then
With Me.ImageCombo1
.Visible = True
.Top = Target.Top: .Left = Target.Left
.Center = Target.Width: .Height = Target.Height
End With
End If
Else
Me.ImageCombo1.Visible = False
End If
End Sub
các chữ màu đỏ là nó báo lỗi và nó hiện bản thông báo (Compile method or data member not found)vậy mình xử lý sao vậy hiếu
Hiếu ơi cho mình hỏi đoạn code này bạn bỏ vào xài đươc không vậy sao mình past vô xài không được nó báo lỗi Block If Without End IF day là nguyên bản đoạn code mình past vào
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Range("S1").Value = 1 Then
If Not Intersect(Range("C9:C250"), Target) Is Nothing Then
If Target.Count = 1 Then
With Me.ImageCombo1
.Visible = True
.Enabled = True
.Top = Target.Top: .Left = Target.Left
.Width = Target.Width: .Height = Target.Height
End With
End If
Else
Me.ImageCombo1.Enabled = False
Me.ImageCombo1.Visible = False
AppActivate ThisWorkbook.Name
End If
End Sub
Hiếu ơi cho mình hỏi đoạn code này bạn bỏ vào xài đươc không vậy sao mình past vô xài không được nó báo lỗi Block If Without End IF day là nguyên bản đoạn code mình past vào
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Range("S1").Value = 1 Then
If Not Intersect(Range("C9:C250"), Target) Is Nothing Then
If Target.Count = 1 Then
With Me.ImageCombo1
.Visible = True
.Enabled = True
.Top = Target.Top: .Left = Target.Left
.Width = Target.Width: .Height = Target.Height
End With
End If
Else
Me.ImageCombo1.Enabled = False
Me.ImageCombo1.Visible = False
AppActivate ThisWorkbook.Name
End If
End Sub