Làm sao sử dụng With tên biến

Liên hệ QC

phuoclocvl

Thành viên thường trực
Tham gia
28/3/12
Bài viết
220
Được thích
32
Dạ, Xin chào các anh chị em Diễn đàn,
em có thắc mắc như bên dưới nhưng không biết làm sao. các anh chị giúp em với. em làm như vậy như nó báo lỗi ở With

PHP:
Sub Test()
    Dim Test As String
    Test = "Test"
    With Test
        .......
    End With
End Sub
 
Bạn cần gắn "Test" vào cái gì ?

Bạn thắc mắc bởi vì bạn không chịu đọc kỹ ngữ pháp.
Ngữ pháp của With là:
With <đối tượng>

Test của bạn rõ ràng được khai báo là String (kiểu biến đơn giản) chứ đâu phải Object.

With là lệnh tạo không gian ký danh cho đối tượng. Bên trong khối With, tất cả các hàm và thuộc tính bắt đầu bằng dấu chấm sẽ được VBA gắn đối tượng vào.
 
Upvote 0
Bạn cần gắn "Test" vào cái gì ?

Bạn thắc mắc bởi vì bạn không chịu đọc kỹ ngữ pháp.
Ngữ pháp của With là:
With <đối tượng>

Test của bạn rõ ràng được khai báo là String (kiểu biến đơn giản) chứ đâu phải Object.

With là lệnh tạo không gian ký danh cho đối tượng. Bên trong khối With, tất cả các hàm và thuộc tính bắt đầu bằng dấu chấm sẽ được VBA gắn đối tượng vào.
Vâng cảm ơn anh,
Bạn cần gắn "Test" vào cái gì ?

Bạn thắc mắc bởi vì bạn không chịu đọc kỹ ngữ pháp.
Ngữ pháp của With là:
With <đối tượng>

Test của bạn rõ ràng được khai báo là String (kiểu biến đơn giản) chứ đâu phải Object.

With là lệnh tạo không gian ký danh cho đối tượng. Bên trong khối With, tất cả các hàm và thuộc tính bắt đầu bằng dấu chấm sẽ được VBA gắn đối tượng vào.
Dạ, Cảm ơn Anh,

có cách nào biến nó thành đối tượng không ạ.
Mục đích của em là muốn dùng 1 đoạn mã sử dụng cho các userform ạ.
em có 1 đoạn code lấy tên form khi form đó mở, em muốn dùng with end with để chỉ cần dùng code 1 lần áp dụng cho các form.
Anh có thể xem giúp em không ạ
Cảm ơn Anh,
 

File đính kèm

  • Sample.xlsm
    18.2 KB · Đọc: 5
Upvote 0
PHP:
Option Explicit
Private Sub CommandButton1_Click()    
    With UserForm1
        MsgBox .Name, , "GPE.COM Xin Chào!"        
    End With
End Sub
 
Upvote 0
Hiện tại thì Lay_ten_form sẽ trả về tên của Form mà trên nó có cái nút CommandButton1 kia. Vậy thì code CommandButton1_Click (xét về ý) của bạn tương đương với
Mã:
Private Sub CommandButton1_Click()
    With Me
'     ...
    End With
End Sub

Nếu bạn cố tình dùng cái gọi là Lay_ten_form, vì tôi vẫn không hiểu bạn định làm gì, thì vd.:
Mã:
Public Function () As Object
Dim frm As Object
For Each frm In VBA.UserForms
    If frm.Name <> "" Then
        Set Lay_ten_form = frm
      Exit Function
    End If
Next frm
End Function

Private Sub CommandButton1_Click()
Dim form As Object
    Set form = Lay_ten_form
    With form
'     ...
    End With
End Sub
 
Upvote 0
With có thể sử dụng cho khai báo Type và các lớp Đối tượng
Mã:
Private Type TestType
  Test As String
End Type

Sub a()
  Dim t As TestType
  With t
     .Test = "s"
  End With
  'Tạo class module
  Dim c as New Classmodule
  With c
      '
  End With
End Sub
 
Upvote 0
Đặt code vào một sub và đưa nó vào mô đun chủ (Module1)
Sub LamCaiGiDoTrongForm(theForm As Form)
' code dùng chung cho các form ở đây
code...
With theForm
code... (có liên quan đến form)
End With
code...
End Sub

Cái control thì đặt code như vầy
Private Sub CommandButton1_Click()
LamCaiGiDoTrongForm Me
' hoặc LamCaiGiDoTrongForm CommandButton1.Parent
End Sub
 
Upvote 0
With có thể sử dụng cho khai báo Type và các lớp Đối tượng
Mã:
Private Type TestType
  Test As String
End Type

Sub a()
  Dim t As TestType
  With t
     .Test = "s"
  End With
  'Tạo class module
  Dim c as New Classmodule
  With c
      '
  End With
End Sub
Dạ cảm ơn các anh đã giúp em nhiệt tình à,
em dùng của anh Batman1 là ok rồi.
Xin cảm ơn,
 
Upvote 0
Web KT
Back
Top Bottom