Giúp VBA tự nhập ngày tháng nhưng sai định dạng dd/mm/yyyy (2 người xem)

Liên hệ QC

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

nguyenvankhang

Thành viên mới
Tham gia
10/11/17
Bài viết
14
Được thích
0
Giới tính
Nam
Chào các anh, các bác!
Em mong muốn các anh giúp em như sau :

Mày mò tìm tòi em mãi mới làm được 1 Form nhập liệu . nhưng khổ nỗi nó lại bị như thế này
- Trong textbox ngày tháng (textbox5) khi nhập ngày tháng theo định dạng dd/mm/yyyy vào thì trong textbox nó lại tự động chuyển thành mm/dd/yyyy , nhưng bấm nhập vào sheet thì nóp lại hiện đúng dd/mm/yyyy .

Em muốn các bác giúp em cho nó hiển thị trong texbox đúng định dạng dd/mm/yyyy , khi nhập vào sheet thì vẫn đúng định dạng dd/mm/yyyy.

Xin cảm ơn!
 

File đính kèm

Chào các anh, các bác!
Em mong muốn các anh giúp em như sau :

Mày mò tìm tòi em mãi mới làm được 1 Form nhập liệu . nhưng khổ nỗi nó lại bị như thế này
- Trong textbox ngày tháng (textbox5) khi nhập ngày tháng theo định dạng dd/mm/yyyy vào thì trong textbox nó lại tự động chuyển thành mm/dd/yyyy , nhưng bấm nhập vào sheet thì nóp lại hiện đúng dd/mm/yyyy .

Em muốn các bác giúp em cho nó hiển thị trong texbox đúng định dạng dd/mm/yyyy , khi nhập vào sheet thì vẫn đúng định dạng dd/mm/yyyy.

Xin cảm ơn!
Để chắc ăn thì cứ chỉ rõ cho nó cái nào là ngày, cái nào là tháng, cái nào là năm.
Thêm hàm này
PHP:
Function DMYtoDate(DMY As String) As Date
    DMYtoDate = VBA.DateSerial(Right(DMY, 4), Mid(DMY, 4, 2), Left(DMY, 2))
End Function
Và sửa lại dòng ghi ngày tháng
PHP:
.Offset(dongcuoi, 4).Value2 = DMYtoDate(Me.TextBox5.Text)
 
Upvote 0
Vẫn không được bác à . bác tải file về chạy thử giúp em
 
Upvote 0
Mình có sửa chút trong trong Sub Nhap bạn coi đúng ý bạn không nhé
 

File đính kèm

Upvote 0
em đọc khó hiểu . bác sửa file giúp em được không ạ
 
Upvote 0
em đọc khó hiểu . bác sửa file giúp em được không ạ
Như thầy ndu96081631 đã nói thì bạn "chém" cái TextBox làm 3 khúc rồi dùng DateSerial nối lại là xong
PHP:
Function Chuyenngay(Txt As String, d As String) As Date
    Dim Tmp
    Txt = Format(Txt, "dd/mm/yyyy")
    Tmp = Split(Txt, d)
    Chuyenngay = DateSerial(Tmp(2), Tmp(1), Tmp(0))
End Function
PHP:
Private Sub TextBox5_AfterUpdate()
    Me.TextBox5 = Format(Chuyenngay(Me.TextBox5, "/"), "dd/mm/yyyy")
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn cũng có thể sử dụng code này vào textbox5 trên textbox cũng sẽ hiển thị đúng định dạng dd/mm/yyyy
Private Sub textbox5_Change()
Dim dDate As Date
dDate = DateSerial(Year(Date), Month(Date), Day(Date))
textbox5.Value = Format(textbox5.Value, "dd/mm/yyyy")
End Sub
 
Upvote 0
Như thầy ndu96081631 đã nói thì bạn "chém" cái TextBox làm 3 khúc rồi dùng DateSerial nối lại là xong
PHP:
Function Chuyenngay(Txt As String, d As String) As Date
    Dim Tmp
    Txt = Format(Txt, "dd/mm/yyyy")
    Tmp = Split(Txt, d)
    Chuyenngay = DateSerial(Tmp(2), Tmp(1), Tmp(0))
End Function
PHP:
Private Sub TextBox5_AfterUpdate()
    Me.TextBox5 = Format(Chuyenngay(Me.TextBox5, "/"), "dd/mm/yyyy")
End Sub
Đã khai báo biến Txt as String thì sẽ không có chuyện Txt = Format(Txt, "dd/mm/yyyy") <---- Đoạn này vô tác dụng
--------------------------------------------
Bạn cũng có thể sử dụng code này vào textbox5 trên textbox cũng sẽ hiển thị đúng định dạng dd/mm/yyyy
Private Sub textbox5_Change()
Dim dDate As Date
dDate = DateSerial(Year(Date), Month(Date), Day(Date))
textbox5.Value = Format(textbox5.Value, "dd/mm/yyyy")
End Sub
Biến dDate dùng để làm gì vậy bạn?
 
Upvote 0
Vấn đề của em nó là ở chỗ
Public Function SuaNgay(NgayBatKy) ở Module1

- Em mong muốn các bác giúp em sửa để khi nhập 15/11/17 thì nó tự chuyển sang 15/11/2017

Thanks các bác


Public Function SuaNgay(NgayBatKy)
ws = NgayBatKy
If Not IsDate(ws) Then
MsgBox "Nhap sai dinh dang ngay thang. Theo dinh dang: dd/mm/yyyy- Vi du: 15/2/18"
SuaNgay = Date
Else
If InStr(1, ws, "/") > 0 Then
KT = "/"
ElseIf InStr(1, ws, "-") > 0 Then
KT = "-"
End If

WP = InStr(1, ws, KT)
WDD = Left(ws, WP - 1)
ws = Mid(ws, WP + 1)
WP = InStr(1, ws, KT)
If WP = 0 Then
WMM = ws
WYY = Year(Date)
Else
WMM = Left(ws, WP - 1)
WYY = Mid(ws, WP + 1)
End If
SuaNgay = DateSerial(WYY, WMM, WDD)
End If
End Function
 
Upvote 0
Vấn đề của em nó là ở chỗ
Public Function SuaNgay(NgayBatKy) ở Module1

- Em mong muốn các bác giúp em sửa để khi nhập 15/11/17 thì nó tự chuyển sang 15/11/2017

Thanks các bác


Public Function SuaNgay(NgayBatKy)
ws = NgayBatKy
If Not IsDate(ws) Then
MsgBox "Nhap sai dinh dang ngay thang. Theo dinh dang: dd/mm/yyyy- Vi du: 15/2/18"
SuaNgay = Date
Else
If InStr(1, ws, "/") > 0 Then
KT = "/"
ElseIf InStr(1, ws, "-") > 0 Then
KT = "-"
End If

WP = InStr(1, ws, KT)
WDD = Left(ws, WP - 1)
ws = Mid(ws, WP + 1)
WP = InStr(1, ws, KT)
If WP = 0 Then
WMM = ws
WYY = Year(Date)
Else
WMM = Left(ws, WP - 1)
WYY = Mid(ws, WP + 1)
End If
SuaNgay = DateSerial(WYY, WMM, WDD)
End If
End Function
Bạn thử thay lại cái dòng này thử xem sao SuaNgay = Format(DateSerial(WYY, WMM, WDD), "dd/mm/yyyy")
 

File đính kèm

Upvote 0
Anh là Super M . anh giúp em được không ?
Trời! Bạn tưởng Super M là Super Man chắc?
-----------------------
Tôi sửa lại code thế này:
1> Code trong module:
Mã:
Function DMYtoDate(ByVal DMY As String) As Date
  'Ngày tháng phai nhap theo chuan "dd/mm/yyyy" hoac "dd-mm-yyyy"
  Dim aTmp
  DMY = Replace(Replace(DMY, "-", vbBack), "/", vbBack)
  If InStr(1, DMY, vbBack) Then
    aTmp = Split(DMY, vbBack)
    DMYtoDate = DateSerial(aTmp(2), aTmp(1), aTmp(0))
  End If
End Function
2> Code trong Form
Mã:
Private Sub NHAP_Click()
  With Worksheets("Sheet1").Range("C60000").End(xlUp)
    .Offset(1, 0).Value = Me.TextBox1.Text
    .Offset(1, 1).Value = Me.TextBox2.Text
    With .Offset(1, 2)
      .NumberFormat = "dd/mm/yyyy"
      .Value = DMYtoDate(Me.TextBox3.Text)
    End With
    .Offset(1, 3).Value = Me.TextBox4.Text
    With .Offset(1, 4)
      .NumberFormat = "dd/mm/yyyy"
      .Value = DMYtoDate(Me.TextBox5.Text)
    End With
  End With
End Sub
------------------------
Cái hàm SuaNgay của bạn không tác dụng gì... càng sửa càng sai. Hãy quên nó đi!
Quan trọng là: Bạn nhập đúng định dạng trên TextBox (d/m/yyyy) và khi gán xuống sheet nó đúng giá trị là được rồi
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom