Click vào mỗi MultiPage thì Textbox sẽ thay đổi dòng chữ

Liên hệ QC

anhtotbung35

Thành viên hoạt động
Tham gia
16/2/09
Bài viết
149
Được thích
26
Nghề nghiệp
Kế toán
Em tạo một Form, trong form có tạo một MultiPage (gồm 2 trang). Cho em hỏi làm thế nào để mỗi khi Click vào mỗi MultiPage thì dòng Textbox trên Form sẽ thay đổi theo nội dung của mình. Và cho em hỏi thêm, tên của MultiPage viết tiếng việt được không.
 

File đính kèm

Em tạo một Form, trong form có tạo một MultiPage (gồm 2 trang). Cho em hỏi làm thế nào để mỗi khi Click vào mỗi MultiPage thì dòng Textbox trên Form sẽ thay đổi theo nội dung của mình. Và cho em hỏi thêm, tên của MultiPage viết tiếng việt được không.

Ví dụ có 2 tab thì bạn dùng code sau :

Mã:
Private Sub MultiPage1_Change()

If Me.MultiPage1.Value = 0 Then
TextBox11 = "BAO CAO TONG HOP"
Else
TextBox11 = "BAO CAO CHI TIET"
End If


End Sub
 
Upvote 0
Em tạo một Form, trong form có tạo một MultiPage (gồm 2 trang). Cho em hỏi làm thế nào để mỗi khi Click vào mỗi MultiPage thì dòng Textbox trên Form sẽ thay đổi theo nội dung của mình. Và cho em hỏi thêm, tên của MultiPage viết tiếng việt được không.
Đương nhiên là được
Code ví dụ:
PHP:
Private Sub UserForm_Initialize()
  With Me.MultiPage1
    .Pages("THCN").Caption = "T" & ChrW(7893) & "ng H" & ChrW(7907) & "p"
    .Pages("CTCN").Caption = "Chi Ti" & ChrW(7871) & "t"
  End With
End Sub
PHP:
Private Sub MultiPage1_Change()
  TextBox11 = MultiPage1.SelectedItem.Caption
End Sub
----------------------------------
Ví dụ có 2 tab thì bạn dùng code sau :
]
Nếu có 20 tab thì... sao đây? Ẹc... Ẹc...
 

File đính kèm

Upvote 0
Ví dụ có 2 tab thì bạn dùng code sau :

Mã:
Private Sub MultiPage1_Change()

If Me.MultiPage1.Value = 0 Then
TextBox11 = "BAO CAO TONG HOP"
Else
TextBox11 = "BAO CAO CHI TIET"
End If


End Sub
Cho em hỏi thêm, nếu có nhiều hơn 2 Tab thì phải như thế nào vậy anh Ndu
 
Upvote 0
T­hử tham khảo cách của mình xem (2 trong 1 nhé)
 

File đính kèm

Upvote 0
T­hử tham khảo cách của mình xem (2 trong 1 nhé)
Cho mình hỏi thêm, khi mình vừa mở Form lên thì ở ô textbox không hiện gì hết. Chỉ khi nào click qua lại giữa các trang thì textbox mới xuất hiện. Cho mình hỏi, phải hoàn thiện như thế nào, khi load form là mặc định trang cần đến và chữ ở textbox cũng hiện ra luôn.
 
Upvote 0
Bạn thêm 1 đoạn code sau

Mã:
Private Sub UserForm_Initialize()
TBao Me.MultiPage1.TabIndex
End Sub
 

File đính kèm

Upvote 0
Nhân nói về MultiPage, đố các bạn biết làm cách nào để khi tôi đang Active 1 page nào đó rồi thoát Form thì lần sau gọi Form lên nó sẽ Active đúng Page ấy
Và thêm nữa: Cái vụ "nhớ" này phải có tác dụng ngay cả khi đóng file rồi mở trở lại (không dùng Define name và cell trên sheet để "nhớ")
Ẹc... Ẹc...
(Hic.. câu hỏi này lý ra phải cho vào mục Đố vui về VBA mới đúng chứ nhỉ?)
 
Lần chỉnh sửa cuối:
Upvote 0
Private Sub MultiPage1_Change()
TextBox11 = MultiPage1.SelectedItem.Caption
End Sub[/PHP]----------------------------------
Kính gửi anh NDU và mọi người
Em có một thắc mắc sau muốn nhờ anh giải đáp.
Nếu em đặt tên sheet theo tên của tab: Ví dụ Sheet ABC, BCD, EFG tương ứng trong tab (ở đây em dùng TabStrip) cũng có các tab tên ABC, BCD, EFG. Trong mỗi sheet ABC, BCD, EFG vùng cần đưa listbox đều từ ô A4: đến ô cuối cùng có dữ liệu;
(TabStrip có tên là TabStrip1, Listbox có tên là Lisbox1 )
Em dùng code của anh NDU để lấy tên tab:
PHP:
Dim NameTab As String
NameTab = TabStrip1.SelectedItem.Caption
Và dùng code của anh Sealand để lấy Index của TabStrip đang active:
PHP:
Dim i as integer
i = TabStrip1..SelectedItem.Index
Vậy trong sự kiệnUserForm_Initialize em khai báo như thế nào để ứng với từng Tabindex i và có tên là NameTab, lisbox1 sẽ tự động lấy dữ liệu trong sheet có tên là NameTab với vùng dữ liệu được khai báo tại biến vung.
Em khai báo như thế này nhưng bị lỗi, không biết phải xử thế nào cho đúng:
PHP:
Private Sub UserForm_Initialize
Dim NameTab As String
Dim i As Integer
NameTab = TabStrip1.SelectedItem.Caption
i = Me.TabStrip1.SelectedItem.Index 
Dim Vung as Range
Set vung = Range("C4:E" & Range("C65536").End(xlDown).Row)      '- Sheet nào cũng có vùng giống nhau
IF Me.TabStrip1.Value = i Then
  Lisbox1.RowSource = "NameTab!" & vung.Address
End if
End Sub
Báo lỗi dòng : "Lisbox1.RowSource = "NameTab!" & vung.Address "
Nhờ anh NDU và mọi người góp ý
Trân trọng cảm ơn.
Mong nhận được hồi đáp
 
Lần chỉnh sửa cuối:
Upvote 0
Thử lấy Address:

Lisbox1.RowSource = NameTab & "!" & vung.Address
 
Upvote 0
Thử lấy Address:

Lisbox1.RowSource = NameTab & "!" & vung.Address
Cảm ơn anh ptm0412.
Em sửa address lại thì đúng là không báo lỗi, nhưng khi run form thì listbox không hiện ra theo ý mình (Đã chọn tab khác nhunglistbox vẫn không thay đổi).
Gửi lên nhờ anh xem thử. Không biết em có viết nhầm chỗ nào không.
Thân.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Sự kiện Form_Initialize chỉ chạy 1 lần khi mở form.
Muốn làm gì đó khi thay đổi tab thì phải gắn vào sự kiện TabStrip1_Change:
PHP:
Private Sub TabStrip1_Change()
    Dim NameTab As String
    Dim Vung As Range
    NameTab = TabStrip1.SelectedItem.Caption
    Set Vung = Sheets(NameTab).Range("A4:C" & Range("A65536").End(xlDown).Row)
    ListBox1.RowSource = NameTab & "!" & Vung.Address
End Sub

Còn Sự kiện Form_Initialize dùng khi mở form, để muốn mặc định tab nào đó được chọn, thì dùng code chọn:

PHP:
Private Sub UserForm_Initialize()
       Dim NameTab As String
       Dim Vung As Range
       Me.TabStrip1.Value = 0
       NameTab = TabStrip1.SelectedItem.Caption
       Set Vung = Sheets(NameTab).Range("A4:C" & Range("A65536").End(xlDown).Row)
       ListBox1.RowSource = NameTab & "!" & Vung.Address
End Sub
Biến i chả dùng làm gì.
 
Lần chỉnh sửa cuối:
Upvote 0
Sự kiện Form_Initialize chỉ chạy 1 lần khi mở form.
Muốn làm gì đó khi thay đổi tab thì phải gắn vào sự kiện TabStrip1_Change:
PHP:
Private Sub TabStrip1_Change()
    Dim NameTab As String
    Dim Vung As Range
    NameTab = TabStrip1.SelectedItem.Caption
    Set Vung = Sheets(NameTab).Range("A4:C" & Range("A65536").End(xlDown).Row)
    ListBox1.RowSource = NameTab & "!" & Vung.Address
End Sub
Còn Sự kiện Form_Initialize dùng khi mở form, để muốn mặc định tab nào đó được chọn, thì dùng code chọn:

PHP:
Private Sub UserForm_Initialize()
       Dim NameTab As String
       Dim Vung As Range
       Me.TabStrip1.Value = 0
       NameTab = TabStrip1.SelectedItem.Caption
       Set Vung = Sheets(NameTab).Range("A4:C" & Range("A65536").End(xlDown).Row)
       ListBox1.RowSource = NameTab & "!" & Vung.Address
End Sub
Biến i chả dùng làm gì.
Cảm ơn anh ptm0412
Đúng là càng tìm hiểu càng thấy mình ngu đi.
Lại cho em hỏi thêm về vấn đề này. Có cách nào để làm cho Caption của TabStrip tự động thay đổi theo tên sheet không?
Ý em là mặt dù thay đổi tên sheet thì caption của Tabscrip sẽ tự động thay đổi theo cái tên của Sheet đó. Như vậy dù cho người dung thay đổi tên sheet thế nào, thi Userform vẫn hoạt động. (Em lấy cái ví dụ Sheet2= DG1776)
PHP:
With Me.TabStrip1
  .SelectedItem.Caption = Sheets(2).Name
End with
Em chưa hiểu phải ghi cú pháp như thế nào để đúng nữa anh.
Anh xem giúp nhé.
Cảm ơn anh.
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm vào đầu code intialize:

PHP:
Private Sub UserForm_Initialize()
With Me.TabStrip1
    .Tabs(0).Caption = Sheet2.Name
    .Tabs(1).Caption = Sheet5.Name
End With
.....
 
Upvote 0
Cảm ơn anh ptm0412
Đúng là càng tìm hiểu càng thấy mình ngu đi.
Lại cho em hỏi thêm về vấn đề này. Có cách nào để làm cho Caption của TabStrip tự động thay đổi theo tên sheet không?
Ý em là mặt dù thay đổi tên sheet thì caption của Tabscrip sẽ tự động thay đổi theo cái tên của Sheet đó. Như vậy dù cho người dung thay đổi tên sheet thế nào, thi Userform vẫn hoạt động. (Em lấy cái ví dụ Sheet2= DG1776)
PHP:
With Me.TabStrip1
  .SelectedItem.Caption = Sheets(2).Name
End with
Em chưa hiểu phải ghi cú pháp như thế nào để đúng nữa anh.
Anh xem giúp nhé.
Cảm ơn anh.
Khi form khởi động, ta for từ 1 đến tổng số tab, gán tên sheet thứ i vào Caption của tab thứ i - 1
Vậy thôi
 
Upvote 0
1. Nếu có 2 tab, có thể dùng sheet Code Name gán trực tiếp như bài #16

2. Nếu có 3 tab trở lên ,dùng For như ndu (For i theo tổng số tab). Tuy nhiên cần phải theo quy định là những sheet không cần thiết phải để phía sau. Nếu không i sẽ chạy bậy. Insert thêm sheet cũng phải xác định loại sheet để đặt đúng vị trí.

Có thể dùng For each theo sheets và 1 biến i để đếm tab. Sheet nào có tên (code name) giống với sheet TH chẳng hạn, thì bỏ qua, còn khác thì gán name cho tabs(i).Caption, biến đếm tăng 1. Khi biến đếm lớn hơn Tabs.Count thì thoát. Đây là thủ thuật loại trừ ngược nên cũng có thể sinh ra sai sót nếu như số sheet cần thiết nhiều hơn số tab, hoặc ngược lại. Insert sheet ( loại TH) lại phải khai báo thêm

3. Nếu có nhiều sheet, thì bỏ tabstrip, dùng cách khác. Chứ ngó cái form hàng chục tab thấy ớn lắm.
 
Upvote 0
1. Nếu có 2 tab, có thể dùng sheet Code Name gán trực tiếp như bài #16

2. Nếu có 3 tab trở lên ,dùng For như ndu (For i theo tổng số tab). Tuy nhiên cần phải theo quy định là những sheet không cần thiết phải để phía sau. Nếu không i sẽ chạy bậy. Insert thêm sheet cũng phải xác định loại sheet để đặt đúng vị trí.

Có thể dùng For each theo sheets và 1 biến i để đếm tab. Sheet nào có tên (code name) giống với sheet TH chẳng hạn, thì bỏ qua, còn khác thì gán name cho tabs(i).Caption, biến đếm tăng 1. Khi biến đếm lớn hơn Tabs.Count thì thoát. Đây là thủ thuật loại trừ ngược nên cũng có thể sinh ra sai sót nếu như số sheet cần thiết nhiều hơn số tab, hoặc ngược lại. Insert sheet ( loại TH) lại phải khai báo thêm

3. Nếu có nhiều sheet, thì bỏ tabstrip, dùng cách khác. Chứ ngó cái form hàng chục tab thấy ớn lắm.

NDU96081631 đã viết:
Khi form khởi động, ta for từ 1 đến tổng số tab, gán tên sheet thứ i vào Caption của tab thứ i - 1
Vậy thôi

Cảm ơn đóng góp của anh NDU và Ptm0412
Mình học hỏi được rất nhiều ở các anh.
Xin hỏi NDU. để lấy được tổng số tab có trong TabStrip1 có phải sử dụng dòng này không:
PHP:
    Dim i As Integer
    i = Me.TabStrip1.Tabs.Count
Trân trọng.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhân nói về MultiPage, đố các bạn biết làm cách nào để khi tôi đang Active 1 page nào đó rồi thoát Form thì lần sau gọi Form lên nó sẽ Active đúng Page ấy
Và thêm nữa: Cái vụ "nhớ" này phải có tác dụng ngay cả khi đóng file rồi mở trở lại (không dùng Define name và cell trên sheet để "nhớ")
Ẹc... Ẹc...
(Hic.. câu hỏi này lý ra phải cho vào mục Đố vui về VBA mới đúng chứ nhỉ?)
Thì vậy đúng không:
PHP:
Private Sub UserForm_Initialize()
  With Me.MultiPage1
   .Pages(1).Visible = True
   ...........................
  End With
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom