ftthua2003
Thành viên chính thức


- Tham gia
- 15/8/08
- Bài viết
- 97
- Được thích
- 11
Nội dung mình gửi theo file đính kèm.
Kết quả như thế nào thì sẽ đúng?Nội dung mình gửi theo file đính kèm.
Mình gửi file và nội dung cần giúp đỡ. Mong cả nhà giúp mình với. Xin Cảm ơn cả nhà!
Private Sub CommandButton4_Click()
Dim I As Long
Dim SttID As Long
Dim Dongcuoi As Long
Dim sodong As Long
'Sheets("nxt").Unprotect (".......")
Dongcuoi = Sheets("NXT").[B10000].End(xlUp).Row
On Error Resume Next
SttID = Sheet3.Range("A4:A" & Dongcuoi).Find(Sheet1.Cells(6, 7).Value).Row
If Err.Number <> 0 Then
MsgBox "khong tim thay ID: " & Sheet1.Cells(6, 7).Value
On Error GoTo 0
Exit Sub
End If
On Error GoTo 0
With Sheet1
.[d5] = Sheet3.Cells(SttID, 8).Value
.[d6] = Sheet3.Cells(SttID, 7).Value
.[d7] = Sheet3.Cells(SttID, 9).Value
End With
'them vao
If Sheet3.Range("A" & SttID + 1) = "" Then
sodong = Sheet3.Range("A" & SttID).End(xlDown).Row - 1
If sodong > Dongcuoi Then sodong = Dongcuoi
Else
sodong = SttID
End If
Dim Arr_n(), Arr_D()
Arr_n = Sheet3.Range("A" & SttID & ":K" & sodong).Value
sodong = sodong - SttID + 1
ReDim Arr_D(1 To sodong, 1 To 8)
For I = 1 To sodong
Arr_D(I, 1) = I
Arr_D(I, 2) = Arr_n(I, 2)
Arr_D(I, 3) = Arr_n(I, 3)
Arr_D(I, 4) = Arr_n(I, 4)
Arr_D(I, 5) = Arr_n(I, 5)
Arr_D(I, 6) = Arr_n(I, 6)
Arr_D(I, 7) = Arr_n(I, 10)
Arr_D(I, 8) = Arr_n(I, 11)
Next I
Sheet1.Range("A10").Resize(1000, 8).ClearContents
If sodong Then
Sheet1.Range("A10").Resize(sodong, 8) = Arr_D
End If
End Sub
Cảm ơn bạn đã giúp đỡ.Tạm như thế này đi, tôi đang tắt dòng unprotect đi, bạn thích thì bật lại và nhập lại pass cho đúng cũng như thêm dòng protect ở cuối sub
Mã:Private Sub CommandButton4_Click() Dim I As Long Dim SttID As Long Dim Dongcuoi As Long Dim sodong As Long 'Sheets("nxt").Unprotect (".......") Dongcuoi = Sheets("NXT").[B10000].End(xlUp).Row On Error Resume Next SttID = Sheet3.Range("A4:A" & Dongcuoi).Find(Sheet1.Cells(6, 7).Value).Row If Err.Number <> 0 Then MsgBox "khong tim thay ID: " & Sheet1.Cells(6, 7).Value On Error GoTo 0 Exit Sub End If On Error GoTo 0 With Sheet1 .[d5] = Sheet3.Cells(SttID, 8).Value .[d6] = Sheet3.Cells(SttID, 7).Value .[d7] = Sheet3.Cells(SttID, 9).Value End With 'them vao If Sheet3.Range("A" & SttID + 1) = "" Then sodong = Sheet3.Range("A" & SttID).End(xlDown).Row - 1 If sodong > Dongcuoi Then sodong = Dongcuoi Else sodong = SttID End If Dim Arr_n(), Arr_D() Arr_n = Sheet3.Range("A" & SttID & ":K" & sodong).Value sodong = sodong - SttID + 1 ReDim Arr_D(1 To sodong, 1 To 8) For I = 1 To sodong Arr_D(I, 1) = I Arr_D(I, 2) = Arr_n(I, 2) Arr_D(I, 3) = Arr_n(I, 3) Arr_D(I, 4) = Arr_n(I, 4) Arr_D(I, 5) = Arr_n(I, 5) Arr_D(I, 6) = Arr_n(I, 6) Arr_D(I, 7) = Arr_n(I, 10) Arr_D(I, 8) = Arr_n(I, 11) Next I Sheet1.Range("A10").Resize(1000, 8).ClearContents If sodong Then Sheet1.Range("A10").Resize(sodong, 8) = Arr_D End If End Sub
Cảm ơn bạn đã giúp đỡ.
Bạn giúp mình xem lại úng Với STT =1 code cho kết quả chưa đúng như yêu cầu. Minh chưa tìm ra lỗi.
Private Sub CommandButton4_Click()
Dim b12e082c4c0299ec9224c37bfefe4a220 As Long: Dim mf95e6236034cd36ef091e2f692a307d8 As Long: Dim z84db329f2b612ea7072088e7adc8e094 As Long: Dim zcfa0609cbd34b474b39e740567b1d2fc As Long
z84db329f2b612ea7072088e7adc8e094 = Sheets("NXT").[B10000].End(xlUp).Row
On Error Resume Next
mf95e6236034cd36ef091e2f692a307d8 = Sheet3.Range("A1:A" & z84db329f2b612ea7072088e7adc8e094).Find(Sheet1.Cells(6, 7).Value).Row
If Err.Number <> 0 Then
MsgBox "khong tim thay ID & " & Sheet1.Cells(6, 7).Value
On Error GoTo 0
Exit Sub
End If
On Error GoTo 0
With Sheet1
.[d5] = Sheet3.Cells(mf95e6236034cd36ef091e2f692a307d8, 8).Value
.[d6] = Sheet3.Cells(mf95e6236034cd36ef091e2f692a307d8, 7).Value
.[d7] = Sheet3.Cells(mf95e6236034cd36ef091e2f692a307d8, 9).Value
End With
If Sheet3.Range("A" & mf95e6236034cd36ef091e2f692a307d8 + 1) = "" Then
zcfa0609cbd34b474b39e740567b1d2fc = Sheet3.Range("A" & mf95e6236034cd36ef091e2f692a307d8).End(xlDown).Row - 1
If zcfa0609cbd34b474b39e740567b1d2fc > z84db329f2b612ea7072088e7adc8e094 Then zcfa0609cbd34b474b39e740567b1d2fc = z84db329f2b612ea7072088e7adc8e094
Else
zcfa0609cbd34b474b39e740567b1d2fc = mf95e6236034cd36ef091e2f692a307d8
End If
Dim b0f1f6301f057c852173ae7b0045d38b3(), b08c606139aa4c989f7db551da5821ec1()
b0f1f6301f057c852173ae7b0045d38b3 = Sheet3.Range("A" & mf95e6236034cd36ef091e2f692a307d8 & ":K" & zcfa0609cbd34b474b39e740567b1d2fc).Value
zcfa0609cbd34b474b39e740567b1d2fc = zcfa0609cbd34b474b39e740567b1d2fc - mf95e6236034cd36ef091e2f692a307d8 + 1
ReDim b08c606139aa4c989f7db551da5821ec1(1 To zcfa0609cbd34b474b39e740567b1d2fc, 1 To 8)
For b12e082c4c0299ec9224c37bfefe4a220 = 1 To zcfa0609cbd34b474b39e740567b1d2fc
b08c606139aa4c989f7db551da5821ec1(b12e082c4c0299ec9224c37bfefe4a220, 1) = b12e082c4c0299ec9224c37bfefe4a220
b08c606139aa4c989f7db551da5821ec1(b12e082c4c0299ec9224c37bfefe4a220, 2) = b0f1f6301f057c852173ae7b0045d38b3(b12e082c4c0299ec9224c37bfefe4a220, 2)
b08c606139aa4c989f7db551da5821ec1(b12e082c4c0299ec9224c37bfefe4a220, 3) = b0f1f6301f057c852173ae7b0045d38b3(b12e082c4c0299ec9224c37bfefe4a220, 3)
b08c606139aa4c989f7db551da5821ec1(b12e082c4c0299ec9224c37bfefe4a220, 4) = b0f1f6301f057c852173ae7b0045d38b3(b12e082c4c0299ec9224c37bfefe4a220, 4)
b08c606139aa4c989f7db551da5821ec1(b12e082c4c0299ec9224c37bfefe4a220, 5) = b0f1f6301f057c852173ae7b0045d38b3(b12e082c4c0299ec9224c37bfefe4a220, 5)
b08c606139aa4c989f7db551da5821ec1(b12e082c4c0299ec9224c37bfefe4a220, 6) = b0f1f6301f057c852173ae7b0045d38b3(b12e082c4c0299ec9224c37bfefe4a220, 6)
b08c606139aa4c989f7db551da5821ec1(b12e082c4c0299ec9224c37bfefe4a220, 7) = b0f1f6301f057c852173ae7b0045d38b3(b12e082c4c0299ec9224c37bfefe4a220, 10)
b08c606139aa4c989f7db551da5821ec1(b12e082c4c0299ec9224c37bfefe4a220, 8) = b0f1f6301f057c852173ae7b0045d38b3(b12e082c4c0299ec9224c37bfefe4a220, 11)
Next b12e082c4c0299ec9224c37bfefe4a220
Sheet1.Range("A10").Resize(1000, 8).ClearContents
If zcfa0609cbd34b474b39e740567b1d2fc Then
Sheet1.Range("A10").Resize(zcfa0609cbd34b474b39e740567b1d2fc, 8) = b08c606139aa4c989f7db551da5821ec1
End If
End Sub
Private Sub CommandButton4_Click()
Dim So1 As Long: Dim So2 As Long: Dim So3 As Long: Dim So4 As Long
So3 = Sheets("NXT").[B10000].End(xlUp).Row
On Error Resume Next
So2 = Sheet3.Range("A1:A" & So3).Find(Sheet1.Cells(6, 7).Value).Row
If Err.Number <> 0 Then
MsgBox "khong tim thay ID & " & Sheet1.Cells(6, 7).Value
On Error GoTo 0
Exit Sub
End If
On Error GoTo 0
With Sheet1
.[d5] = Sheet3.Cells(So2, 8).Value
.[d6] = Sheet3.Cells(So2, 7).Value
.[d7] = Sheet3.Cells(So2, 9).Value
End With
If Sheet3.Range("A" & So2 + 1) = "" Then
So4 = Sheet3.Range("A" & So2).End(xlDown).Row - 1
If So4 > So3 Then So4 = So3
Else
So4 = So2
End If
Dim Mang1(), Mang2()
Mang1 = Sheet3.Range("A" & So2 & ":K" & So4).Value
So4 = So4 - So2 + 1
ReDim Mang2(1 To So4, 1 To 8)
For So1 = 1 To So4
Mang2(So1, 1) = So1
Mang2(So1, 2) = Mang1(So1, 2)
Mang2(So1, 3) = Mang1(So1, 3)
Mang2(So1, 4) = Mang1(So1, 4)
Mang2(So1, 5) = Mang1(So1, 5)
Mang2(So1, 6) = Mang1(So1, 6)
Mang2(So1, 7) = Mang1(So1, 10)
Mang2(So1, 8) = Mang1(So1, 11)
Next So1
Sheet1.Range("A10").Resize(1000, 8).ClearContents
If So4 Then
Sheet1.Range("A10").Resize(So4, 8) = Mang2
End If
End Sub
Vậy bạn sửa gọn lại thế này (Tạm mượn code của bạn ppc0312 nhé)
Mã:Private Sub CommandButton4_Click() Dim So1 As Long: Dim So2 As Long: Dim So3 As Long: Dim So4 As Long So3 = Sheets("NXT").[B10000].End(xlUp).Row On Error Resume Next So2 = Sheet3.Range("A1:A" & So3).Find(Sheet1.Cells(6, 7).Value).Row If Err.Number <> 0 Then MsgBox "khong tim thay ID & " & Sheet1.Cells(6, 7).Value On Error GoTo 0 Exit Sub End If On Error GoTo 0 With Sheet1 .[d5] = Sheet3.Cells(So2, 8).Value .[d6] = Sheet3.Cells(So2, 7).Value .[d7] = Sheet3.Cells(So2, 9).Value End With If Sheet3.Range("A" & So2 + 1) = "" Then So4 = Sheet3.Range("A" & So2).End(xlDown).Row - 1 If So4 > So3 Then So4 = So3 Else So4 = So2 End If Dim Mang1(), Mang2() Mang1 = Sheet3.Range("A" & So2 & ":K" & So4).Value [COLOR=#ff0000]So4 = So4 - So2 + 1 [/COLOR][COLOR=#0000ff][B]ReDim Mang2(1 To So4, 1 To 8)[/B][/COLOR][COLOR=#ff0000] For So1 = 1 To So4 Mang2(So1, 1) = So1 Mang2(So1, 2) = Mang1(So1, 2) Mang2(So1, 3) = Mang1(So1, 3) Mang2(So1, 4) = Mang1(So1, 4) Mang2(So1, 5) = Mang1(So1, 5) Mang2(So1, 6) = Mang1(So1, 6) Mang2(So1, 7) = Mang1(So1, 10) Mang2(So1, 8) = Mang1(So1, 11) Next So1 Sheet1.Range("A10").Resize(1000, 8).ClearContents [/COLOR][COLOR=#0000ff][B]If So4 Then[/B][/COLOR][COLOR=#ff0000] Sheet1.Range("A10").Resize(So4, 8) = Mang2 End If[/COLOR] End Sub
Code đúng rồi bạn.
Nhưng nhìn rối quá. Ecec
Private Sub CommandButton4_Click()
Dim I As Long
Dim SttID As Long
Dim Dongcuoi As Long
Dim sodong As Long
'Sheets("nxt").Unprotect (".......")
Dongcuoi = Sheets("NXT").[B10000].End(xlUp).Row
On Error Resume Next
SttID = Sheet3.Range("A1:A" & Dongcuoi).Find(Sheet1.Cells(6, 7).Value).Row
If Err.Number <> 0 Then
MsgBox "khong tim thay ID: " & Sheet1.Cells(6, 7).Value
On Error GoTo 0
Exit Sub
End If
On Error GoTo 0
With Sheet1
.[d5] = Sheet3.Cells(SttID, 8).Value
.[d6] = Sheet3.Cells(SttID, 7).Value
.[d7] = Sheet3.Cells(SttID, 9).Value
End With
'them vao
If Sheet3.Range("A" & SttID + 1) = "" Then
sodong = Sheet3.Range("A" & SttID).End(xlDown).Row - 1
If sodong > Dongcuoi Then sodong = Dongcuoi
Else
sodong = SttID
End If
Dim Arr_n(), Arr_D()
Arr_n = Sheet3.Range("A" & SttID & ":K" & sodong).Value
sodong = sodong - SttID + 1
ReDim Arr_D(1 To sodong, 1 To 8)
For I = 1 To sodong
Arr_D(I, 1) = I
Arr_D(I, 2) = Arr_n(I, 2)
Arr_D(I, 3) = Arr_n(I, 3)
Arr_D(I, 4) = Arr_n(I, 4)
Arr_D(I, 5) = Arr_n(I, 5)
Arr_D(I, 6) = Arr_n(I, 6)
Arr_D(I, 7) = Arr_n(I, 10)
Arr_D(I, 8) = Arr_n(I, 11)
Next I
Sheet1.Range("A10").Resize(1000, 8).ClearContents
If sodong Then
Sheet1.Range("A10").Resize(sodong, 8) = Arr_D
End If
End Sub
Dựa vào cót của ppc0312, giaiphap, mình sửa đổi được code sau
Code này nếu vùng sữa chữa mới nhiều hơn vùng dữ liệu cũ thì chèn vào dòng cuối của dữ liệu cũ đó. Còn Vùng mới ít hơn Vùng dữ liệu cũ thì xóa bớt dòng.
Mình thử code chạy, nhưng code dài quá.
Mình nhờ các anh, các bạn xem còn cách nào ngắn gọn hơn không.
Cam ơn bạn PPC0312 nhieu nhé.
Nhờ bạn và cả nhà xem qua code bài http://www.giaiphapexcel.com/forum/...ode-với-vòng-lặp-For-Next&p=697787#post697787 giúp mình với.
Dựa vào cót của ppc0312,....
Cảm ơn bác Vetmini đã góp ý kiến.
- Mình dân kỹ thuật Xây dựng nên về kỹ năng lập trình mình mù tịt, có chăng chỉ học qua loa lấy lệ trên ghế Đại học đại cương.
...
Máy hôm nay do bận công việc nên chưa trả lời Bác được.Tôi cũng từng học trường ĐH BK tpHCM
Tuy tôi không học ngành xây dựng nhưng chúng tôi, tức là mọi ngành, đều học chung môn lập trình.
Vì vậy tôi biết khả năng lập trình của dân ngành chính quy xây dựng.
Chuyện qua loa thì có lẽ do trường học của bạn, không phải do ngành học.
Như bạn nói User form có độ trễ, với dữ liệu ít thì chạy được nhưng với Dữ liệu mình Mail lên GPE thì xử lý chậm hơn rất nhiều. Tương lai trong quá trình mình sử dụng khi Phần Dữ liệu cập nhật bổ sung nữa thì mình nghĩ Sử dụng User Form chắc Tèo quá.Dòng đỏ đỏ ở trên í bạn là sao??? Khi lick chuột vào vùng điều kiện thì Sự kiện show cái User Form của bạn lên có độ trễ hay sao???
Trước kia mình có sử dụng Combobox để nhập liệu nhưng để tìm kiếm tên vật tư trên Combobox mình làm không được. Nên có nhờ diễn đàn giúp đỡ và chuyển qua UserForm như Bảng hiện tại.Nếu muốn thì dòng đỏ đỏ ấy không cần user form, có thể làm trực tiếp trên Range (sheet) đó luôn thông qua 1 vài cái textbox+listbox sẽ cho tốc độ nhanh hơn show form...
Thật tuyệt vời bạn hpkhuong!!!cảm nhận nó như thế nào nhé!
Chỉ vậy thôi...!
Vẫn chưa được bạn ah.Vậy bạn lấy lại 2 dòng sau. Thế cho 2 dòng ở trên
Mã:ColA = 0.08 * Col + 0.19 * Col + 0.62 * Col ColB = 0.08 * Col & ";" & 0.19 * Col & ";" & 0.62 * Col & ";" & Col - ColA - 4
Rồi test xem có ổn chưa? có ưng í chưa nha.