Code load dữ liệu chạy được trên máy này nhưng lỗi trên máy khác ?

  • Thread starter thanhphuongvip
  • Ngày gửi
Trạng thái
Không mở trả lời sau này.
T

thanhphuongvip

Guest
Xin chào anh em, mình không hiểu sao File Excel của mình có 1 code chạy đc trên máy mình nhưng khi copy sang các máy khác nó đều báo lỗi, mình đoán là mình chưa bật một chức năng gì đó của VBA thì phải. Cụ thể như sau:

Đây là bảng hóa đơn của mình, có chức năng là Tra cứu hóa đơn để in lại các hóa đơn đã Lưu
Bạn cần đăng nhập để thấy đính kèm


Nhưng khi sang máy khác, cũng bấm chọn số hóa đơn cần load lại, thì nó báo lỗi thế này:

Bạn cần đăng nhập để thấy đính kèm


Bạn cần đăng nhập để thấy đính kèm


Đây là code:

Mã:
Option Explicit
Dim lrBH As Long
Dim fRow As Byte
Dim lrHD As Integer
Dim DicHD As New Scripting.Dictionary
Dim HD

Private Sub Lsthd_Click()
Dim vtHD As Long
Dim CountSP As Integer
Dim rngBH As Range
Dim Ngay As Date
Dim KH As String
Dim DiaChi As String
Dim SDT As String
Application.ScreenUpdating = False
Application.EnableEvents = False
lrHD = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Sheet2.Range("A12:I" & lrHD + 1).ClearContents

    Sheet4.Range("N" & fRow & ":N" & lrBH).Formula = "=NUMBERVALUE(A" & fRow & ")"
    Set rngBH = Sheet4.Range("N" & fRow & ":N" & lrBH)
    vtHD = Application.Match(CLng(LstHD.Text), rngBH, 0)

    CountSP = Application.CountIf(rngBH, LstHD.Text)
    Sheet4.Range("C" & vtHD + fRow - 1 & ":J" & vtHD + fRow + CountSP - 2).Copy _
    Destination:=Sheet2.Range("B12")
  
    Ngay = Sheet4.Range("B" & vtHD + fRow - 1)
    KH = Sheet4.Range("K" & vtHD + fRow - 1)
    DiaChi = Sheet4.Range("L" & vtHD + fRow - 1)
    SDT = Sheet4.Range("M" & vtHD + fRow - 1)
  
    With Sheet2
        .Range("B4") = LstHD.Text
        .Range("C5") = KH
        .Range("H5") = DiaChi
        .Range("H6") = Ngay
        .Range("C6") = SDT
        .Range("A12:A" & 11 + CountSP).FormulaArray = "=ROW()-11"

    End With
    Sheet4.Range("N" & fRow & ":N" & lrBH).Clear
   Unload Me
   Range("A12:I40").Font.Size = 14
   Range("A12:I40").Font.Name = "Times New Roman"

  
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Máy mình sài office 365, máy khác sài office 2010, đã bật macro, đã add Microsoft Scripting Runtime đầy đủ.
File:
Xin cảm ơn anh em đã trợ giúp!
 
Sửa lần cuối bởi điều hành viên:

giaiphapvba

Administrator
Thành viên BQT
Lỗi này là Macro không hiểu lệnh. Lệnh của anh không có gì lạ, ngoại trừ đoạn này em không hiểu ạ:
Mã:
LstHD.Text
Cái này được định nghĩa ở đâu vậy anh?
 
S

Snow24

Guest
Xin chào anh em, mình không hiểu sao File Excel của mình có 1 code chạy đc trên máy mình nhưng khi copy sang các máy khác nó đều báo lỗi, mình đoán là mình chưa bật một chức năng gì đó của VBA thì phải. Cụ thể như sau:

Đây là bảng hóa đơn của mình, có chức năng là Tra cứu hóa đơn để in lại các hóa đơn đã Lưu
Bạn cần đăng nhập để thấy đính kèm


Nhưng khi sang máy khác, cũng bấm chọn số hóa đơn cần load lại, thì nó báo lỗi thế này:

Bạn cần đăng nhập để thấy đính kèm


Bạn cần đăng nhập để thấy đính kèm


Đây là code:

Mã:
Option Explicit
Dim lrBH As Long
Dim fRow As Byte
Dim lrHD As Integer
Dim DicHD As New Scripting.Dictionary
Dim HD

Private Sub Lsthd_Click()
Dim vtHD As Long
Dim CountSP As Integer
Dim rngBH As Range
Dim Ngay As Date
Dim KH As String
Dim DiaChi As String
Dim SDT As String
Application.ScreenUpdating = False
Application.EnableEvents = False
lrHD = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Sheet2.Range("A12:I" & lrHD + 1).ClearContents

    Sheet4.Range("N" & fRow & ":N" & lrBH).Formula = "=NUMBERVALUE(A" & fRow & ")"
    Set rngBH = Sheet4.Range("N" & fRow & ":N" & lrBH)
    vtHD = Application.Match(CLng(LstHD.Text), rngBH, 0)

    CountSP = Application.CountIf(rngBH, LstHD.Text)
    Sheet4.Range("C" & vtHD + fRow - 1 & ":J" & vtHD + fRow + CountSP - 2).Copy _
    Destination:=Sheet2.Range("B12")
   
    Ngay = Sheet4.Range("B" & vtHD + fRow - 1)
    KH = Sheet4.Range("K" & vtHD + fRow - 1)
    DiaChi = Sheet4.Range("L" & vtHD + fRow - 1)
    SDT = Sheet4.Range("M" & vtHD + fRow - 1)
   
    With Sheet2
        .Range("B4") = LstHD.Text
        .Range("C5") = KH
        .Range("H5") = DiaChi
        .Range("H6") = Ngay
        .Range("C6") = SDT
        .Range("A12:A" & 11 + CountSP).FormulaArray = "=ROW()-11"

    End With
    Sheet4.Range("N" & fRow & ":N" & lrBH).Clear
   Unload Me
   Range("A12:I40").Font.Size = 14
   Range("A12:I40").Font.Name = "Times New Roman"
 
   
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Máy mình sài office 365, máy khác sài office 2010, đã bật macro, đã add Microsoft Scripting Runtime đầy đủ.
Xin cảm ơn anh em đã trợ giúp!
Mình đoán là cho thêm cái hàm Cdate vào trước hàm clng là được.Do mỗi máy đọc ngày tháng năm khác nhau nên có lỗi.
 

Euler

Administrator
Thành viên BQT
Cái CLNG chỉ là chuyển text thành số, nên mình nghĩ không liên quan tới Cdate. Nhưng cái LstHD.Text nếu là rỗng, thì có khả năng dẫn tới hàm bị lỗi (em đoán mò như thầy bói xem voi vì không có file để thử). Anh kiểm tra lại xem sao.
 
T

thanhphuongvip

Guest
ah mình gửi file cho anh em mở thử trên máy anh em xem đc ko? là biết lỗi ngay:
 
Sửa lần cuối bởi điều hành viên:

Euler

Administrator
Thành viên BQT
Em vừa mở không bị lỗi anh ạ. Trong trường hợp này, nếu đưa ra giải pháp tránh lỗi thì có được không ạ. Hay là mình cứ ưu tiên tìm nguyên nhân lỗi trước?
Trong công ty, các cứ điểm ở các nước dùng hệ điều hành và office khác nhau, cho nên kinh nghiệm của em là dùng những thứ càng cơ bản càng tốt. Với số lượng hóa đơn của anh lên tới chục ngàn đã là nhiều. Nếu gán vào mảng rồi cho tìm kiếm bằng for~next thì máy nào cũng hiểu. Anh thấy có được không?
 

vbano1

SMod
Thành viên BQT
Đợi làm gì bạn. Sai là sai. Phải tìm cách để trên máy khác cũng chạy được ấy.
Về vấn đề này, mình muốn biết phán đoán của mình về nguyên nhân có đúng không, bạn thử sửa lại code thay CLNG thành VAL, rồi test trên hai máy xem cùng chạy được không nhé.
Chờ thông tin hồi âm thông báo kết quả của bạn.
Bạn cần đăng nhập để thấy đính kèm
 
T

thanhphuongvip

Guest
Về vấn đề này, mình muốn biết phán đoán của mình về nguyên nhân có đúng không, bạn thử sửa lại code thay CLNG thành VAL, rồi test trên hai máy xem cùng chạy được không nhé.
Mình đã sửa như vậy, nhưng vẫn bị lỗi như trên. Mình cũng đang tìm cách đây, hihi
 

vbano1

SMod
Thành viên BQT
Vậy test thêm lần nữa giúp mình.
Mã:
vtHD = Application.Match(Val(Cstr(LstHD.Text)), rngBH, 0)
 

vbano1

SMod
Thành viên BQT
khi nó tô vàng lỗi như vậy, bạn trỏ chuột vào các vị trí dưới đây xem nó hiển thị giá trị như nào. Chụp được ảnh hoặc ghi chú lại, cho mình biết thông tin nhé.
Bạn cần đăng nhập để thấy hình ảnh
 
T

thanhphuongvip

Guest
khi nó tô vàng lỗi như vậy, bạn trỏ chuột vào các vị trí dưới đây xem nó hiển thị giá trị như nào. Chụp được ảnh hoặc ghi chú lại, cho mình biết thông tin nhé.
LstHD.Text = "4"
rngBH = Error 2029.
Nó báo vậy
 

vbano1

SMod
Thành viên BQT
Như vậy lỗi ở chỗ khoanh đỏ. Bạn tạo lại ra lỗi, cho chuột chỉ vào các vị trí này, báo lại mình. Hình như mình sắp đoán ra lỗi rồi.
Bạn cần đăng nhập để thấy hình ảnh
 
S

Snow24

Guest
@thanhphuongvip thử vậy xem sao nếu không được thì vứt ngay mấy cái hàm đi cho vào mảng mà duyệt cho nhanh nhé.
Mã:
Private Sub Lsthd_Click()
Dim vtHD As Long
Dim CountSP As Integer, a, s As Long
Dim rngBH As Range
Dim Ngay As Date
Dim KH As String
Dim DiaChi As String
Dim SDT As String
Application.ScreenUpdating = False
Application.EnableEvents = False
lrHD = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Sheet2.Range("A12:I" & lrHD + 1).ClearContents

    Sheet4.Range("N" & fRow & ":N" & lrBH).Formula = "=NUMBERVALUE(A" & fRow & ")"
    Set rngBH = Sheet4.Range("N" & fRow & ":N" & lrBH)
    a = LstHD.ListIndex
    s = LstHD.List(a, 0)
    vtHD = Application.Match(s, rngBH, 0)
    CountSP = Application.CountIf(rngBH, LstHD.Text)
    Sheet4.Range("C" & vtHD + fRow - 1 & ":J" & vtHD + fRow + CountSP - 2).Copy _
    Destination:=Sheet2.Range("B12")
    
    Ngay = Sheet4.Range("B" & vtHD + fRow - 1)
    KH = Sheet4.Range("K" & vtHD + fRow - 1)
    DiaChi = Sheet4.Range("L" & vtHD + fRow - 1)
    SDT = Sheet4.Range("M" & vtHD + fRow - 1)
    
    With Sheet2
        .Range("B4") = LstHD.Text
        .Range("C5") = KH
        .Range("H5") = DiaChi
        .Range("H6") = Ngay
        .Range("C6") = SDT
        .Range("A12:A" & 11 + CountSP).FormulaArray = "=ROW()-11"

    End With
    Sheet4.Range("N" & fRow & ":N" & lrBH).Clear
   Unload Me
   Range("A12:I40").Font.Size = 14
   Range("A12:I40").Font.Name = "Times New Roman"
  
    
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
 
T

thanhphuongvip

Guest
Như vậy lỗi ở chỗ khoanh đỏ. Bạn tạo lại ra lỗi, cho chuột chỉ vào các vị trí này, báo lại mình. Hình như mình sắp đoán ra lỗi rồi.
Bạn cần đăng nhập để thấy hình ảnh
Frow = 10
lrBH = 10
nó báo vậy đó @vbano1
 

giaiphapvba

Administrator
Thành viên BQT
Không thử em cũng biết là không được, vì nó có sai ở input text truyền vào đâu, nó đang báo lỗi ở chỗ Range. Hướng đi tìm lỗi của vbano1 là đúng rồi ạ.
Bạn cần đăng nhập để thấy hình ảnh
 

vbano1

SMod
Thành viên BQT
Vậy bây giờ thử như này, để xem có khắc phục được lỗi chỗ vùng Range kia không nhé.
Sửa:
Mã:
Sheet4.Range("N" & fRow & ":N" & lrBH).Formula = "=NUMBERVALUE(A" & fRow & ")"
    Set rngBH = Sheet4.Range("N" & fRow & ":N" & lrBH)
chuyển thành:
Mã:
Sheet4.Range("N" & fRow & ":N" & lrBH).Formula = "=NUMBERVALUE(A" & fRow & ")"
Thisworkbook.sheets(4).Activate
Set rngBH = Thisworkbook.sheets(4).Range("N" & fRow & ":N" & lrBH)
 
T

thanhphuongvip

Guest
Mình vừa test thêm máy ofice 2007 cũng bị lỗi, ko biết máy của @Euler sài bản office nào nhỉ?
 
Trạng thái
Không mở trả lời sau này.
Top