Cmd Next record (1 người xem)

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

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

hoaipnb

Thành viên mới
Tham gia
19/12/09
Bài viết
27
Được thích
1
Thường là sau khi tới record cuối cùng nếu ta vẫn tiếp tục ân cmd next record thì chương trình sẽ tự động mở 1 new record. Mình muốn khi tới record cuối cùng thì cmd đó ở trạng thái disable hoặc hiện một msg thông báo, tóm lại là ko mở sang đc record mới.
Làm ơn hướng dẫn dùm mình
Thanks
 
Thường là sau khi tới record cuối cùng nếu ta vẫn tiếp tục ân cmd next record thì chương trình sẽ tự động mở 1 new record. Mình muốn khi tới record cuối cùng thì cmd đó ở trạng thái disable hoặc hiện một msg thông báo, tóm lại là ko mở sang đc record mới.
Làm ơn hướng dẫn dùm mình
Thanks

Bạn thử code sau cho nút next:

Mã:
Private Sub cmdNext_Click()
    If CurrentRecord > RecordsetClone.RecordCount Then
        MsgBox "Khong the di chuyen duoc nua"
        cmdNext.Enabled = False
    
        Exit Sub
    Else
        DoCmd.GoToRecord , , acNext
        cmdNext.Enabled = True
    End If
    
End Sub

Code sau cho record hiện hành, nếu số record hiện hành lớn hơn tổng số record thì chạy code

Mã:
Private Sub Form_Current()
    If CurrentRecord < RecordsetClone.RecordCount Then
        cmdNext.Enabled = True
    End If
End Sub
 
Cám ơn bạn đã giúp đỡ, mình làm theo cách trên nhưng k thấy khả thi, nghĩa là vẫn mở thêm 1 record mới, sau khi click tiếp mới hiện ra thông báo
 
Cám ơn bạn đã giúp đỡ, mình làm theo cách trên nhưng k thấy khả thi, nghĩa là vẫn mở thêm 1 record mới, sau khi click tiếp mới hiện ra thông báo
Thì bạn tùy biến mà chỉnh sửa và sử dụng theo ý muốn của mình, nếu bạn muốn thế thì thay cái dấu > thành >= là được.
 
Mình làm được rồi, cám ơn bạn nhiều lắm, mình ko rành về lập trình lắm nên chỉ biết làm theo kiểu amateur thôi.
Tiện đây mình hỏi luôn,mình muốn set defaul record duy nhất mà mình nhập vào thì dùng code gì vậy bạn ????, hiện tại mỗi lần muốn thay đổi mình lại phải chỉnh sửa = cách đánh tên vào defaul value
 
Mình làm được rồi, cám ơn bạn nhiều lắm, mình ko rành về lập trình lắm nên chỉ biết làm theo kiểu amateur thôi.
Tiện đây mình hỏi luôn,mình muốn set defaul record duy nhất mà mình nhập vào thì dùng code gì vậy bạn ????, hiện tại mỗi lần muốn thay đổi mình lại phải chỉnh sửa = cách đánh tên vào defaul value
Chưa hiểu hết ý của bạn, có phải ý của bạn là đánh dấu cái record nào đó bạn muốn để khi thêm cái record mới thì nó tự thêm vào ?
 
ko phải bạn ah, chắc tại mình ko rành nên diễn đạt hơi khó hiểu và dùng từ ko chính xác.
Ý mình là ntn, mình muốn tạo 1 form trong đó có 1 combo box chứa các tên nhân viên , mình muốn tạo 1 cmd button để khi click vào đó thì ct sẽ chọn tên ng mình chọn làm mặc định. nếu add thêm record mới thì mặc định sẽ là tên ng mình chọn.
Không bít có dễ hỉu hơn chút nào ko :p
 
ko phải bạn ah, chắc tại mình ko rành nên diễn đạt hơi khó hiểu và dùng từ ko chính xác.
Ý mình là ntn, mình muốn tạo 1 form trong đó có 1 combo box chứa các tên nhân viên , mình muốn tạo 1 cmd button để khi click vào đó thì ct sẽ chọn tên ng mình chọn làm mặc định. nếu add thêm record mới thì mặc định sẽ là tên ng mình chọn.
Không bít có dễ hỉu hơn chút nào ko :p
Chép code sau vào module:

Mã:
Option Compare Database
Option Explicit

Public Function acbCarry(frm As Form, ctl As Control)
    Dim ctlData As Control
    Const acbcQuote = """"
    Set ctlData = frm(ctl.Tag)
        ctlData.DefaultValue = _
         acbcQuote & ctl.Value & acbcQuote
         
End Function

Trên Combo (Ví dụ Combo1)

- Tag: Tên Texbox cần set default.
- Sự kiện After Update: =acbCarry([Form],[Combo1])

Chúc bạn thành công.
Thân
 
Bạn thử code sau cho nút next:

Mã:
Private Sub cmdNext_Click()
    If CurrentRecord > RecordsetClone.RecordCount Then
        MsgBox "Khong the di chuyen duoc nua"
        cmdNext.Enabled = False
    
        Exit Sub
    Else
        DoCmd.GoToRecord , , acNext
        cmdNext.Enabled = True
    End If
    
End Sub

Code sau cho record hiện hành, nếu số record hiện hành lớn hơn tổng số record thì chạy code

Mã:
Private Sub Form_Current()
    If CurrentRecord < RecordsetClone.RecordCount Then
        cmdNext.Enabled = True
    End If
End Sub
Tương tự như trường hợp trên nhưng là thanh cuộn trên chuột thì thêm code ntn vậy bạn, vì phím cuộn trên chuột cũng có tác dụng như 2 cmd next và last
 
Tương tự như trường hợp trên nhưng là thanh cuộn trên chuột thì thêm code ntn vậy bạn, vì phím cuộn trên chuột cũng có tác dụng như 2 cmd next và last
Thì cũng thế thôi, thêm cái Else vào current form là được

Mã:
Private Sub Form_Current()
    If CurrentRecord < RecordsetClone.RecordCount Then
        cmdNext.Enabled = True
      Else
        cmdNext.Enabled = False
    End If
End Sub
 
Bạn ko vào ym bao h hả, mấy lấy pm k thấy bạn nói gì, mình muốn trao đổi với bạn qua ym có đc không ??
 
ùa vậy để mình tìm thêm trong đây và khúc mắc gì mình sẽ post lên đây hỏi bạn vậy.
Ct của mình cơ bản thì đã hoàn thành, h mình muốn fix 1 số lỗi hay mắc phải và thêm 1 số tiện ích cho user dễ sử dụng thôi
 
Chép code sau vào module:

Mã:
Option Compare Database
Option Explicit

Public Function acbCarry(frm As Form, ctl As Control)
    Dim ctlData As Control
    Const acbcQuote = """"
    Set ctlData = frm(ctl.Tag)
        ctlData.DefaultValue = _
         acbcQuote & ctl.Value & acbcQuote
         
End Function

Trên Combo (Ví dụ Combo1)

- Tag: Tên Texbox cần set default.
- Sự kiện After Update: =acbCarry([Form],[Combo1])

Chúc bạn thành công.
Thân
Chào bạn
Mình đã làm theo cách bạn hướng dẫn nhưng ko thành công
Bạn có thể giúp mình 1 cái demo đc ko
Thanks bạn nhiều
 

File đính kèm

Cám ơn bạn nhưng chương trình mình dự định làm giống như mẫu dưới.

- Cụ thể là khi vào form SET chọn MaCN và click vào cm set default thì khi add new record ở form PGD thì combo box MaCn trên form PGD sẽ có giá trị giống như ta đã chọn ở form Set
 

File đính kèm

Cám ơn bạn nhưng chương trình mình dự định làm giống như mẫu dưới.

- Cụ thể là khi vào form SET chọn MaCN và click vào cm set default thì khi add new record ở form PGD thì combo box MaCn trên form PGD sẽ có giá trị giống như ta đã chọn ở form Set

Khai báo biến sau vào module

Mã:
Public str As String

Code trong form Set

Mã:
Private Sub Command3_Click()
str = txtMaCN
End Sub

Private Sub Form_Load()
str = ""

End Sub

Thêm 1 dòng vào sự kiện click của nút thêm mới

Mã:
Private Sub Command6_Click()
On Error GoTo Err_Command6_Click


    DoCmd.GoToRecord , , acNewRec
    [B][COLOR=#0000cd]MaCN = str[/COLOR][/B]

Exit_Command6_Click:
    Exit Sub

Err_Command6_Click:
    MsgBox Err.Description
    Resume Exit_Command6_Click
    
End Sub

Hy vọng sẽ giúp được bạn.
Thân
 
Cám ơn domfootwear nhiều, vấn đề khó khăn nhất của mình đã đc giải quyết.
Cám ơn bạn rất nhiều.
 
Chào bạn domfootwear
Có một vấn đề nhỏ là khi mình thoát khỏi form set thì add record mới sẽ không tự nhận giá trị mình đã chọn. Vậy mình muốn sau khi set mặc định 1 giá trị thì giá trị đó sẽ tồn tại suốt cho đến khi mình thay đổi kể cả khi thoát chương trình.
 
Chào bạn domfootwear
Có một vấn đề nhỏ là khi mình thoát khỏi form set thì add record mới sẽ không tự nhận giá trị mình đã chọn. Vậy mình muốn sau khi set mặc định 1 giá trị thì giá trị đó sẽ tồn tại suốt cho đến khi mình thay đổi kể cả khi thoát chương trình.

Bạn xem file nhé. Lưu ý là khi thoát khỏi chương trình thì biến sẽ mất
 

File đính kèm

dạ, nhưng ý mình là có cách nào là sau khi set thì thoát chương trình và vào lại thì vẫn tồn tại giá trị mình đã chọn làm mặc định.
 
dạ, nhưng ý mình là có cách nào là sau khi set thì thoát chương trình và vào lại thì vẫn tồn tại giá trị mình đã chọn làm mặc định.
Ghi biến đó vào bảng, xác nhận thay đổi khi mở form.

Bạn xem ví dụ nhé.
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn thử code sau cho nút next:

Mã:
Private Sub cmdNext_Click()
    If CurrentRecord >= RecordsetClone.RecordCount Then
        MsgBox "Khong the di chuyen duoc nua"
        Exit Sub
    Else
        DoCmd.GoToRecord , , acNext
    End If
    
End Sub

[/CODE]
Chào bạn, mình áp dụng đoạn code trên vào cmd next có lúc thì sử dụng bình thường nhưng thường là khi ấn cmd next là hiện msgbox thông báo và dừng luôn không chuyển tới record kê tiếp. Mình kiểm tra nhưng ko biết nguyên nhân ở đâu, nhờ bạn trợ giúp...
Thanks
 
Xin chào các bạn GPE. Các bạn vui lòng giúp mình tạo cmd Next, Previous và Delete record (form4) dùm mình. Cám ơn các bạn. Chúc các bạn sức khỏe.
( - - - mình post nhầm khu vực rồi, file của mình là xls. Admin vui lòng chuyển dùm mình, thanks)
 

File đính kèm

Lần chỉnh sửa cuối:
Xin chào các bạn GPE. Các bạn vui lòng giúp mình tạo cmd Next, Previous và Delete record (form4) dùm mình. Cám ơn các bạn. Chúc các bạn sức khỏe.
(+-+-+-+ mình post nhầm khu vực rồi, file của mình là xls. Admin vui lòng chuyển dùm mình, thanks)

Bạn phải nói rõ là thực hiện trên Form nào (form chính thôi, từ đó tự làm các form khác) và Delete record ở sheet nào? hơn nữa trong sheet có protectsheet thì làm sao mà xóa đây?
 
Bạn phải nói rõ là thực hiện trên Form nào (form chính thôi, từ đó tự làm các form khác) và Delete record ở sheet nào? hơn nữa trong sheet có protectsheet thì làm sao mà xóa đây?

Ah, Bạn thực hiện dùm mình ở UserForm4 (Chỉnh sửa dữ liệu) thôi, Delete record từng HS một ở Sheet "DSHS" pass: 1. Cám ơn bạn.
 
Lần chỉnh sửa cuối:
Ah, Bạn thực hiện dùm mình ở UserForm4 (Chỉnh sửa dữ liệu) thôi, Delete record từng HS một ở Sheet "DSHS" pass: 1. Cám ơn bạn.

Vì là chỉnh sửa dữ liệu nên đương nhiên là mã số học sinh phải có đúng không bạn? Và chắc chắn nó không trùng với cái nào đúng không? Nếu là như vậy tôi sẽ căn cứ vào đó để chỉnh sửa/ xóa... cho bạn.
 
Vì là chỉnh sửa dữ liệu nên đương nhiên là mã số học sinh phải có đúng không bạn? Và chắc chắn nó không trùng với cái nào đúng không? Nếu là như vậy tôi sẽ căn cứ vào đó để chỉnh sửa/ xóa... cho bạn.

Cám ơn bạn trước. file đó hiện nay đã có gần như hoàn chỉnh, chỉ thiếu những phần mình đã nêu. Bạn xem có gì phải chỉnh sửa và góp ý cho mình. Mình chỉ amateur về VBA thôi.
 
Lần chỉnh sửa cuối:
Cám ơn bạn trước. file đó hiện nay đã có gần như hoàn chỉnh, chỉ thiếu những phần mình đã nêu. Bạn xem có gì phải chỉnh sửa và góp ý cho mình. Mình chỉ amateur về VBA thôi.

Nếu bạn nói là hoàn chỉnh thì tôi bó tay luôn! Code thì lủng củng đặt tên các object thiếu khoa học, nói chung đối với bạn vậy cũng tạm ổn rồi!

Tôi căn cứ vào tình hình của Form4 làm cho bạn 4 nút: Next, Previous, Top, Bottom và 2 nút Nhập Chỉnh sửa và Xóa Dữ liệu:

Thay vì họ tên bằng TextBox, tôi đổi thành Combobox và nạp nguồn cho nó:

PHP:
Private Sub UserForm_Initialize()
  CboHoTen.List() = Range(Sheets("DSHS").[B4], Sheets("DSHS").[B65536].End(xlUp)).Resize(, 11).Value
End Sub

''=====================================

Private Sub CboHoTen_Change()
  On Error Resume Next
  Dim i As Byte
  For i = 1 To 10
    Controls("TextBox" & i).Value = CboHoTen.Column(i)
  Next
End Sub

Các nút di chuyển record:

PHP:
Private Sub CmdTop_Click()
  With CboHoTen
    .Value = .List(0)
  End With
End Sub

''=====================================

Private Sub CmdPrevious_Click()
  Dim LstIndex As Long
  With CboHoTen
    LstIndex = WorksheetFunction.Max(0, .ListIndex - 1)
    .Value = .List(LstIndex)
  End With
End Sub

''=====================================

Private Sub CmdNext_Click()
  Dim LstIndex As Long, LstCount As Long
  With CboHoTen
    LstCount = .ListCount - 1
    LstIndex = WorksheetFunction.Min(LstCount, .ListIndex + 1)
    .Value = .List(LstIndex)
  End With
End Sub

''=====================================

Private Sub CmdBottom_Click()
  Dim LstCount As Long
  With CboHoTen
    LstCount = .ListCount - 1
    .Value = .List(LstCount)
  End With
End Sub

Nút Xóa Record:

PHP:
Private Sub CmdDelete_Click()
  Dim MyMsg As Long, MyRng As Range
  If TextBox10.Value <> vbNullString Then
    MyMsg = MsgBox("Ban co chac chan xoa toan bo du lieu cua Ma HS: " & TextBox10, vbQuestion + vbYesNo, "Thông Báo")
    If MyMsg = vbYes Then
      With Range(Sheets("DSHS").[L4], Sheets("DSHS").[L65536].End(xlUp))
        Set MyRng = .Find(TextBox10.Value, LookIn:=xlValues, LookAt:=xlWhole)
      End With
      If Not MyRng Is Nothing Then MyRng.Offset(, -10).Resize(, 11).Delete 2
      CboHoTen.List() = Range(Sheets("DSHS").[B4], Sheets("DSHS").[B65536].End(xlUp)).Resize(, 11).Value
      MsgBox "toan bo du lieu cua Ma HS: " & TextBox10 & " da duoc xoa!"
      Call CmdClear_Click
    End If
  End If
End Sub

Nút Nhập Chỉnh Sửa:

PHP:
Private Sub CmdEdit_Click()
  Dim MyMsg As Long, MyRng As Range, i As Byte
  If TextBox10.Value <> vbNullString Then
    MyMsg = MsgBox("Ban co chac chan nhap chinh sua toan bo du lieu cua Ma HS: " & TextBox10, vbQuestion + vbYesNo, "Thông Báo")
    If MyMsg = vbYes Then
      With Range(Sheets("DSHS").[L4], Sheets("DSHS").[L65536].End(xlUp))
        Set MyRng = .Find(TextBox10.Value, LookIn:=xlValues, LookAt:=xlWhole)
      End With
      If Not MyRng Is Nothing Then
        With MyRng
          .Offset(, -10) = CboHoTen
          For i = 1 To 10
            .Offset(, i - 10) = Controls("TextBox" & i).Value
          Next
        End With
      End If
      CboHoTen.List() = Range(Sheets("DSHS").[B4], Sheets("DSHS").[B65536].End(xlUp)).Resize(, 11).Value
      MsgBox "toan bo du lieu cua Ma HS: " & TextBox10 & " da duoc chinh sua!"
      Call CmdClear_Click
    End If
  End If
End Sub
 

File đính kèm

Nếu bạn nói là hoàn chỉnh thì tôi bó tay luôn! Code thì lủng củng đặt tên các object thiếu khoa học, nói chung đối với bạn vậy cũng tạm ổn rồi

Cám ơn bạn đã góp ý, hoàn chỉnh theo nhu cầu và khả năng của mình thôi.
Bạn giúp mình cho Thông tin HS hiện lên form4 luôn, hiên giờ thì chỉ hiện lên form trắng chưa có dữ liệu. thanks.
 
Lần chỉnh sửa cuối:
Cám ơn bạn đã góp ý, hoàn chỉnh theo nhu cầu và khả năng của mình thôi.
Bạn giúp mình cho Thông tin HS hiện lên form4 luôn, hiên giờ thì chỉ hiện lên form trắng chưa có dữ liệu. thanks.

Hiện lên cái gì bạn? Bạn chỉ việc bấm combobox CboHoTen là nó xổ xuống và chỉ cần chọn tên thôi, chứ cần chi mà hiện? Chẳng lẽ hiện tên đầu tiên?
 
Hiện lên cái gì bạn? Bạn chỉ việc bấm combobox CboHoTen là nó xổ xuống và chỉ cần chọn tên thôi, chứ cần chi mà hiện? Chẳng lẽ hiện tên đầu tiên?

Đúng đó bạn, vì mình làm cho người khác sử dụng nữa mà, nhiều khi họ mở lên mà không biết, "Tiện lợi" đặt lên hàng đầu.
 
Lần chỉnh sửa cuối:
Đúng đó bạn, vì mình làm cho người khác sử dụng nữa mà, nhiều khi họ mở lên mà không biết, "Tiện lợi" đặt lên hàng đầu.

Chắc File của bạn không phải do bạn làm nên có những điều quá căn bản mà bạn cũng không làm được.

Trong UserForm4 mà tôi làm cho bạn, thay vì:

PHP:
Private Sub UserForm_Initialize()
  CboHoTen.List() = Range(Sheets("DSHS").[B4], Sheets("DSHS").[B65536].End(xlUp)).Resize(, 11).Value
End Sub

Thì bạn chỉ việc thêm 1 tí xíu nữa là xong!

Mã:
Private Sub UserForm_Initialize()
  CboHoTen.List() = Range(Sheets("DSHS").[B4], Sheets("DSHS").[B65536].End(xlUp)).Resize(, 11).Value
  [COLOR=#ff0000][B]CboHoTen = CboHoTen.List(0)[/B][/COLOR]
End Sub

Khi bạn muốn ai hiểu về chương trình của bạn, đương nhiên bạn phải làm cho người đó hiểu rõ về nó, và đôi khi cũng tập cho họ biết cách khai thác tốt chương trình của mình, chứ không phải mọi thứ đều phải dọn sẳn.
 
Lần chỉnh sửa cuối:
Chắc File của bạn không phải do bạn làm nên có những điều quá căn bản mà bạn cũng không làm được.

Khi bạn muốn ai hiểu về chương trình của bạn, đương nhiên bạn phải làm cho người đó hiểu rõ về nó, và đôi khi cũng tập cho họ biết cách khai thác tốt chương trình của mình, chứ không phải mọi thứ đều phải dọn sẳn.

Cám ơn bạn đã giúp. Từ lúc đầu mình đã nói chỉ là amateur về VBA thôi ( học lóm qua sách, GPE, học qua các form đã được các bạn Up lên GPE) nên có những form mình "mày mò" mình hiểu và tự làm, có form là do các bạn trên GPE làm giúp (bạn xem thì sẽ rõ, mình đều ghi GPE trên code). Đúng là mình phải hiểu mình phải hiểu rõ về chương trình của mình. Code thì thiên hình vạn trạng, trong sách chỉ hướng dẫn phần nào đó thôi (tác giả chỉ có thể giải thích những gì tác giả nghĩ đến hoặc có người đặt câu hỏi), nhiều người nhiều thì có nhiều câu hỏi câu hỏi mà bạn.

Cám ơn bạn rất nhiều về sự góp ý của bạn. Rất vui được trò chuyện với bạn. Chúc bạn sức khỏe.
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom