Cách ẩn nút lệnh (command button) cùng với cột

Liên hệ QC

Vo Duy Minh

Thành viên hoạt động
Tham gia
21/3/19
Bài viết
113
Được thích
32
Chào các bạn,
Rất mong nhận được sự hỗ trợ của các bạn.
(Tôi xin lỗi phải dùng tiếng Anh trong tiêu đề, nhưng có lẽ command button thì dể hiểu hơn).
Tôi đặt một nút lệnh (command button) trong một ô (giả định ô A1) thuộc một cột (cột A) để thực thi các giá trị trong cột A.
Cột A liên tục được ẩn và hiện trong quá trình sử dụng (việc ẩn và hiện cột A được thực hiện theo một command button khác)
Vấn đề là khi ẩn cột A thì nút lệnh không ẩn được (tôi dùng shape với Sub thì ẩn được).
Mong các bạn giúp giùm lệnh VBA để khi ẩn cột A thì nút lệnh cũng sẽ được ẩn theo và ngược lại, khi cột A hiện thì nút lệnh cũng được hiện ra theo.

Vấn đề thứ hai cũng mong được các bạn giúp đỡ (tôi cũng xin lỗi không biết hai vấn đề trong một mail được không)
Với lệnh Range ("A1").Select ở cuối code thì sau khi chạy code sẽ trả về ô A1.
Tôi xin được hướng dẫn viết thế nào để khi chạy code xong thì trả về vị trí của ô vừa được thao tác (gõ giá trị trong ô và là một ô bất kỳ trong một cột).
Xin được cám ơn các bạn trước.
 
Chào các bạn,
Rất mong nhận được sự hỗ trợ của các bạn.
(Tôi xin lỗi phải dùng tiếng Anh trong tiêu đề, nhưng có lẽ command button thì dể hiểu hơn).
Tôi đặt một nút lệnh (command button) trong một ô (giả định ô A1) thuộc một cột (cột A) để thực thi các giá trị trong cột A.
Cột A liên tục được ẩn và hiện trong quá trình sử dụng (việc ẩn và hiện cột A được thực hiện theo một command button khác)
Vấn đề là khi ẩn cột A thì nút lệnh không ẩn được (tôi dùng shape với Sub thì ẩn được).
Mong các bạn giúp giùm lệnh VBA để khi ẩn cột A thì nút lệnh cũng sẽ được ẩn theo và ngược lại, khi cột A hiện thì nút lệnh cũng được hiện ra theo.

Vấn đề thứ hai cũng mong được các bạn giúp đỡ (tôi cũng xin lỗi không biết hai vấn đề trong một mail được không)
Với lệnh Range ("A1").Select ở cuối code thì sau khi chạy code sẽ trả về ô A1.
Tôi xin được hướng dẫn viết thế nào để khi chạy code xong thì trả về vị trí của ô vừa được thao tác (gõ giá trị trong ô và là một ô bất kỳ trong một cột).
Xin được cám ơn các bạn trước.
1./Chuyển sang chế độ design-> Chuột phải vào command button-> chon format-> chon properties-> tích chon move and size with cells

2./Nếu vừa mở file rồi chạy code luôn thì thế nào?
 
Upvote 0
Chào các bạn,
Rất mong nhận được sự hỗ trợ của các bạn.
(Tôi xin lỗi phải dùng tiếng Anh trong tiêu đề, nhưng có lẽ command button thì dể hiểu hơn).
Tôi đặt một nút lệnh (command button) trong một ô (giả định ô A1) thuộc một cột (cột A) để thực thi các giá trị trong cột A.
Cột A liên tục được ẩn và hiện trong quá trình sử dụng (việc ẩn và hiện cột A được thực hiện theo một command button khác)
Vấn đề là khi ẩn cột A thì nút lệnh không ẩn được (tôi dùng shape với Sub thì ẩn được).
Mong các bạn giúp giùm lệnh VBA để khi ẩn cột A thì nút lệnh cũng sẽ được ẩn theo và ngược lại, khi cột A hiện thì nút lệnh cũng được hiện ra theo.

Vấn đề thứ hai cũng mong được các bạn giúp đỡ (tôi cũng xin lỗi không biết hai vấn đề trong một mail được không)
Với lệnh Range ("A1").Select ở cuối code thì sau khi chạy code sẽ trả về ô A1.
Tôi xin được hướng dẫn viết thế nào để khi chạy code xong thì trả về vị trí của ô vừa được thao tác (gõ giá trị trong ô và là một ô bất kỳ trong một cột).
Xin được cám ơn các bạn trước.
Thử xem file này nhé.

Mã:
Private Sub CommandButton2_Click()
    If CommandButton2.Caption = "HIDE" Then
        CommandButton2.Caption = "UNHIDE"
        CommandButton1.Visible = False
        Columns("A:A").Hidden = True
    Else
        CommandButton2.Caption = "HIDE"
        CommandButton1.Visible = True
        Columns("A:A").Hidden = False
        Range("A1").Select
    End If
End Sub
 

File đính kèm

  • Test.xlsm
    19.2 KB · Đọc: 10
Upvote 0
Rất cám ơn các bạn,
Cách chọn Move and size with cell cực kỳ hữu ích.
Và tôi cũng không thể tin là nó đơn giản như thế (thế mà tôi mất hơn 3 tiếng đồng hồ mà không tìm ra, cứ lo viết code tới lui).
Cách của bạn Hoàng Trọng Nghĩa cũng rất hay, nhưng cần thêm một command button phụ. Tôi cũng ghi nhận để có thể dùng khi phù hợp.

Tôi cũng xin lỗi vấn đề thứ hai của tôi đã không được trình bày rõ ràng.
Tôi muốn thay vì dùng như Range("A1").Select để trả về cell A1
thì lệnh sẽ trả về một ô bất kỳ mà trước đó đã có thao tác.
Chẳng hạn tôi vừa gõ một giá trị vào cell A560 thì khi bấm chuột vào nút lệnh (để xứ lý số liệu vừa nhập với số liệu ở các cột khác) thì sau khi xử lý xong nó sẽ đưa cell A560 vào giữa màn hình (đại khái để kiểm tra giá trị vứa nhập của cell A560 có đúng không.
Như thế sẽ tiện cho tôi không cần phải đi tìm lại cell mà mình vừa nhập số liệu vào (đôi khi quên mất đã nhập vào ô nào nữa nên khá bất tiện).
Tôi định làm một file để minh hoạ rõ, nhưng cũng khá mất thời gian nên xin lỗi nếu như việc trình bày của tôi không rõ ràng.

Một lần nữa, xin cám ơn các bạn đã hỗ trợ.
 
Upvote 0
Rất cám ơn các bạn,
Cách chọn Move and size with cell cực kỳ hữu ích.
Và tôi cũng không thể tin là nó đơn giản như thế (thế mà tôi mất hơn 3 tiếng đồng hồ mà không tìm ra, cứ lo viết code tới lui).
Cách của bạn Hoàng Trọng Nghĩa cũng rất hay, nhưng cần thêm một command button phụ. Tôi cũng ghi nhận để có thể dùng khi phù hợp.

Tôi cũng xin lỗi vấn đề thứ hai của tôi đã không được trình bày rõ ràng.
Tôi muốn thay vì dùng như Range("A1").Select để trả về cell A1
thì lệnh sẽ trả về một ô bất kỳ mà trước đó đã có thao tác.
Chẳng hạn tôi vừa gõ một giá trị vào cell A560 thì khi bấm chuột vào nút lệnh (để xứ lý số liệu vừa nhập với số liệu ở các cột khác) thì sau khi xử lý xong nó sẽ đưa cell A560 vào giữa màn hình (đại khái để kiểm tra giá trị vứa nhập của cell A560 có đúng không.
Như thế sẽ tiện cho tôi không cần phải đi tìm lại cell mà mình vừa nhập số liệu vào (đôi khi quên mất đã nhập vào ô nào nữa nên khá bất tiện).
Tôi định làm một file để minh hoạ rõ, nhưng cũng khá mất thời gian nên xin lỗi nếu như việc trình bày của tôi không rõ ràng.

Một lần nữa, xin cám ơn các bạn đã hỗ trợ.
Bạn nên nhớ, dòng mà tôi tô đậm với tính năng này chỉ thực hiện với các shape, picture, Form Controls, chứ nó không thực thi trên nút lệnh ActiveX Controls (như file tôi gửi).
Với dòng màu đỏ, vì tôi không biết điều kiện thực thi trên cột A của bạn là gì nên tôi tạm dùng một nút lệnh khác để cho bạn biết cách ẩn một nút lệnh thế nào thôi vì rõ ràng bạn chỉ hỏi "cách ẩn nút lệnh và cột" mà.
 
Upvote 0
Bạn nên nhớ, dòng mà tôi tô đậm với tính năng này chỉ thực hiện với các shape, picture, Form Controls, chứ nó không thực thi trên nút lệnh ActiveX Controls (như file tôi gửi).
Với dòng màu đỏ, vì tôi không biết điều kiện thực thi trên cột A của bạn là gì nên tôi tạm dùng một nút lệnh khác để cho bạn biết cách ẩn một nút lệnh thế nào thôi vì rõ ràng bạn chỉ hỏi "cách ẩn nút lệnh và cột" mà.
Cái chỗ chữ đậm, commandbutton1 trong file bạn gửi, nếu format như cách bài 2, bài 3 sau đó cho kích thước cột = 0 là nó ẩn theo mà bạn
 
Upvote 0
Cám ơn bạn Hoàng Trọng Nghĩa.
Như tôi đã mail, đề xuất của bạn cũng rất hay. Tôi đã lưu file và sẽ sử dụng khi phù hợp. Chắc chắn có nhiều trường hợp tôi phải dùng đề xuất của bạn.
Tôi cũng xin lỗi bạn do đã không trình bày rõ ràng để bạn nắm rõ yêu cầu của tôi.

Nhân tiện, với lệnh của bạn thì thay vì dùng câu cuối là Range("A1").Select thì tôi có thể viết thế nào để có thể đưa vào cell mà tôi vừa nhập số liệu mà không đưa về cell A1 (nếu như nhập số liệu vào nhiều ô trong cột thì nó vẫn trả về ô nhập số liệu cuối cùng).
 
Upvote 0
Range("A1").Select có thể không dùng cũng kg sao mà.
Chưa rõ thao tác cần làm gì nên đoán mò là dùng ".ActiveCell" để trỏ về ô hiện hành.
 
Upvote 0
Range("A1").Select có thể không dùng cũng kg sao mà.
Chưa rõ thao tác cần làm gì nên đoán mò là dùng ".ActiveCell" để trỏ về ô hiện hành.
Cám ơn bạn Huhumalu đã quan tâm
Đúng là Range("A1") không có cũng không sao, nhưng tôi muốn nó trở về vị trí mình cần thay vì phải tìm lại thôi.
Tôi đã dùng ActiveCell.Select nhưng không có tác dụng
 
Upvote 0
Tôi làm một file tương tự.
Khi bấm vào nút "Hide" (hoặc "Unhide") thì cột G sẽ ẩn hoặc hiện (kể cả nút lệnh trên đầu cột G).
(Tôi xin mượn cách đề xuất của bạn Hoàng Trọng Nghĩa)

Điều tôi cần là khi bấm nút lệnh Commandbutton thì sẽ đưa active vào ô nào vừa nhập liệu xong. Chẳng hạn mình vừa nhập liệu vào ô G10000 thì active sẽ ở ô đó.
Hiện nay sau khi bấm nút lệnh thì active sẽ đưa vào ô G50 do tôi tạm đặt Range("G50").

Rất cám ơn bạn đã quan tâm.
 

File đính kèm

  • Test.xlsm
    31.1 KB · Đọc: 3
Upvote 0
Tôi làm một file tương tự.
Khi bấm vào nút "Hide" (hoặc "Unhide") thì cột G sẽ ẩn hoặc hiện (kể cả nút lệnh trên đầu cột G).
(Tôi xin mượn cách đề xuất của bạn Hoàng Trọng Nghĩa)

Điều tôi cần là khi bấm nút lệnh Commandbutton thì sẽ đưa active vào ô nào vừa nhập liệu xong. Chẳng hạn mình vừa nhập liệu vào ô G10000 thì active sẽ ở ô đó.
Hiện nay sau khi bấm nút lệnh thì active sẽ đưa vào ô G50 do tôi tạm đặt Range("G50").

Rất cám ơn bạn đã quan tâm.
Anh thử kiểm tra lại nhé. Em thấy dùng activecell.select được mà.
 

File đính kèm

  • Test (5).xlsm
    30.9 KB · Đọc: 1
Upvote 0
Cám ơn bạn Hoàng Tuấn 868.
Đúng như bạn đã kiểm tra, khi dùng ActiveCell.Select với code trong file tôi gửi thì kết quả hoàn toàn như ý.
Thậm chí mình click chuột vào bất kỳ cell nào, không nhất thiết trong cột liên quan, thì nó cũng đưa về đúng ô đó.
Tôi xin lỗi đã không kiểm tra trước khi gửi với code trong file.

Vấn đề của tôi, tuy vậy, vẫn còn nguyên đó.
Do code thực sự cho cái commandbutton đó thì khá phức tạp và đòi hỏi phải có dữ liệu để chạy. Tôi đưa code vào mà không có dữ liệu thì nó báo sai ngay.
Code của tôi là tách các trường hợp có nhiều dòng trong cell của cột G và cột D (số dòng trong một cell tại hai cột này luôn tương ứng) để đưa vào các ô khác
Thường thì dữ liệu trong cột D đã ổn định, chỉ có thay đổi thông số (số dòng tương ứng với cột D, có 4 dòng) ở cột G thôi.
Nhưng thay đổi xong, bấm nút lệnh thì nó chạy mất, phải mắc công tìm lại.
Tôi gửi anh code

Private Sub CommandButton1_Click()
Range("G5:G16000").Select
Selection.Texttocolumns Destination:=Range("F5:F16000"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="" & Chr(10) & "", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
Range("D5:D16000").Select
Selection.Texttocolumns Destination:=Range("L5:L16000"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="" & Chr(10) & "", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
ActiveCell.Select
End Sub

Với trường hợp này thì ActiveCell.Select không có tác dụng, Nhưng Range("G560").Select thì lại có tác dụng.

Tôi rất cám ơn anh đã quan tâm và dành thời gian giúp tôi. Dù sao thì vấn đề này cũng không lớn lắm, chỉ có đôi chút bất tiện cho tôi mà thôi.
Các bạn đã giúp tôi "ẩn" cái Commandbutton là quá quý rồi. Mà cái này thì tôi cần hơn nhiều.

Xin chân thành cám ơn các bạn đã nhiệt tình hỗ trợ.
 
Upvote 0
Vấn đề của tôi, tuy vậy, vẫn còn nguyên đó.
Do code thực sự cho cái commandbutton đó thì khá phức tạp và đòi hỏi phải có dữ liệu để chạy. Tôi đưa code vào mà không có dữ liệu thì nó báo sai ngay.
Code của tôi là tách các trường hợp có nhiều dòng trong cell của cột G và cột D (số dòng trong một cell tại hai cột này luôn tương ứng) để đưa vào các ô khác
Thường thì dữ liệu trong cột D đã ổn định, chỉ có thay đổi thông số (số dòng tương ứng với cột D, có 4 dòng) ở cột G thôi.
Nhưng thay đổi xong, bấm nút lệnh thì nó chạy mất, phải mắc công tìm lại.
Tôi gửi anh code

Private Sub CommandButton1_Click()
Range("G5:G16000").Select
Selection.Texttocolumns Destination:=Range("F5:F16000"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="" & Chr(10) & "", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
Range("D5:D16000").Select
Selection.Texttocolumns Destination:=Range("L5:L16000"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="" & Chr(10) & "", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
ActiveCell.Select
End Sub
Anh có thể đưa ví dụ thực tế khi có dữ liệu thì sẽ thế nào không, chứ thấy anh viết rất dài nhưng em chưa hình dung được anh ạ.
 
Upvote 0
Một lần nữa, tôi rất cám ơn bạn đã quan tâm với vấn đề của tôi.

Tôi thêm chút dữ liệu vào trong file đính kèm (thực tế thì hầu như tất cả các ô trong hai cột D và G đều có dữ liệu)
Anh có thể thấy, khi bấm nút lệnh Commandbutton thì các giá trị trong cột D và cột G sẽ được tách dòng và đưa vào các ô tương ứng (dữ liệu trong cột D được tách ra đưa vào các cột L, M, N, và O, còn dữ liệu trong cột G thì đưa vào các cột Q, R, S, và T)
Tôi làm thêm nút lệnh Clear để xoá nhằm tiện cho anh khi cần thao tác lại, nút lệnh này không quan trọng.

Vấn đề của tôi là khi nhập liệu vào cột G (chẳng hạn vào ô G5000), xong bấm nút lệnh Commandbutton thì nó xử lý dữ liệu xong thì lại trả active về ô D5 (dùng ActiveCell.Select).
Tôi thì muốn khi đó nó trả về đúng ô G5000 mới vừa nhập liệu để không mắc công dò tìm (với trường hợp tất cả các ô đề có dữ liệu thì việc dò tìm nhiều khi mất rất nhiều thời gian)

Tôi rất cám ơn sự quan tâm của anh.
 

File đính kèm

  • Test (5).xlsm
    63.8 KB · Đọc: 2
Upvote 0
Một lần nữa, tôi rất cám ơn bạn đã quan tâm với vấn đề của tôi.

Tôi thêm chút dữ liệu vào trong file đính kèm (thực tế thì hầu như tất cả các ô trong hai cột D và G đều có dữ liệu)
Anh có thể thấy, khi bấm nút lệnh Commandbutton thì các giá trị trong cột D và cột G sẽ được tách dòng và đưa vào các ô tương ứng (dữ liệu trong cột D được tách ra đưa vào các cột L, M, N, và O, còn dữ liệu trong cột G thì đưa vào các cột Q, R, S, và T)
Tôi làm thêm nút lệnh Clear để xoá nhằm tiện cho anh khi cần thao tác lại, nút lệnh này không quan trọng.

Vấn đề của tôi là khi nhập liệu vào cột G (chẳng hạn vào ô G5000), xong bấm nút lệnh Commandbutton thì nó xử lý dữ liệu xong thì lại trả active về ô D5 (dùng ActiveCell.Select).
Tôi thì muốn khi đó nó trả về đúng ô G5000 mới vừa nhập liệu để không mắc công dò tìm (với trường hợp tất cả các ô đề có dữ liệu thì việc dò tìm nhiều khi mất rất nhiều thời gian)

Tôi rất cám ơn sự quan tâm của anh.
Bạn xem cách trong file có như bạn muốn hay không?
 

File đính kèm

  • Test (5).xlsm
    63.8 KB · Đọc: 11
Upvote 0
Tuyệt vời quá!
Cám ơn bạn Maika8008 rất nhiều.

Một lần nữa, tôi chân thành cám ơn tất cả các bạn đã dành thời gian cho vấn đề của tôi.
 
Upvote 0
Web KT

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

Back
Top Bottom