Giúp sửa code trong Form để quản lý sheet

Liên hệ QC

vc_đi chơi

Thành viên hoạt động
Tham gia
21/9/19
Bài viết
159
Được thích
32
Em có tham khảo và làm giao diện Form để quản lý sheet, nhưng em không hiểu sao bị lỗi khi tìm kiếm tên sheet không được hiển thị lên.
Nhờ các anh chị giúp em hoàn thiện đoạn code và chỉnh giúp em giao diện Form để khi quản lý sheet thì có giao diện (như hình em đăng )
Em có tải file em làm rồi nhưng bị lỗi.
Em xin cảm ơn!
Đoạn code như sau:

Mã:
Private Sub txtTenHH_Change()
    If txtTenHH <> "" Then
        cmdShowSheet_Click
        For k = ListBox1.ListCount - 1 To 0 Step -1
            If Not UCase(ListBox1.List(k)) Like "*" & UCase(txtTenHH) & "*" Then
                ListBox1.RemoveItem (k)
            End If
        Next
    ElseIf txtTenHH = "" Then
        cmdShowSheet_Click
    End If
End Sub

'---Code cho ListBox(lstSheets)
Private Sub lstSheets_Click()
    Sheets(frmShowSheet.lstSheets.Value).Select
    frmShowSheet.txtTenHH.SetFocus
End Sub

'---Code cho CommandButton(cmdShowSheet)
Private Sub cmdShowSheet_Click()
    Dim Sh As Worksheet
    For Each Sh In Sheets
        frmShowSheet.lstSheets.AddItem Sh.Name
    Next
    Dim i As Long, j As Long
    With lstSheets
        For i = 0 To .ListCount - 1
            For j = .ListCount - 1 To (i + 1) Step -1
                If .List(j) = .List(i) Then
                    .RemoveItem j
                    frmShowSheet.txtTenHH.SetFocus
                End If
            Next j
        Next i
    End With
End Sub

111111.png
 

File đính kèm

  • Show sheet.xlsm
    17 KB · Đọc: 8
Em có tham khảo và làm giao diện Form để quản lý sheet, nhưng em không hiểu sao bị lỗi khi tìm kiếm tên sheet không được hiển thị lên.
Nhờ các anh chị giúp em hoàn thiện đoạn code và chỉnh giúp em giao diện Form để khi quản lý sheet thì có giao diện (như hình em đăng )
Em có tải file em làm rồi nhưng bị lỗi.
Em xin cảm ơn!
Đoạn code như sau:

Mã:
Private Sub txtTenHH_Change()
    If txtTenHH <> "" Then
        cmdShowSheet_Click
        For k = ListBox1.ListCount - 1 To 0 Step -1
            If Not UCase(ListBox1.List(k)) Like "*" & UCase(txtTenHH) & "*" Then
                ListBox1.RemoveItem (k)
            End If
        Next
    ElseIf txtTenHH = "" Then
        cmdShowSheet_Click
    End If
End Sub

'---Code cho ListBox(lstSheets)
Private Sub lstSheets_Click()
    Sheets(frmShowSheet.lstSheets.Value).Select
    frmShowSheet.txtTenHH.SetFocus
End Sub

'---Code cho CommandButton(cmdShowSheet)
Private Sub cmdShowSheet_Click()
    Dim Sh As Worksheet
    For Each Sh In Sheets
        frmShowSheet.lstSheets.AddItem Sh.Name
    Next
    Dim i As Long, j As Long
    With lstSheets
        For i = 0 To .ListCount - 1
            For j = .ListCount - 1 To (i + 1) Step -1
                If .List(j) = .List(i) Then
                    .RemoveItem j
                    frmShowSheet.txtTenHH.SetFocus
                End If
            Next j
        Next i
    End With
End Sub

View attachment 229501
Thử cách này.
 

File đính kèm

  • Show sheet.xlsm
    17.8 KB · Đọc: 19
Cám ơn anh! anh ơi phiền anh chút xíu nữa:
1/ Anh cho em hỏi có cách nào để bảng Form trên hiện theo vị trí của chuột (chuột ở ô excel nào đó thì chạy code sẽ hiện lên bảng Form ở vị trí khoảng ô quanh đó, ở đây em thấy nó luôn hiện ra ở giữa màn hình) " Em muốn hiện lên ở vị trí con trỏ chuột_Như hình thứ 2 và thứ 3"
2/ Anh sửa giúp em giao diện ddeerr nó có nền và chữ nổi lên một chút cho dễ nhìn như sau được không ạ? _Như hình thứ nhất.

2222.png333333.png

111111.png
 
Lần chỉnh sửa cuối:
Cám ơn anh! anh ơi phiền anh chút xíu nữa:
1/ Anh cho em hỏi có cách nào để bảng Form trên hiện theo vị trí của chuột (chuột ở ô excel nào đó thì chạy code sẽ hiện lên bảng Form ở vị trí khoảng ô quanh đó, ở đây em thấy nó luôn hiện ra ở giữa màn hình) " Em muốn hiện lên ở vị trí con trỏ chuột_Như hình thứ 2 và thứ 3"
2/ Anh sửa giúp em giao diện ddeerr nó có nền và chữ nổi lên một chút cho dễ nhìn như sau được không ạ? _Như hình thứ nhất.

View attachment 229512View attachment 229513

View attachment 229510
Hay đấy! gọn nhẹ và tiện dụng, rất cần.
Cảm ơn vc_đi chơi giaiphap.
Mong giaiphap giúp đỡ và cho ý tưởng để giao diện đẹo hơn và có hướng nào đó hay ơn!
Biết ơn các bạn!
 
Em ẩn sheet1 đi khi chạy code thì vẫn hiện tên sheet1 lên và khi nhấn vào đó sẽ báo lỗi.
Anh có thể sửa code để những sheet đã ẩn không hiện lên khi chạy code.
Hoặc tích hợp tính năng ẩn/hiện sheet vào luôn Form này.
loi.png
 
Hi mọi người,
Em cũng có mò trên mạng 1 form để unhide and hide sheet. E đã tạo form nhưng vấn đề ở đây là e muốn khi hiện form mà vẫn có thể làm việc đồng thời trên bảng tính excel . Nhưng code của e chỉ khi close mới unhide or hide sheet được. Và form thì luôn luôn hiện ở giữa ..Có cách nào để em có thể di chuyển tùy ý form được không ạ.
Em cảm ơn.
 

File đính kèm

  • FORM UNHIDE AND HIDEN.xlsm
    24.9 KB · Đọc: 8
Hi mọi người,
Em cũng có mò trên mạng 1 form để unhide and hide sheet. E đã tạo form nhưng vấn đề ở đây là e muốn khi hiện form mà vẫn có thể làm việc đồng thời trên bảng tính excel . Nhưng code của e chỉ khi close mới unhide or hide sheet được. Và form thì luôn luôn hiện ở giữa ..Có cách nào để em có thể di chuyển tùy ý form được không ạ.
Em cảm ơn.
Muốn hiện Form mà vẫn thực hiện trên bảng tình thì để thuộc tính ShowModal của Form về False nhé.
 
Hi mọi người,
Em cũng có mò trên mạng 1 form để unhide and hide sheet. E đã tạo form nhưng vấn đề ở đây là e muốn khi hiện form mà vẫn có thể làm việc đồng thời trên bảng tính excel . Nhưng code của e chỉ khi close mới unhide or hide sheet được. Và form thì luôn luôn hiện ở giữa ..Có cách nào để em có thể di chuyển tùy ý form được không ạ.
Em cảm ơn.
Cái của mình và cái của bạn gộp làm 1 thì hay đấy.
Có ý tưởng sau:
qqqqqq.png
Của bạn cần click đúp để chọn sheet để ẩn hoặc chọn sheet hiện
Chỉnh lại là chỉ cần clik (một lần) thì sẽ chọn sheet để ẩn hoặc chọn sheet hiện.
Còn Click 2 lần vào tên của "Danh sách sheet Hiện" sẽ đến được sheet đã hiện đó.
Nhờ các bác trên GPE giúp đỡ!
 

File đính kèm

  • An hien sheet.xlsm
    23.5 KB · Đọc: 9
1/ Anh cho em hỏi có cách nào để bảng Form trên hiện theo vị trí của chuột (chuột ở ô excel nào đó thì chạy code sẽ hiện lên bảng Form ở vị trí khoảng ô quanh đó, ở đây em thấy nó luôn hiện ra ở giữa màn hình) " Em muốn hiện lên ở vị trí con trỏ chuột_Như hình thứ 2 và thứ 3"
View attachment 229513
Thế nếu trong hình 3 mà P24 đang được chọn thì hiện Form thế nào? Hiện sao cho chỉ nhìn thấy một góc trên bên trái nhỏ của Form, không nhìn thấy TextBox và ListBox?

form.JPG
 
Thế nếu trong hình 3 mà P24 đang được chọn thì hiện Form thế nào? Hiện sao cho chỉ nhìn thấy một góc trên bên trái nhỏ của Form, không nhìn thấy TextBox và ListBox?

View attachment 229547
Hì, Em dùng từ "quanh quanh" khu đó thôi anh ạ!
Em có ý tưởng vậy, anh có hướng giải quyết thế nào chó em xin ý kiến mới để em học hỏi.
Em có tải file ở bài #9 khi kết hợp ý tưởng ở bài #7 của Thanh Bình PV.
Anh giúp em mới nhé!
Cảm ơn anh!
 
Hì, Em dùng từ "quanh quanh" khu đó thôi anh ạ!
Em có ý tưởng vậy, anh có hướng giải quyết thế nào chó em xin ý kiến mới để em học hỏi.
Em có tải file ở bài #9 khi kết hợp ý tưởng ở bài #7 của Thanh Bình PV.
Anh giúp em mới nhé!
Cảm ơn anh!
Sao bạn không tự thử đi, sẽ có nhiều thú vị, rồi mắc đâu upload lên đây
Hơn xa việc chờ đợi, học được nhiều điều

với gợi ý thuộc tính
.Left và .Top của Form, của range, của activeCell ....
 
Sao bạn không tự thử đi, sẽ có nhiều thú vị, rồi mắc đâu upload lên đây
Hơn xa việc chờ đợi, học được nhiều điều

với gợi ý thuộc tính
.Left và .Top của Form, của range, của activeCell ....
Mình thử rồi mà mình mới up lên nhờ mà! bài 9 mình đăng là mình đã sửa lại file rồi bạn ạ!
 
Em ẩn sheet1 đi khi chạy code thì vẫn hiện tên sheet1 lên và khi nhấn vào đó sẽ báo lỗi.
Anh có thể sửa code để những sheet đã ẩn không hiện lên khi chạy code.
Hoặc tích hợp tính năng ẩn/hiện sheet vào luôn Form này.
View attachment 229515
Đây là một cách nửa, nhưng chắc có lẽ sẽ còn lỗi, tạm thời chưa phát hiện ra. Bạn test thử nếu có vấn đề nửa thì bàn tiếp.
 

File đính kèm

  • Show sheet.xlsm
    23.2 KB · Đọc: 10
Hì, Em dùng từ "quanh quanh" khu đó thôi anh ạ!
Em có ý tưởng vậy, anh có hướng giải quyết thế nào chó em xin ý kiến mới để em học hỏi.
Nhưng tôi mở tập tin thì chưa thấy bạn định hiển thị Form bằng cách nào. Chả nhẽ bằng cách vào VBE và chạy code (Run, F5)?
 
Nhưng tôi mở tập tin thì chưa thấy bạn định hiển thị Form bằng cách nào. Chả nhẽ bằng cách vào VBE và chạy code (Run, F5)?
Sẳn anh @batman1 viết code cho hiển thị Form tại vị trí con chuột cho em tham khảo với (Hiển thị tại ô đang chọn thì em có tham khảo code trên diễn đàn rồi), đụng tới cái API sao nghiễn hoài vẫn không thấm nỗi.
 
Sẳn anh @batman1 viết code cho hiển thị Form tại vị trí con chuột cho em tham khảo với (Hiển thị tại ô đang chọn thì em có tham khảo code trên diễn đàn rồi), đụng tới cái API sao nghiễn hoài vẫn không thấm nỗi.
Không ai thấm và hiểu, nhớhoàn toàn API trừ nhà sản xuất ra nó. Vì API sản xuất ra như công cụ sẵn, cứ thế áp dụng thôi
Như kiểu biết các loại ô tô, và vận dụng trường hợp nào, cùng với học lái thôi.
 
Sẳn anh @batman1 viết code cho hiển thị Form tại vị trí con chuột cho em tham khảo với (Hiển thị tại ô đang chọn thì em có tham khảo code trên diễn đàn rồi), đụng tới cái API sao nghiễn hoài vẫn không thấm nỗi.
Nếu click vào Button hay ô trên Sheet1 thì góc trên bên trái của Form sẽ ở điểm click chứ không ở góc trên bên trái của Button hay ô. Muốn góc trên bên trái của Form trùng với góc trên bên trái của ô thì phải click vào điểm ở góc trên bên trái của ô.

1. Code trong Sheet1 - chỉ là ví dụ
Mã:
Option Explicit

'vi du
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    FormInCursor UserForm1
    UserForm1.Show False
End Sub

2. Code trong Module1 - chỉ là ví dụ
Mã:
Option Explicit

'vi du
Sub Button1_Click()
    FormInCursor UserForm1    
    UserForm1.Show False
End Sub

3. Code module modFormInCursor
Mã:
Option Explicit

Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY As Long = 90
Private Const POINTS_PER_INCH As Long = 72

Private Type POINTAPI
    x As Long
    y As Long
End Type

#If VBA7 Then
    Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As LongPtr, ByVal hdc As LongPtr) As Long
    Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hdc As LongPtr, ByVal nIndex As Long) As Long
#Else
    Private Declare Function GetCursorPos Lib "user32.dll" (lpPoint As POINTAPI) As Long
    Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hdc As Long) As Long
    Private Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, ByVal nIndex As Long) As Long
#End If

Sub FormInCursor(ByVal Form As Object)
#If VBA7 Then
    Dim DC As LongPtr
#Else
    Dim DC As Long
#End If
Dim PixelsPerPointsX As Double, PixelsPerPointsY As Double, pt As POINTAPI
    DC = GetDC(0)
    PixelsPerPointsX = GetDeviceCaps(DC, LOGPIXELSX) / POINTS_PER_INCH
    PixelsPerPointsY = GetDeviceCaps(DC, LOGPIXELSY) / POINTS_PER_INCH
    ReleaseDC 0, DC
    GetCursorPos pt
    Form.Left = pt.x / PixelsPerPointsX
    Form.Top = pt.y / PixelsPerPointsY
End Sub
 
Web KT
Back
Top Bottom