Găp vấn đề Frame trong VBA

Liên hệ QC

phihndhsp

Thành viên gạo cội
Tham gia
26/12/09
Bài viết
3,363
Được thích
2,485
Giới tính
Nam
Nghề nghiệp
Giáo Viên
Picture1.jpg
tôi muốn thiết kế 1 option chọn lựa một trong nhiều giống như trong VB
nhưng sau khi tôi thiết kế xong và thoát khỏi chế độ design thì nó lại ẩn các option đi, có cách nào khi cho nó chạy thì nó vẫn hiện như dạng thiết kế không? xin cảm ơn
 
View attachment 76850
tôi muốn thiết kế 1 option chọn lựa một trong nhiều giống như trong VB
nhưng sau khi tôi thiết kế xong và thoát khỏi chế độ design thì nó lại ẩn các option đi, có cách nào khi cho nó chạy thì nó vẫn hiện như dạng thiết kế không? xin cảm ơn
Bây giờ bạn kéo các Option button ra ngoài Frame, sau đó kéo thả vào lại trong Frame. Thêm nữa, kiểm tra lại thuộc tính Visible của chúng.
Nếu vẫn không được thì bạn thử làm lại:
- Vẽ Frame trước.
- Vẽ các Option button vào trong Frame.
 
Vẫn không được anh nghĩa phúc, khi thoát khỏi chế độ design thì nó mất những option đi, không giống như trong VB(trong VB vẽ tự do và không bao giờ bị lỗi như vậy)
 
Vẫn không được anh nghĩa phúc, khi thoát khỏi chế độ design thì nó mất những option đi, không giống như trong VB(trong VB vẽ tự do và không bao giờ bị lỗi như vậy)

Chưa hình dung được vấn đề... bạn thử đưa file lên đây xem thế nào nhé
 
Anh xem dùm em nha, sau khi thiết kế xong, em thoát chế độ Design thì những nút option ẩn mất, hôm trước hứa gởi anh kg khô mực mà không thấy anh hồi âm gì nên em về quê rồi, có dịp em gởi anh khô nướng nhậu rai rai
 

File đính kèm

  • Book1.rar
    14 KB · Đọc: 61
Dùng Groupbox và option button của Form controls sẽ không bị tình trạng đó.
 
Lần chỉnh sửa cuối:
Đúng là dùng Form Control hay hơn ActiveX Control (truờng hợp này), lỗi này cũng khó hiểu, giống trường hợp bản Form 2 (hỗ trợ Unicode) của VB6.
 
Anh xem dùm em nha, sau khi thiết kế xong, em thoát chế độ Design thì những nút option ẩn mất, hôm trước hứa gởi anh kg khô mực mà không thấy anh hồi âm gì nên em về quê rồi, có dịp em gởi anh khô nướng nhậu rai rai
Thì ra là vậy!
Nói chung, MS đã thiết kế thì phải có cách xài
Hướng dẫn bạn cách dùng Frame trên Sheet như sau:
1> Vẽ 1 Frame lên sheet
2> Click phải vào Frame, chọn Frame Object\Edit ---> 1 Toolbox sẽ hiện ra
3> Nếu không thấy Toolbox xuất hiện, hãy click phải vào Frame lần nữa và chọn Toolbox
4> Trên cửa sổ Toolbox, chọn OptionButton rồi vẽ vào Frame
5> Thoát chế độ Design Mode
Xong!
Lưu ý: Sau này, nếu muốn xóa OptionButton trên Frame, hãy làm lại bước 2
 

File đính kèm

  • FrameOnSheet.rar
    10.5 KB · Đọc: 97
Lần chỉnh sửa cuối:
dạ em làm được rồi, cảm ơn anh nhiều, chúc anh và gd năm mới vui vẻ
 
Sao Việt code cho các đối tượng không được anh oi
 
A có thể tạo cho em một file mẫu gồm
Combo box, list box, command
Sao em tạo được rồi mà không biết vào chỗ nào để viết code và viết trên class cũng biết cách khai báo và gọi các đối tượng trên frame
Nhờ a giúp em
 
A có thể tạo cho em một file mẫu gồm
Combo box, list box, command
Sao em tạo được rồi mà không biết vào chỗ nào để viết code và viết trên class cũng biết cách khai báo và gọi các đối tượng trên frame
Nhờ a giúp em

Làm cho bạn 1 Frame gồm có: 1 ComboBox, 1 ListBox, 1 TextBox và 1 CommandButton
Toàn bộ code:
Mã:
[COLOR=#ff0000]Public WithEvents cboBox As MSForms.ComboBox
Public WithEvents lstBox As MSForms.ListBox
Public WithEvents cmdBtt As MSForms.CommandButton
Public WithEvents txtBox As MSForms.TextBox[/COLOR]
[COLOR=#0000cd]Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  If TypeName(cboBox) = "Nothing" Then
    Set cboBox = Sheet1.Frame1.Controls("ComboBox1")
    cboBox.List() = Sheet1.Range("A1:A10").Value
  End If
  If TypeName(lstBox) = "Nothing" Then
    Set lstBox = Sheet1.Frame1.Controls("ListBox1")
    lstBox.List() = Sheet1.Range("A1:A10").Value
  End If
  If TypeName(cmdBtt) = "Nothing" Then
    Set cmdBtt = Sheet1.Frame1.Controls("CommandButton1")
  End If
End Sub[/COLOR]
Private Sub cboBox_Click()
  Sheet1.Frame1.Controls("TextBox1").Text = cboBox.Text
End Sub
Private Sub lstBox_Click()
  Sheet1.Frame1.Controls("TextBox1").Text = lstBox.Text
End Sub
Private Sub cmdBtt_Click()
  MsgBox "Hello!"
End Sub
4 dòng khai báo màu đỏ để khai báo các controls (bắt buộc phải có)
Các dòng code màu xanh dùng sự kiện MouseMove trên Frame để khởi tạo các controls (cũng bắt buộc phải có nhưng có thể dùng các sự kiện khác như Auto_Open, Worksheet_Activate... để khởi tạo)
Các dòng code dưới cùng: Điều khiển sự kiện các control (viết bình thường như trên form)
-------------------
Quy trinh là vậy, bạn có thể tùy biến thêm
 

File đính kèm

  • Controls_On_Frame.xlsm
    23.1 KB · Đọc: 105
Cắm ơn anh, em tạo được rồi, nhưng còn 2 vấn đề em chưa biết viết như thế nào.
- Em muốn chọn cùng lúc nhiều dòng trong list và chọn nút chọn sẽ tự động lấy vào excell những dòng vừa chọn
- Trong combo danh sách có nhiều mã hàng úa em muốn nhập nội dung trên cell hiện tại sẽ tự động lọc các dòng có nọi dung mình muốn tìm@!##
 
Lập một cái class module (WithEvents) attach sự kiện click vào các opt buttons lúc init form
Tuy nhiên, ở đây chỉ có 4 buttons cho nên code sẽ cực hơn code click event cho từng button.
 
View attachment 184385
Xin cho hỏi, tôi có một vấn đề như sau
trong form tôi có 1 frame và các option, tôi muốn chọn option nào thì sẽ hiển thị thông báo option đó
nếu sự kiện thông qua nút command button để click thì không nói gì, còn nếu cài đặt sự kiện cho từng option thì quá cực
có cách nào cài đặt sự kiện trong frame để khi click vào từng option thì hiện ra thông báo như trên không?
xin chân thành cảm ơn
Cũng lại dùng Class thôi. Cách làm như sau:
1> Vào menu Insert, chọn Class Module (để chèn 1 class). Mặc định có tên là "Class1".
Code trong class:
Mã:
Public WithEvents opt As MSForms.OptionButton
Private Sub opt_Click()
  MsgBox opt.Name
End Sub
2> Trong UserForm, bỏ hết code của bạn và chèn code dưới đây vào:
Mã:
Dim obj() As New Class1
Private Sub UserForm_Initialize()
  Dim ctr As Control, n As Long
  For Each ctr In Me.Frame1.Controls
    ReDim Preserve obj(n)
    Set obj(n).opt = ctr
    n = n + 1
  Next
End Sub
Lưu ý chỗ Dim obj() As New Class1 . Nếu trước đó, khi bạn chèn Class rồi đổi tên của nó thành "ABC" gì gì đó thì chỗ này bạn cũng phải sửa "Class1" thành "ABC" tương ứng
 
Ở Đây em muốn lấy giá trị caption của option vào 1 cái biến, và trong từng module muốn xử lý nó như thế nào cũng đươcj, nhưng file này em xử lý biến đó thông qua cái lable thôi, nói chung file này em làm cũng đạt được như ý ban đầu, nhưng em muốn học hỏi thêm. Xin chân thành cảm ơn anh Ndu

Bạn nên chuyển
Mã:
 ReDim Arr_D(1 To UBound(Arr_N, 1))
thành & sau dòng k = k + 1
Mã:
k = k + 1
ReDim Preserve Arr_D(1 To k)
 
mong anh hướng dẫn cách làm việc với các đối tượng trong multipage ở trường hợp này với ạ, thanks

Public WithEvents cboBox As MSForms.ComboBox
Public WithEvents lstBox As MSForms.ListBox
Public WithEvents cmdBtt As MSForms.CommandButton
Public WithEvents txtBox As MSForms.TextBox

Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If TypeName(cboBox) = "Nothing" Then
Set cboBox = Sheet1.Frame1.Controls("ComboBox1")
cboBox.List() = Sheet1.Range("A1:A10").Value
End If
If TypeName(lstBox) = "Nothing" Then
Set lstBox = Sheet1.Frame1.Controls("ListBox1")
lstBox.List() = Sheet1.Range("A1:A10").Value
End If
If TypeName(cmdBtt) = "Nothing" Then
Set cmdBtt = Sheet1.Frame1.Controls("CommandButton1")
End If
End Sub

Private Sub cboBox_Click()
Sheet1.Frame1.Controls("TextBox1").Text = cboBox.Text
End Sub
Private Sub lstBox_Click()
Sheet1.Frame1.Controls("TextBox1").Text = lstBox.Text
End Sub
Private Sub cmdBtt_Click()
MsgBox "Hello!"
End Sub
 
mong anh hướng dẫn cách làm việc với các đối tượng trong multipage ở trường hợp này với ạ, thanks

Public WithEvents cboBox As MSForms.ComboBox
Public WithEvents lstBox As MSForms.ListBox
Public WithEvents cmdBtt As MSForms.CommandButton
Public WithEvents txtBox As MSForms.TextBox

Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If TypeName(cboBox) = "Nothing" Then
Set cboBox = Sheet1.Frame1.Controls("ComboBox1")
cboBox.List() = Sheet1.Range("A1:A10").Value
End If
If TypeName(lstBox) = "Nothing" Then
Set lstBox = Sheet1.Frame1.Controls("ListBox1")
lstBox.List() = Sheet1.Range("A1:A10").Value
End If
If TypeName(cmdBtt) = "Nothing" Then
Set cmdBtt = Sheet1.Frame1.Controls("CommandButton1")
End If
End Sub

Private Sub cboBox_Click()
Sheet1.Frame1.Controls("TextBox1").Text = cboBox.Text
End Sub
Private Sub lstBox_Click()
Sheet1.Frame1.Controls("TextBox1").Text = lstBox.Text
End Sub
Private Sub cmdBtt_Click()
MsgBox "Hello!"
End Sub
Hổng có file lấy gì mà kiểm tra đây bạn?
 
Làm cho bạn 1 Frame gồm có: 1 ComboBox, 1 ListBox, 1 TextBox và 1 CommandButton
Toàn bộ code:
Mã:
[COLOR=#ff0000]Public WithEvents cboBox As MSForms.ComboBox
Public WithEvents lstBox As MSForms.ListBox
Public WithEvents cmdBtt As MSForms.CommandButton
Public WithEvents txtBox As MSForms.TextBox[/COLOR]
[COLOR=#0000cd]Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  If TypeName(cboBox) = "Nothing" Then
    Set cboBox = Sheet1.Frame1.Controls("ComboBox1")
    cboBox.List() = Sheet1.Range("A1:A10").Value
  End If
  If TypeName(lstBox) = "Nothing" Then
    Set lstBox = Sheet1.Frame1.Controls("ListBox1")
    lstBox.List() = Sheet1.Range("A1:A10").Value
  End If
  If TypeName(cmdBtt) = "Nothing" Then
    Set cmdBtt = Sheet1.Frame1.Controls("CommandButton1")
  End If
End Sub[/COLOR]
Private Sub cboBox_Click()
  Sheet1.Frame1.Controls("TextBox1").Text = cboBox.Text
End Sub
Private Sub lstBox_Click()
  Sheet1.Frame1.Controls("TextBox1").Text = lstBox.Text
End Sub
Private Sub cmdBtt_Click()
  MsgBox "Hello!"
End Sub
4 dòng khai báo màu đỏ để khai báo các controls (bắt buộc phải có)
Các dòng code màu xanh dùng sự kiện MouseMove trên Frame để khởi tạo các controls (cũng bắt buộc phải có nhưng có thể dùng các sự kiện khác như Auto_Open, Worksheet_Activate... để khởi tạo)
Các dòng code dưới cùng: Điều khiển sự kiện các control (viết bình thường như trên form)
-------------------
Quy trinh là vậy, bạn có thể tùy biến thêm
dạ em copy nguyên trả lời của anh ở page1 ạ, giờ e muốn làm việc thêm với cái multipage mà chưa biết làm thế nào, google vẫn chưa ra ạ, mong anh giúp đỡ, thanks
 

File đính kèm

  • Controls_On_Frame.xlsm
    28.8 KB · Đọc: 14
Web KT
Back
Top Bottom