Dữ liệu nhảy cách nhau

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

NH_DK

Let's patience
Tham gia
29/7/10
Bài viết
865
Được thích
1,203
Nghề nghiệp
Kế toán
Code của em sao chỗ nào mà nó lại nhảy cách nhau như vậy? (Xem trong mục Database)

PHP:
Option Explicit
Sub Ghi()
  Dim Rng As Range, MyRng As Range, MyR As Range
  Dim dongdau&, i&
  On Error Resume Next
  Set Rng = S1.Range(S1.[A2], S1.[A20].End(xlUp)).Offset(1)
  dongdau = Rng.Rows.Count
  Set MyRng = S1.Range(S1.[A3], S1.[a65000].End(xlUp))
  If S1.Range("G1") = "" Then MsgBox "Pls enti code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
  Set MyR = MyRng.Find(S1.[G1].Value, , xlValues, xlWhole)
  If MyR Is Nothing Then
     With S5
       i = .[A50000].End(xlUp).Row + 1
      .Cells(i, 1).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 0).Resize(, 1).Value
      .Cells(i, 2).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 1).Resize(, 1).Value
      .Cells(i, 3).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 2).Resize(, 1).Value
      .Cells(i, 4).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 3).Resize(, 1).Value
      .Cells(i, 5).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 4).Resize(, 1).Value
      .Cells(i, 6).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 5).Resize(, 1).Value
      'S1.Range("A3:F20").ClearContents
    End With
 Else
    MsgBox "HAVE A GOOD TIME!", vbCritical, "MINDA VIETNAM CO.,LTD"
 End If
End Sub
 

File đính kèm

Code của em sao chỗ nào mà nó lại nhảy cách nhau như vậy? (Xem trong mục Database)

PHP:
Option Explicit
Sub Ghi()
  Dim Rng As Range, MyRng As Range, MyR As Range
  Dim dongdau&, i&
  On Error Resume Next
  Set Rng = S1.Range(S1.[A2], S1.[A20].End(xlUp)).Offset(1)
  dongdau = Rng.Rows.Count
  Set MyRng = S1.Range(S1.[A3], S1.[a65000].End(xlUp))
  If S1.Range("G1") = "" Then MsgBox "Pls enti code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
  Set MyR = MyRng.Find(S1.[G1].Value, , xlValues, xlWhole)
  If MyR Is Nothing Then
     With S5
       i = .[A50000].End(xlUp).Row + 1
      .Cells(i, 1).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 0).Resize(, 1).Value
      .Cells(i, 2).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 1).Resize(, 1).Value
      .Cells(i, 3).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 2).Resize(, 1).Value
      .Cells(i, 4).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 3).Resize(, 1).Value
      .Cells(i, 5).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 4).Resize(, 1).Value
      .Cells(i, 6).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 5).Resize(, 1).Value
      'S1.Range("A3:F20").ClearContents
    End With
 Else
    MsgBox "HAVE A GOOD TIME!", vbCritical, "MINDA VIETNAM CO.,LTD"
 End If
End Sub
Qua code trên anh không hiểu em làm gì nhưng có ý kiến như sau
1.
PHP:
 Set Rng = S1.Range(S1.[A2], S1.[A20].End(xlUp)).Offset(1)
Tương đương
PHP:
 Set Rng = S1.Range(S1.[A3], S1.[A20].End(xlUp).Offset(1))
Ý em là sao?
2.
PHP:
 .Cells(i, 1).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 0).Resize(, 1).Value
      .Cells(i, 2).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 1).Resize(, 1).Value
      .Cells(i, 3).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 2).Resize(, 1).Value
      .Cells(i, 4).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 3).Resize(, 1).Value
      .Cells(i, 5).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 4).Resize(, 1).Value
      .Cells(i, 6).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 5).Resize(, 1).Value
Sao em không dùng:
PHP:
For j=1 to 6
   .Cells(i, j).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, j-1).Resize(, 1).Value
Next
 
Lần chỉnh sửa cuối:
Upvote 0
Code của em sao chỗ nào mà nó lại nhảy cách nhau như vậy? (Xem trong mục Database)

PHP:
Option Explicit
Sub Ghi()
  Dim Rng As Range, MyRng As Range, MyR As Range
  Dim dongdau&, i&
  On Error Resume Next
  Set Rng = S1.Range(S1.[A2], S1.[A20].End(xlUp)).Offset(1)
  dongdau = Rng.Rows.Count
  Set MyRng = S1.Range(S1.[A3], S1.[a65000].End(xlUp))
  If S1.Range("G1") = "" Then MsgBox "Pls enti code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
  Set MyR = MyRng.Find(S1.[G1].Value, , xlValues, xlWhole)
  If MyR Is Nothing Then
     With S5
       i = .[A50000].End(xlUp).Row + 1
      .Cells(i, 1).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 0).Resize(, 1).Value
      .Cells(i, 2).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 1).Resize(, 1).Value
      .Cells(i, 3).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 2).Resize(, 1).Value
      .Cells(i, 4).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 3).Resize(, 1).Value
      .Cells(i, 5).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 4).Resize(, 1).Value
      .Cells(i, 6).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 5).Resize(, 1).Value
      'S1.Range("A3:F20").ClearContents
    End With
 Else
    MsgBox "HAVE A GOOD TIME!", vbCritical, "MINDA VIETNAM CO.,LTD"
 End If
End Sub
xem code của a Ngọc em thấy có hai vấn đề làm nó nhảy dòng:
1/ là do tiêu đề vùng "a1:BB2" A megcell---> sai với kiểu .end(xlup) không nên megcell.
2/ dòng này : i = .[A50000].End(xlUp).Row + 1 sửa lại thành :
i = .[A50000].End(xlUp).Row --->ok
Nhìn code đúng là hoa cả mắt.
(PM:dạo này bác bận gì mà thỉnh thoảng gọi cafe khó thật)
 
Upvote 0
Em sửa thế này:
PHP:
Sub Ghi()
  Dim Rng As Range, MyRng As Range, MyR As Range
  Dim dongdau&, i&, j&
  On Error Resume Next
  Set Rng = S1.Range(S1.[A2], S1.[A20].End(xlUp)).Offset(1)
  dongdau = Rng.Rows.Count
  Set MyRng = S5.Range(S5.[A2], S5.[a65000].End(xlUp)).Offset(1)
  If S1.Range("G1").Value = "" Then MsgBox "Pls enti code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
  Set MyR = MyRng.Find(S1.[G1].Value, , xlValues, xlWhole)
  If MyR Is Nothing Then
    With S5
        i = .[A50000].End(xlUp).Row
        For j = 1 To 6
            .Cells(i, j).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, j - 1).Resize(, 1).Value
        Next
          'S1.Range("A3:F20").ClearContents
    End With
 Else
    MsgBox "HAVE A GOOD TIME!", vbCritical, "MINDA VIETNAM CO.,LTD"
 End If
End Sub
Nhưng vẫn không ổn?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em sửa thế này:
PHP:
Sub Ghi()
  Dim Rng As Range, MyRng As Range, MyR As Range
  Dim dongdau&, i&, j&
  On Error Resume Next
  Set Rng = S1.Range(S1.[A2], S1.[A20].End(xlUp)).Offset(1)
  dongdau = Rng.Rows.Count
  Set MyRng = S5.Range(S5.[A2], S5.[a65000].End(xlUp)).Offset(1)
  If S1.Range("G1").Value = "" Then MsgBox "Pls enti code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
  Set MyR = MyRng.Find(S1.[G1].Value, , xlValues, xlWhole)
  If MyR Is Nothing Then
    With S5
        i = .[A50000].End(xlUp).Row
        For j = 1 To 6
            .Cells(i, j).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, j - 1).Resize(, 1).Value
        Next
          'S1.Range("A3:F20").ClearContents
    End With
 Else
    MsgBox "HAVE A GOOD TIME!", vbCritical, "MINDA VIETNAM CO.,LTD"
 End If
End Sub
Nhưng vẫn không ổn?
A vẫn còn để megcell kìa? vì thế nên dòng đầu của CSDL luôn nhảy lên dòng tiêu đề.Ở sheet CSDL Anh bỏ megcell hết đi và dòng tiêu đề để sao cho( "A2:G2" có kí hiệu <>"") Là ok.
-Pm: A thiết kế kiểu này liệu hợp lý chưa nhỉ? nếu người dùng nhỡ tay nhấn làm phát 3 lần cái save luôn một lúc? liệu lúc đó thế nào? chắc CSDL toi luôn.
+ em thấy ở sheet in và sheets CSDL cấu trúc giống nhau sau không dùng rng.ADDRESS cho nó chuyển dữ liệu từ sheet in sang sheet csdl luôn?
 
Lần chỉnh sửa cuối:
Upvote 0
khoavu87 cho mình hỏi thêm chút xíu nữa nha:
Tại ô G1 mình nhập là IN thì cập nhật bình thường rùi. Nhưng nếu mình muốn nhập OUT để cột số lượng của nó cập nhập sang cột ISSUE của mục Database thì mình đswuar code thế này:
PHP:
Sub Ghi()
  Dim Rng As Range, MyRng As Range, MyR As Range
  Dim dongdau&, i&, j&
  On Error Resume Next
  Set Rng = S1.Range(S1.[A2], S1.[A20].End(xlUp)).Offset(1)
  dongdau = Rng.Rows.Count
  Set MyRng = S5.Range(S5.[A3], S5.[a65000].End(xlUp))
  If S1.Range("G1").Value = "" Then MsgBox "Pls enti code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
  Set MyR = MyRng.Find(S1.[G1].Value, , xlValues, xlWhole)
  If MyR.Value = "IN" Then 'Is Nothing Then
    With S5
        i = .[A50000].End(xlUp).Row
        For j = 1 To 6
            .Cells(i, j).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, j - 1).Resize(, 1).Value
        Next
    End With
  Else
    With S5
        For j = 1 To 5
            .Cells(i, j).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, j - 1).Resize(, 1).Value
        Next
            .Cells(i, 7).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 6).Resize(, 1).Value
    End With
  End If
End Sub
Nhưng nó vẫn không ổn?
 

File đính kèm

Upvote 0
khoavu87 cho mình hỏi thêm chút xíu nữa nha:
Tại ô G1 mình nhập là IN thì cập nhật bình thường rùi. Nhưng nếu mình muốn nhập OUT để cột số lượng của nó cập nhập sang cột ISSUE của mục Database thì mình đswuar code thế này:
PHP:
Sub Ghi()
  Dim Rng As Range, MyRng As Range, MyR As Range
  Dim dongdau&, i&, j&
  On Error Resume Next
  Set Rng = S1.Range(S1.[A2], S1.[A20].End(xlUp)).Offset(1)
  dongdau = Rng.Rows.Count
  Set MyRng = S5.Range(S5.[A3], S5.[a65000].End(xlUp))
  If S1.Range("G1").Value = "" Then MsgBox "Pls enti code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
  Set MyR = MyRng.Find(S1.[G1].Value, , xlValues, xlWhole)
  If MyR.Value = "IN" Then 'Is Nothing Then
    With S5
        i = .[A50000].End(xlUp).Row
        For j = 1 To 6
            .Cells(i, j).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, j - 1).Resize(, 1).Value
        Next
    End With
  Else
    With S5
        For j = 1 To 5
            .Cells(i, j).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, j - 1).Resize(, 1).Value
        Next
            .Cells(i, 7).Offset(1, 0).Resize(dongdau).Value = Rng.Offset(, 6).Resize(, 1).Value
    End With
  End If
End Sub
Nhưng nó vẫn không ổn?
Phần lấy dữ liệu từ S1 sang S5 sao tôi thấy nó lủng củng quá. Sao không là vầy:
PHP:
S5.Range("A60000").End(xlUp).Offset(1).Resize(1000, 6).Value = S1.Range("A3:F1003").Value
1 dòng code duy nhất
 
Upvote 0
Sao của em vẫn bị lỗi:
PHP:
Sub Ghi()
  Dim Rng As Range
  Application.ScreenUpdating = False
  On Error Resume Next
  Set Rng = S1.Range("G1")
  With S5
    If Rng.Value = "IN" Then
      .Range("A60000").End(xlUp).Offset(1).Resize(1000, 6).Value = S1.Range("A3:F20").Value
    ElseIf Rng.Value = "OUT" Then
      .Range("A60000").End(xlUp).Offset(1).Resize(60000, 5).Value = S1.Range("A3:E20").Value
      .Range("A60000").End(xlUp).Offset(1).Offset(-2, 6).Resize(60000, 1).Value = S1.Range("F3:F20").Value
    Else
      MsgBox "Pls choose code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
    End If
  End With
  S1.Range("A2:F20").ClearContents
  Set Rng = Nothing
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Sao của em vẫn bị lỗi:
PHP:
Sub Ghi()
  Dim Rng As Range
  Application.ScreenUpdating = False
  On Error Resume Next
  Set Rng = S1.Range("G1")
  With S5
    If Rng.Value = "IN" Then
      .Range("A60000").End(xlUp).Offset(1).Resize(1000, 6).Value = S1.Range("A3:F20").Value
    ElseIf Rng.Value = "OUT" Then
      .Range("A60000").End(xlUp).Offset(1).Resize(60000, 5).Value = S1.Range("A3:E20").Value
      .Range("A60000").End(xlUp).Offset(1).Offset(-2, 6).Resize(60000, 1).Value = S1.Range("F3:F20").Value
    Else
      MsgBox "Pls choose code IN or OUT", vbCritical, "MINDA VIETNAM CO.,LTD": Exit Sub
    End If
  End With
  S1.Range("A2:F20").ClearContents
  Set Rng = Nothing
End Sub
Sửa
PHP:
S1.Range("A2:F20").ClearContents
Thành:
PHP:
S1.Range("A3:F20").ClearContents
thử xem nhé
 
Upvote 0
Cám ơn anh @viehoai nhiều! Nhưng em đã sửa rùi mà vẫn chưa được? Em muốn khi chọn ở ô G1 (mục P/O) là IN thì số lượng sẽ cập nhập vào cột Incoming (Database). Và ngược lại, nếu chọn OUT thì số lượng sẽ cập nhật vào cột Issue (Database). Nhưng hiện tại nó nhảy chưa đúng ý ah!
 
Upvote 0
Cám ơn anh @viehoai nhiều! Nhưng em đã sửa rùi mà vẫn chưa được? Em muốn khi chọn ở ô G1 (mục P/O) là IN thì số lượng sẽ cập nhập vào cột Incoming (Database). Và ngược lại, nếu chọn OUT thì số lượng sẽ cập nhật vào cột Issue (Database). Nhưng hiện tại nó nhảy chưa đúng ý ah!
Cái này nếu tôi nhớ không lầm thì đã làm cho bạn rồi...
Chuyện quá nhỏ, bạn cũng rành VBA, tự nghiên cứu xem (chỉ 1 cái IF tùy thuộc vào G1 sẽ quyết định chuyển số lượng vào đâu)
Bạn máy móc quá... Hic...
 
Upvote 0
Web KT

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

Back
Top Bottom