Click vào mỗi MultiPage thì Textbox sẽ thay đổi dòng chữ (1 người xem)

Liên hệ QC

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

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
Thì vậy đúng không:
PHP:
Private Sub UserForm_Initialize()
  With Me.MultiPage1
   .Pages(1).Visible = True
   ...........................
  End With
End Sub
Hổng phải vậy! Dùng GetSetting và SaveSetting anh à! (hình như có lần anh đã hỏi rồi còn gì)
Ẹc... Ẹc...
 
Upvote 0
Dear ptm0412
Theo hướng dẫn của anh em đã làm được cái useform theo ý muốn.
Em tạo một textbox mới để nhập đoạn mã hiệu vào thì nó sẽ tự tìm mã hiệu trong lisbox (dang từ điển)
Đây là code của TextBox1_Change :
PHP:
Private Sub TextBox1_Change()
Dim Cls_tim As String
Dim Shtim_Name As String
Dim Rng_Tim As Range, Rng_Kq As Range

Shtim_Name = TabStrip1.SelectedItem.Caption
Set Rng_Tim = Sheets(Shtim_Name).Range("A4:C" & Range("A65536").End(xlDown).Row)
Cls_tim = TextBox1.Value
TextBox1 = UCase(TextBox1)
If Cls_tim = "" Then Exit Sub
Set Rng_Kq = Rng_Tim.Find(Cls_tim, , xlFormula, xlPart)

If Rng_Kq Is Nothing Then Exit Sub
    ListBox1.RowSource = Shtim_Name & "!" & Rng_Kq.Address
End Sub
Khi chạy thì báo lỗi dòng: "Set Rng_Kq = Rng_Tim.Find(Cls_tim, , xlFormula, xlPart)"
Nhờ anh và AC trên GPE xem giúp.
Trân trọng.
Mong nhận được hồi đáp của AC
 

File đính kèm

Upvote 0
Dear ptm0412
Theo hướng dẫn của anh em đã làm được cái useform theo ý muốn.
Em tạo một textbox mới để nhập đoạn mã hiệu vào thì nó sẽ tự tìm mã hiệu trong lisbox (dang từ điển)
Đây là code của TextBox1_Change :
PHP:
Private Sub TextBox1_Change()
Dim Cls_tim As String
Dim Shtim_Name As String
Dim Rng_Tim As Range, Rng_Kq As Range

Shtim_Name = TabStrip1.SelectedItem.Caption
Set Rng_Tim = Sheets(Shtim_Name).Range("A4:C" & Range("A65536").End(xlDown).Row)
Cls_tim = TextBox1.Value
TextBox1 = UCase(TextBox1)
If Cls_tim = "" Then Exit Sub
Set Rng_Kq = Rng_Tim.Find(Cls_tim, , xlFormula, xlPart)

If Rng_Kq Is Nothing Then Exit Sub
    ListBox1.RowSource = Shtim_Name & "!" & Rng_Kq.Address
End Sub
Khi chạy thì báo lỗi dòng: "Set Rng_Kq = Rng_Tim.Find(Cls_tim, , xlFormula, xlPart)"
Nhờ anh và AC trên GPE xem giúp.
Trân trọng.
Mong nhận được hồi đáp của AC
Chữ xlFormula viết sai, lý ra phải là vầy: xlFormulas
Ngoài ra, kiểu tìm như code của bạn chẳng hiệu quả tí nào! Chỉ tìm ra được 1 giá trị thôi sao?
 
Upvote 0
Hổng phải vậy! Dùng GetSetting và SaveSetting anh à! (hình như có lần anh đã hỏi rồi còn gì)
Ẹc... Ẹc...

À, đúng là không phải vậy, do mình hiểu nhầm câu hỏi chớ lý nào hỏi dễ vậy.
Mình cứ nghĩ ndu hỏi là làm sao mặc định một Page khi form hiện lên. Còn cái vụ "nhớ" kia thì mình đã biết rồi. Sorry!
 
Upvote 0
Chữ xlFormula viết sai, lý ra phải là vầy: xlFormulas
Ngoài ra, kiểu tìm như code của bạn chẳng hiệu quả tí nào! Chỉ tìm ra được 1 giá trị thôi sao?

Cả ơn anh NDU góp ý:
Để bổ sung thêm nhiều giá trị hiển thị vào listbox em viết :
PHP:
Private Sub TextBox1_Change()
Dim Cls_tim As String
Dim Shtim_Name As String
Dim Rng_Tim As Range, Rng_Kq As Range

Shtim_Name = TabStrip1.SelectedItem.Caption
Set Rng_Tim = Sheets(Shtim_Name).Range("A4:C" & Range("A65536").End(xlDown).Row)
Cls_tim = TextBox1.Value
TextBox1 = UCase(TextBox1)
If Cls_tim = "" Then Exit Sub
Set Rng_Kq = Rng_Tim.Find(Cls_tim, , xlFormulas, xlPart)

If Rng_Kq Is Nothing Then Exit Sub
Dim Fist_Row as long, last_row as long
First_Row = Rng_Kq.Row
Last_row =  Range("A65536").End(xlDown).Row
    ListBox1.RowSource = "'[GPE.xls]" & Shtim_Name & " '!A" & First_row & ":C" & Last_row
End Sub
Em chạy bị báo lỗi. Em chưa hiểu nhiều về VB nên không biết phải sửa thế nào?

Nhờ AC xem giúp.
Trân trọng cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Sau một hồi "mò" cuối cùng đã làm được. Cảm giác thật "sướng"
Cảm ơn AC
 
Upvote 0
Xin hỏi anh Vba_GPe và mọi người.
Trong ví dụ của anh, biến Name_Tab sẽ lấy Caption của các tab trong TabStrip1:
PHP:
Dim Name_Tab As String
Name_Tab = TabStrip1.SelectedItem.Caption                (Các Caption sẽ có dang: DG1776,DG1777)
'+ Em đặt thêm 1 biến nưa
Dim Name_Sh as String
Name_Sh = "DM"&Right(Name_Tab,4)                   (Ý: Ứng với mỗi Name_Tab là (DG1776,DG1777) thi Name_Sh sẽ là (DM1776,DM1777)
Em viết code như trên, nhưng khi F8 để chay thử thì tại dòng "Name_Sh = "DM"&Right(Name_Tab,4) " nó báo Name_Tab = "" và biến Name_Sh chỉ có giá trị là "DM" thôi.
Em chưa tìm ra vấn đề, kinh nhờ anh chị và mọi người giải đáp.
Cảm ơn anh chị.
 
Upvote 0
Các bác cho em xin code khi thoat trang 2
Sẽ nhảy qua trang 1 trong multipage ạ
 
Upvote 0

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

Back
Top Bottom