Code lỗi phiên bản excel (2 người xem)

Liên hệ QC

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

phuocrobe

Thành viên hoạt động
Tham gia
2/11/16
Bài viết
131
Được thích
0
Mình có đoạn code này khi chạy trên excel 2010 thì chạy bình thường nhưng khi chạy trên excel 2003 thì bị lỗi "Provider cannot be found. It may not be properly installed". Nhờ các anh chị xử lý giúp em làm sao để có thể chạy trên excel 2003 được à. Em xin cám ơn -=.,,-=.,,
Sub doichieuketoan()
Application.ScreenUpdating = False
Range("A6:G" & Range("A65000").End(3).Row + 1).ClearContents
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\ketoan.xls;Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
Range("A6").CopyFromRecordset cn.Execute("SELECT f5,f7,f8,f15,f22,f30 FROM [doc1$A15:AK60000] where f2 >0")
Range("A6:A" & Range("A65000").End(3).Row).Value = "=row()-5"
Range("A6:G" & Range("A65000").End(3).Row).Borders.LineStyle = xlContinuous
Range("A6:G60000").Select
ActiveWorkbook.Worksheets("B07").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("B07").Sort.SortFields.Add Key:=Range( _
"C6:C60000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("B07").Sort.SortFields.Add Key:=Range( _
"B6:B60000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("B07").Sort
.SetRange Range("A5:G60000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Bài này mình có post nhầm chuyên mục không nhỉ //////
 
Upvote 0
Mình có đoạn code này khi chạy trên excel 2010 thì chạy bình thường nhưng khi chạy trên excel 2003 thì bị lỗi "Provider cannot be found. It may not be properly installed". Nhờ các anh chị xử lý giúp em làm sao để có thể chạy trên excel 2003 được à. Em xin cám ơn -=.,,-=.,,
Đổi
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\ketoan.xls;Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
Thành
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\ketoan.xls;Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";"
 
Upvote 0
Chân thành cám ơn anh rất nhiều vì đúng cái mà em đang cần -=.,,-=.,,
Đổi
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\ketoan.xls;Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
Thành
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\ketoan.xls;Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";"
 
Upvote 0
Anh cho em hỏi nốt phần tương tự như thế này với, lúc trước em cũng có 1 file tương tự như thế chạy trên excel 2010 thì được nhưng bây giờ copy qua máy khác chạy trên excel 2003 thì nó không chạy được. Code này em cũng nhờ người ta code dùm nên giờ em cũng không biết sửa chỗ nào à. Anh giúp nốt em phần này với. Cám ơn anh nhiều nha }}}}}
Public Sub TDNH()Application.ScreenUpdating = False
On Error Resume Next
Dim Res(), Arr(), i As Long, j As Long, k As Long, Fullpath As String, FilePath As String
Fullpath = "'" & ThisWorkbook.Path & "\[TongHop.xls]THA'!"
Rows(1).End(2) = "=IFERROR(LOOKUP(2,1/(" & Fullpath & "A1:A65536<>""""),ROW(1:65536)),0)"
FilePath = "=" & Fullpath & "A10:EU" & Rows(1).End(2)

With Range("B9").Range("A10:EU" & Rows(1).End(2))
.FormulaArray = FilePath
Res = .Value
.ClearContents
End With
ReDim Preserve Arr(1 To UBound(Res), 1 To 12)
For i = 1 To UBound(Res)
If Res(i, 129) <> Empty Then
k = k + 1
Arr(k, 1) = k
For j = 10 To 13
Arr(k, j - 8) = Res(i, j)
Next
Arr(k, 6) = Res(i, 129)
Arr(k, 7) = Res(i, 2)
Arr(k, 8) = Res(i, 31)
Arr(k, 9) = Res(i, 40) + Res(i, 49) + Res(i, 59) + Res(i, 66)
Arr(k, 10) = Res(i, 91)
Arr(k, 12) = Res(i, 130)
If Res(i, 98) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B3")
If Res(i, 99) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B4")
If Res(i, 100) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B5")
If Res(i, 101) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B6")
If Res(i, 102) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B7")
If Res(i, 103) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B8")
If Res(i, 105) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B9")
If Res(i, 89) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B10")
If Res(i, 89) = 2 Then Arr(k, 11) = Range("Nguyen_nhan!B11")
If Res(i, 106) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B12")
End If
Next
If k Then Range("A10").Resize(k, 12).Value = Arr
Rows(1).End(2).Clear
Application.ScreenUpdating = True
Range("B10:L60000").Select
ActiveWorkbook.Worksheets("Danhsach").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Danhsach").Sort.SortFields.Add Key:=Range( _
"E10:E60000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Danhsach").Sort.SortFields.Add Key:=Range( _
"D10:D60000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Danhsach").Sort
.SetRange Range("B10:L60000")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Đổi
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\ketoan.xls;Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
Thành
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\ketoan.xls;Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";"
 

File đính kèm

Upvote 0
Anh cho em hỏi nốt phần tương tự như thế này với, lúc trước em cũng có 1 file tương tự như thế chạy trên excel 2010 thì được nhưng bây giờ copy qua máy khác chạy trên excel 2003 thì nó không chạy được. Code này em cũng nhờ người ta code dùm nên giờ em cũng không biết sửa chỗ nào à. Anh giúp nốt em phần này với. Cám ơn anh nhiều nha }}}}}
Nó bị lỗi gì? bạn coi số dòng hay cột có quá so với excel 2003 không.
 
Upvote 0
Anh cho em hỏi nốt phần tương tự như thế này với, lúc trước em cũng có 1 file tương tự như thế chạy trên excel 2010 thì được nhưng bây giờ copy qua máy khác chạy trên excel 2003 thì nó không chạy được. Code này em cũng nhờ người ta code dùm nên giờ em cũng không biết sửa chỗ nào à. Anh giúp nốt em phần này với. Cám ơn anh nhiều nha }}}}}

Kiểm tra lại: có thể do đoạn này
Mã:
ActiveWorkbook.Worksheets("Danhsach").Sort.SortFie  lds.Add Key:=Range( _
        "D10:D60000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal

Vì sort ở các phiên bản khác nhau, muốn biết khác thế nào thì record macro để sort ở Excel ver2003 xem thế nào, rồi thay lại
 
Upvote 0
do file này em chia sẻ cho nhiều người dùng, nên có những người khác là những anh chị đã lớn tuổi quen dùng excel 2003 rồi nên chạy không được anh à,
Mình chạy file 04 vẫn ra kết quả. Mà bạn chuyển 2003 làm gì, cái mới không dùng lại đi chuyển về cái cũ.
 
Upvote 0
ok anh, em sẽ kiểm tra lại thử xem, cám ơn anh rất nhiều ạ -=.,,
Kiểm tra lại: có thể do đoạn này
Mã:
ActiveWorkbook.Worksheets("Danhsach").Sort.SortFie  lds.Add Key:=Range( _
        "D10:D60000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal

Vì sort ở các phiên bản khác nhau, muốn biết khác thế nào thì record macro để sort ở Excel ver2003 xem thế nào, rồi thay lại
 
Upvote 0
Thử đổi thành
PHP:
Rows(1).End(2) = "=IF(ISERROR(LOOKUP(2,1/(" & Fullpath & "A1:A65536<>""""),ROW(1:65536))),0,LOOKUP(2,1/(" & Fullpath & "A1:A65536<>""""),ROW(1:65536)))"

và lưu ý, trong code trên của bạn có mấy lệnh SORT, không chỉ 1 cái tôi đề cập trên
 
Lần chỉnh sửa cuối:
Upvote 0
Em đã sửa lại và bỏ lệnh sort rồi nhưng vẫn không được !$@!! anh xem lại giúp em với
Code ban đầu:
Public Sub TDNH()Application.ScreenUpdating = False
On Error Resume Next
Dim Res(), Arr(), i As Long, j As Long, k As Long, Fullpath As String, FilePath As String
Fullpath = "'" & ThisWorkbook.Path & "\[TongHop.xls]THA'!"
Rows(1).End(2) = "=IFERROR(LOOKUP(2,1/(" & Fullpath & "A1:A65536<>""""),ROW(1:65536)),0)"
FilePath = "=" & Fullpath & "A10:EU" & Rows(1).End(2)

With Range("B9").Range("A10:EU" & Rows(1).End(2))
.FormulaArray = FilePath
Res = .Value
.ClearContents
End With
ReDim Preserve Arr(1 To UBound(Res), 1 To 12)
For i = 1 To UBound(Res)
If Res(i, 129) <> Empty Then
k = k + 1
Arr(k, 1) = k
For j = 10 To 13
Arr(k, j - 8) = Res(i, j)
Next
Arr(k, 6) = Res(i, 129)
Arr(k, 7) = Res(i, 2)
Arr(k, 8) = Res(i, 31)
Arr(k, 9) = Res(i, 40) + Res(i, 49) + Res(i, 59) + Res(i, 66)
Arr(k, 10) = Res(i, 91)
Arr(k, 12) = Res(i, 130)
If Res(i, 98) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B3")
If Res(i, 99) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B4")
If Res(i, 100) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B5")
If Res(i, 101) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B6")
If Res(i, 102) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B7")
If Res(i, 103) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B8")
If Res(i, 105) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B9")
If Res(i, 89) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B10")
If Res(i, 89) = 2 Then Arr(k, 11) = Range("Nguyen_nhan!B11")
If Res(i, 106) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B12")
End If
Next
If k Then Range("A10").Resize(k, 12).Value = Arr
Rows(1).End(2).Clear
Application.ScreenUpdating = True
Range("B10:L60000").Select
ActiveWorkbook.Worksheets("Danhsach").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Danhsach").Sort.SortFields.Add Key:=Range( _
"E10:E60000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Danhsach").Sort.SortFields.Add Key:=Range( _
"D10:D60000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Danhsach").Sort
.SetRange Range("B10:L60000")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Code đã sửa
Public Sub TDNH()Application.ScreenUpdating = False
On Error Resume Next
Dim Res(), Arr(), i As Long, j As Long, k As Long, Fullpath As String, FilePath As String
Fullpath = "'" & ThisWorkbook.Path & "\[TongHop.xls]THA'!"
Rows(1).End(2) = "=IF(ISERROR(LOOKUP(2,1/(" & Fullpath & "A1:A65536<>""""),ROW(1:65536))),0,LOOKUP(2,1/(" & Fullpath & "A1:A65536<>""""),ROW(1:65536)))"
FilePath = "=" & Fullpath & "A10:EU" & Rows(1).End(2)

With Range("B9").Range("A10:EU" & Rows(1).End(2))
.FormulaArray = FilePath
Res = .Value
.ClearContents
End With
ReDim Preserve Arr(1 To UBound(Res), 1 To 12)
For i = 1 To UBound(Res)
If Res(i, 129) <> Empty Then
k = k + 1
Arr(k, 1) = k
For j = 10 To 13
Arr(k, j - 8) = Res(i, j)
Next
Arr(k, 6) = Res(i, 129)
Arr(k, 7) = Res(i, 2)
Arr(k, 8) = Res(i, 31)
Arr(k, 9) = Res(i, 40) + Res(i, 49) + Res(i, 59) + Res(i, 66)
Arr(k, 10) = Res(i, 91)
Arr(k, 12) = Res(i, 130)
If Res(i, 98) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B3")
If Res(i, 99) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B4")
If Res(i, 100) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B5")
If Res(i, 101) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B6")
If Res(i, 102) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B7")
If Res(i, 103) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B8")
If Res(i, 105) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B9")
If Res(i, 89) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B10")
If Res(i, 89) = 2 Then Arr(k, 11) = Range("Nguyen_nhan!B11")
If Res(i, 106) = 1 Then Arr(k, 11) = Range("Nguyen_nhan!B12")
End If
Next
If k Then Range("A10").Resize(k, 12).Value = Arr
Rows(1).End(2).Clear
Application.ScreenUpdating = True
End Sub
Thử đổi thành
PHP:
Rows(1).End(2) = "=IF(ISERROR(LOOKUP(2,1/(" & Fullpath & "A1:A65536<>""""),ROW(1:65536))),0,LOOKUP(2,1/(" & Fullpath & "A1:A65536<>""""),ROW(1:65536)))"

và lưu ý, trong code trên của bạn có mấy lệnh SORT, không chỉ 1 cái tôi đề cập trên
 
Upvote 0
bỏ cái
On Error Resume Next

chạy lại, để xem nó báo lỗi ở đâu
Tuyệt đối tránh dùng câu lệnh trên khi tự chúng ta không kiểm soát được lỗi. Diễn đàn này nhiều người lạm dụng lệnh này.

Rồi bạn báo lại đây lỗi gì, không sửa được nữa thì phải đưa tất cả các file liên quan lên đây thì may ra mới biết được. Vì chỉ nói lỗi lỗi thì khó
Vì cái lệnh chết tiệt trên làm bạn bấm cứ im re đó
 
Lần chỉnh sửa cuối:
Upvote 0
Sau khi bỏ dòng này thì nó báo lỗi "Type mismatch". Em gửi file gốc lên anh kiểm tra giúp em với nhé. Em chạy trên Excel 2010 thì bình thường mà chạy trên excel 2003 thì không được.
Em cần chạy được trên excel 2003 vì file này chia sẻ cho nhiều người khác dùng à. Thank anh
bỏ cái
On Error Resume Next

chạy lại, để xem nó báo lỗi ở đâu
Tuyệt đối tránh dùng câu lệnh trên khi tự chúng ta không kiểm soát được lỗi. Diễn đàn này nhiều người lạm dụng lệnh này.

Rồi bạn báo lại đây lỗi gì, không sửa được nữa thì phải đưa tất cả các file liên quan lên đây thì may ra mới biết được. Vì chỉ nói lỗi lỗi thì khó
Vì cái lệnh chết tiệt trên làm bạn bấm cứ im re đó
 

File đính kèm

Upvote 0
Sau khi bỏ dòng này thì nó báo lỗi "Type mismatch". Em gửi file gốc lên anh kiểm tra giúp em với nhé. Em chạy trên Excel 2010 thì bình thường mà chạy trên excel 2003 thì không được.
Em cần chạy được trên excel 2003 vì file này chia sẻ cho nhiều người khác dùng à. Thank anh

Ở dòng nào đoạn code nào, tình huống nào? nên mô tả chi tiết?
Vì tôi không có excel 2003 nữa, nên e rằng test cũng bằng 0
 
Upvote 0
Sau khi bỏ dòng này thì nó báo lỗi "Type mismatch". Em gửi file gốc lên anh kiểm tra giúp em với nhé. Em chạy trên Excel 2010 thì bình thường mà chạy trên excel 2003 thì không được.
Em cần chạy được trên excel 2003 vì file này chia sẻ cho nhiều người khác dùng à. Thank anh
trên đã viết
Ở dòng nào đoạn code nào, tình huống nào? nên mô tả chi tiết?
Vì tôi không có excel 2003 nữa, nên e rằng test cũng bằng 0

Tuy vậy, tôi cố đọc qua code của bạn, thì code đó quá nhiều thứ tồn tại

- code cố gắng dùng công thức để link , lấy dữ liệu từ file TongHop
- code dùng vùng tạm và cell IV1 để lưu các thông tin
- code tự làm rắc rối nhiều vấn đề

tuy nhiên, tôi không hiểu mục tiêu của code bạn làm chi?
 
Upvote 0
Web KT

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

Back
Top Bottom