[hoi] Tạo các textbox và Label tự động bằng lệnh trên UserForm trong VBA (1 người xem)

  • Thread starter Thread starter vsxmm
  • Ngày gửi Ngày gửi
Liên hệ QC

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

vsxmm

Thành viên mới
Tham gia
22/10/11
Bài viết
31
Được thích
1
Nhờ anh chị em giúp với.
Lúc trước mình nhớ có câu lệnh tạo tự động các Textbox/ Label tự động khi Form mở lên nhưng câu lện đó giờ mình không nhớ được. Xin anh chị câu lệnh là gì vậy? Có thể giúp mình câu lệnh là gì với. (Không phải vào vẽ trực tiếp bằng tay vì mình cần rất nhiều textbox/label và số lượng không biết trước).
Xin cảm ơn anh chị em nhiều
 
Nhờ anh chị em giúp với.
Lúc trước mình nhớ có câu lệnh tạo tự động các Textbox/ Label tự động khi Form mở lên nhưng câu lện đó giờ mình không nhớ được. Xin anh chị câu lệnh là gì vậy? Có thể giúp mình câu lệnh là gì với. (Không phải vào vẽ trực tiếp bằng tay vì mình cần rất nhiều textbox/label và số lượng không biết trước).
Xin cảm ơn anh chị em nhiều
Dùng thử code này để tạo Label trên form
Mã:
Private Sub GPE()
 Dim cCntrl As Control, i As Integer
    For i = 1 To 3
    Set cCntrl = Me.Controls.Add("Forms.Label.1", "MyLabel" & i, True)
    With cCntrl
        .Width = 150
        .Height = 25
        .Top = 10 + (i - 1) * 25
        .Left = 10
        .ZOrder (0)
        .Caption = "Nut " & i
    End With
    Set cCntrl = Nothing
    Next i
End Sub
tạo texbox
Mã:
Private Sub GPE()
 Dim cCntrl As Control, i As Integer
    For i = 1 To 3
    Set cCntrl = Me.Controls.Add("Forms.TextBox.1", "MyTextBox" & i, True)
    With cCntrl
        .Width = 150
        .Height = 25
        .Top = 10 + (i - 1) * 25
        .Left = 10
        .ZOrder (0)
     End With
    Set cCntrl = Nothing
    Next i
End Sub
 
Upvote 0
Nhờ anh chị em giúp với.
Lúc trước mình nhớ có câu lệnh tạo tự động các Textbox/ Label tự động khi Form mở lên nhưng câu lện đó giờ mình không nhớ được. Xin anh chị câu lệnh là gì vậy? Có thể giúp mình câu lệnh là gì với. (Không phải vào vẽ trực tiếp bằng tay vì mình cần rất nhiều textbox/label và số lượng không biết trước).
Xin cảm ơn anh chị em nhiều
Chắc bạn muốn tạo DataForm, nếu đúng vậy thì bạn tham khảo File.
Lưu ý:
- Chỉ sử dụng tiêu đề không vượt quá cột AC (có thể bị lỗi)
- Thay đổi bất kỳ tiêu đề tại dòng 2 rồi nhấn nút hoặc xóa bớt số cột không bị ảnh hưởng.
 

File đính kèm

Upvote 0
Bây giờ mình lại gặp một cái khác. Sao đặt tên rồi nhưng minh không gọi được textbox đó.
SAu khi chạy Form lên thì chạy nút Chọn số ngẫu nhiên không được.
Mong anh chị em giúp với. XIn cảm ơn nhiều
 

File đính kèm

Upvote 0
Sau đây là codee bên trong File de
Module SETTING
Option Explicit

'--Phan cai dat cho UserForm UF_Heso
Public Const UI_GAP As Integer = 5
Public Const UI_Top As Integer = 80
Public Const UI_LEFT As Integer = 0
Public Const UI_LINE_HEIGHT As Integer = 16
Public Const UI_FONT_SIZE As Integer = 8


Trong UserForm UF_Heso



Private Sub cmdNumRandom_Click()
With UF_Heso
.txths1.Value = 123
End With
End Sub

Private Sub UserForm_Initialize()
Dim currentTopPos As Long
Dim index, iHeight As Long
Dim cCntrl As Control
Dim demcot As Byte
With UF_Heso
currentTopPos = UI_Top
demcot = 1
For index = 1 To 200
If index Mod 20 = 1 Then
currentTopPos = UI_Top
demcot = demcot + 1
End If
Set cCntrl = Controls.Add("Forms.label.1", "lbhs" & index, True)
With cCntrl
.Left = UI_LEFT + 5 + (demcot - 2) * 80
.Top = currentTopPos
.Width = 35
.Height = UI_LINE_HEIGHT
.Caption = "Hs" & index
.Font.Name = "Times New Roman"
.Font.Size = 11
.Font.Bold = True
End With
Set cCntrl = Nothing

Set cCntrl = Controls.Add("Forms.textbox.1", "txths" & index, True)
With cCntrl
.Left = UI_LEFT + 39 + (demcot - 2) * 80
.Top = currentTopPos
.Width = 32
.Height = UI_LINE_HEIGHT
.Value = .Name
.Font.Name = "Times New Roman"
.Font.Size = UI_FONT_SIZE
.Font.Bold = True
currentTopPos = .Top + .Height + UI_GAP
End With
Set cCntrl = Nothing
Next index
.Caption = "GIA TRI CAC HE SO"
.Font.Size = 12
.Font.Name = "Times New Roman"
.Height = 520
.Width = 900
End With
End Sub








'-----Cac Ham va sub ho tro
Private Function SoNgauNhien(a As Integer, b As Integer) 'Tao so tu nhien tren [a;b]
Dim c As Integer
If a < b Then
SoNgauNhien = Int(Rnd * (b - a) + a)
Else
SoNgauNhien = Int(Rnd * (a - b) + b)
End If
End Function
 
Upvote 0
Bây giờ mình lại gặp một cái khác. Sao đặt tên rồi nhưng minh không gọi được textbox đó.
SAu khi chạy Form lên thì chạy nút Chọn số ngẫu nhiên không được.
Mong anh chị em giúp với. XIn cảm ơn nhiều
Bạn sửa dòng này.
Mã:
.txths1.Value = 123
thành vầy thử xem sao.
Mã:
.Controls("txths1").Value = 123
 
Upvote 0
Hoặc là đặt biến cCntrl là biến Toàn cục của module form
rồi gán trị theo cCntrl
 
Upvote 0
Nhờ anh chị em giúp với.
Lúc trước mình nhớ có câu lệnh tạo tự động các Textbox/ Label tự động khi Form mở lên nhưng câu lện đó giờ mình không nhớ được. Xin anh chị câu lệnh là gì vậy? Có thể giúp mình câu lệnh là gì với. (Không phải vào vẽ trực tiếp bằng tay vì mình cần rất nhiều textbox/label và số lượng không biết trước).
Xin cảm ơn anh chị em nhiều

Để làm vấn đề này một cách triệt để bạn phải học lập trình Class Module. Trong class module bạn wrapping đối tượng được khởi tạo. Bạn có thể học hoặc bắt trước theo loạt bài tôi ví dụ phương pháp này ở đây:
http://www.giaiphapexcel.com/diendan/threads/class-module-kỹ-thuật-tạo-và-wrap-đối-lượng.3868/
 
Upvote 0
Web KT

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

Back
Top Bottom