Có thể tạo ra 1 hàm với đối số là Object hay không? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,958
Giả sử tôi có hàm thế này:
PHP:
Function TestObject(cbo As MSForms.ComboBox)
  TestObject = cbo.ListCount
End Function
Nếu áp dụng hàm này trong code VBA thì không có vấn đề... ví dụ:
PHP:
Sub Test()
  Dim cbo As MSForms.ComboBox
  Set cbo = Sheet1.ComboBox1
  MsgBox TestObject(cbo)
End Sub
Vấn đề là:
- Nếu tôi muốn gõ hàm TestObject trực tiếp trên bảng tính thì sẽ gõ như thế nào?
- Hoặc giả để gõ được hàm TestObject trực tiếp trên bảng tính thì tôi phải sửa lại hàm này thế nào mới hợp lý (đương nhiên đối số vẫn là Object)
----------------------
Hic... vấn đề khó, thí nghiệm tùm lum vẫn không ăn thua
Ai biết xin vui lòng chỉ giúp nhé
 
Không biết có giúp ích gì cho Thầy không, nhưng nếu ta chọn chế độ Design Mode và chọn vào Combobox1, ta sẽ thấy trên thanh công thức có dòng này: =EMBED("Forms.ComboBox.1","")

Nếu ta đặt con trỏ vào đây, xem như combobox này hết tác dụng!
 
Upvote 0
Định làm như vầy:
PHP:
Function TestObject(ByVal sh As String, ByVal cbo As String) As Long
    Dim MySh As Worksheet
    Dim MyCbo As MSForms.ComboBox
    Set MySh = Worksheets(sh)
    Set MyCbo = MySh.Shapes(cbo)
    TestObject = MyCbo.ListCount
End Function

Rồi ghi công thức: =TestObject("Sheet1", "ComboBox1")

Thế nhưng nó cũng điếc luôn ặc ặc!
 
Lần chỉnh sửa cuối:
Upvote 0
Định làm như vầy:
PHP:
Function TestObject(ByVal sh As String, ByVal cbo As String) As Long
    Dim MySh As Worksheet
    Dim MyCbo As MSForms.ComboBox
    Set MySh = Worksheets(sh)
    Set MyCbo = MySh.Shapes(cbo)
    TestObject = MyCbo.ListCount
End Function

Rồi ghi công thức: =TestObject("Sheet1", "ComboBox1")

Thế nhưng nó cũng điếc luôn ặc ặc!
Nếu đối số không phải Object thì tôi làm được, chẳng hạn thế này:
PHP:
Function TestObject(ByVal wksName As String, ByVal cboName As String) As Long
  On Error Resume Next
  TestObject = Worksheets(wksName).OLEObjects(cboName).Object.ListCount
End Function
Vấn đề ở đây là tôi muốn đối số phải là Object cơ
Tại sao dùng trong VBA thì ta gọi được còn trên sheet thì... chẳng biết viết thế nào cả?
 
Upvote 0
Hình như vấn đề ở đây em hỏi trên diễn đàn cũng mấy tháng rồi mà chưa có ai trả lời đó anh ndu, hôm trước em định truyền vào Object kiểu chexkbox mà không được, hy vọng là sẽ có sáng kiến cho câu hỏi này
 
Upvote 0
Hình như vấn đề ở đây em hỏi trên diễn đàn cũng mấy tháng rồi mà chưa có ai trả lời đó anh ndu, hôm trước em định truyền vào Object kiểu chexkbox mà không được, hy vọng là sẽ có sáng kiến cho câu hỏi này
Trước giờ vẫn dùng đối số theo kiểu trung gian (thông qua tên object dạng String chẳng hạn). Nhưng hôm nay hứng chí, định nghiên cứu vấn đề này thì đụng.. TƯỜNG
Ẹc... Ẹc...
 
Upvote 0
Nếu đối số không phải Object thì tôi làm được, chẳng hạn thế này:
PHP:
Function TestObject(ByVal wksName As String, ByVal cboName As String) As Long
  On Error Resume Next
  TestObject = Worksheets(wksName).OLEObjects(cboName).Object.ListCount
End Function
Vấn đề ở đây là tôi muốn đối số phải là Object cơ
Tại sao dùng trong VBA thì ta gọi được còn trên sheet thì... chẳng biết viết thế nào cả?

Theo em biết thì một Object trong sheet thuộc Control Toolbox thì để liên kết với chúng, bằng mọi cách chúng ta phải cho nó đường dẫn là tên sheet, cũng giống như trên form, nếu muốn điều khiển các control ở form khác thì phải gọi được tên của form đó trước.

Như vậy, với hàm kiểm tra dạng này, bắt buộc chúng ta phải có 2 đối số là tên sheet và tên Object trong hàm trên là OK.
 
Upvote 0
Như vậy, với hàm kiểm tra dạng này, bắt buộc chúng ta phải có 2 đối số là tên sheet và tên Object trong hàm trên là OK.
Điều khiển theo tên thì đâu có gì phải bàn
Ở đây tôi muốn truyền đối số là Object cơ
Vấn đề là tại sao với cách truyền như vậy thì trong VBA lại dùng được còn trên sheet thì không? Hay đây là quy định của MS chăng?
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom