Thêm References bằng VBA

Liên hệ QC

An.BA

Thành viên thường trực
Tham gia
15/9/18
Bài viết
223
Được thích
170
Giới tính
Nam
Hiện tại em có viết 1 ứng dụng có chứa 1 đối tượng như ảnh, Nhưng sang 1 số máy tính thì nó báo lỗi và không chạy được nên em muốn thêm nó bằng code VBA
Để khi xử lý trên máy em (máy thực hiện) thì nó sẽ thêm vào và để chạy các đoạn code sau đó nó sẽ lại xóa đi để sang máy khác nó không còn thư viện này nữa ạ.
Em cảm ơn.
1605772024924.png
 
Mình úp khúc code đó lên đây xem nào.
Mã:
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
'================ Load proc thong tin hoc sinh================
Private Sub LoadProc_HocSinh()
    
    Set cmd = New ADODB.Command
    With cmd
        .CommandText = "Excel_LoadHocSinh"
        .CommandType = adCmdStoredProc
         .NamedParameters = True  ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< '
         .Parameters.Append cmd.CreateParameter("@maTruong", adVarChar, adParamInput, 6, lbMaTruong.Caption)
        .CommandTimeout = 300
        .ActiveConnection = "Provider=SQLOLEDB;Data Source=".......""
        Set rs = .Execute
    End With
    
    With Sheet6
        .Range("A2:M100000").Clear ' xoa het du lieu di
        Set rs = New ADODB.Recordset
        rs.Open cmd
    '=================
        On Error Resume Next ' neu nhu k co loc thi k can xu ly
            .ShowAllData ' neu co thi show het ra
        On Error GoTo 0
        '===================
        .Range("A2").CopyFromRecordset rs
    End With
    
    rs.Close
    Set rs = Nothing
    Set cmd = Nothing
End Sub
Đây đoạn code của em đây ạ
Bài đã được tự động gộp:

Ngâm cứu Late Binding nhé.
Vâng để em tìm ạ.
 
Upvote 0
Khi chuyển sang khai báo late binding thì phải chuyển các tham số tương ứng sang dạng Enum.

Từ khóa gõ Google: {tham số cũ} + Enum

View attachment 249647
Em cảm ơn ạ, em làm được rồi.
Cho em hỏi thêm 1 chút nữa với ạ.
Mã:
Application.InputBox("Please input Password", "ABC")
Em muốn hộp thoại này khi nhập nó định dạng **** hoặc gì đó được không ạ? vì em phải dùng 1 cái form để làm đoạn nhập khẩu mà khi thêm form vào thư viện em thấy nó nặng hơn ạ.
Em cảm ơn.
 
Upvote 0
Việc ép code tự khai báo References ở đây có người đưa lên rồi.
Bạn chịu khó tìm.
Tôi thiết tưởng bạn hay viết những code làm việc cả đống như vậy thì đã tập đợc thói quen nhận biết tên n hững thành viên chuyên về kiểu nào. Nếu từ đầu bạn đã có cái nhìn xa như tôi nói thì sẽ không khó tìm được bài ấy. Ở diễn đàn này số thành viên đạt trình độ ấy đếm trên đầu ngón tay (không kể tôi, tôi chuyên về dữ liệu chứ không thích mò mẫm code).
Vì lý do cá nhân, tôi không thêm gì nữa. (nếu bạn để ý thì câu này là gợi ý tên của thành viên ấy)

Chú: nếu giờ này bạn vẫn chưa có danh sách các thành viên "chiến" về code, và từng sở trường của họ thì bạn cần học kỹ năng này gấp.
Tôi đạt đến tình độ hiện nay của mình 90% là do tính chịu khó lập một sổ tay gho chép lại sở trường tính cách từng cá nhân.
 
Upvote 0
Việc ép code tự khai báo References ở đây có người đưa lên rồi.
Bạn chịu khó tìm.
Tôi thiết tưởng bạn hay viết những code làm việc cả đống như vậy thì đã tập đợc thói quen nhận biết tên n hững thành viên chuyên về kiểu nào. Nếu từ đầu bạn đã có cái nhìn xa như tôi nói thì sẽ không khó tìm được bài ấy. Ở diễn đàn này số thành viên đạt trình độ ấy đếm trên đầu ngón tay (không kể tôi, tôi chuyên về dữ liệu chứ không thích mò mẫm code).
Vì lý do cá nhân, tôi không thêm gì nữa. (nếu bạn để ý thì câu này là gợi ý tên của thành viên ấy)

Chú: nếu giờ này bạn vẫn chưa có danh sách các thành viên "chiến" về code, và từng sở trường của họ thì bạn cần học kỹ năng này gấp.
Tôi đạt đến tình độ hiện nay của mình 90% là do tính chịu khó lập một sổ tay gho chép lại sở trường tính cách từng cá nhân.
Vâng em cảm ơn ạ. Đúng là bây giờ nghe xong thì em mới hiểu là nên phải như vậy a. Em cũng thử gõ mấy từ khóa liên quan nhưng nó không đúng như em cần nên em viết bài ạ.
Bài đã được tự động gộp:

Vâng em cảm ơn.
 
Upvote 0
Dim cmd as Object
Dim rs as Object
Dim cn as Object
---
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set cmd = CreateObject("ADODB.Command")
Mã:
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
'================ Load proc thong tin hoc sinh================
Private Sub LoadProc_HocSinh()
    
    Set cmd = New ADODB.Command
    With cmd
        .CommandText = "Excel_LoadHocSinh"
        .CommandType = adCmdStoredProc
         .NamedParameters = True  ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< '
         .Parameters.Append cmd.CreateParameter("@maTruong", adVarChar, adParamInput, 6, lbMaTruong.Caption)
        .CommandTimeout = 300
        .ActiveConnection = "Provider=SQLOLEDB;Data Source=".......""
        Set rs = .Execute
    End With
    
    With Sheet6
        .Range("A2:M100000").Clear ' xoa het du lieu di
        Set rs = New ADODB.Recordset
        rs.Open cmd
    '=================
        On Error Resume Next ' neu nhu k co loc thi k can xu ly
            .ShowAllData ' neu co thi show het ra
        On Error GoTo 0
        '===================
        .Range("A2").CopyFromRecordset rs
    End With
    
    rs.Close
    Set rs = Nothing
    Set cmd = Nothing
End Sub
Cho em hỏi 1 vấn đề em gặp phải với ạ,
Dữ liệu em tải về không hiểu nó có bị tràn hay thế nào không mà tải vài lần là dữ liệu của file tăng lên mấy chục MB ạ, chắc do em tải nhiều lần nó bị nhiều dữ liệu quá phải không ạ?
Em cảm ơn ạ!
 
Upvote 0
Đổi .Clear thành .ClearContents

Bạn gửi file đó lên đây xem nào (xóa dữ liệu cần bảo mật đi).
Vâng em cảm ơn để em thử ạ.
Em vừa xóa xong rồi nhưng file bị nặng quá không đưa trực tiếp lên đây nên em gửi link ạ
demo file
Bài đã được tự động gộp:

Em cảm ơn!
 
Upvote 0
Cho em hỏi thêm 1 chút nữa với ạ.
Mã:
Application.InputBox("Please input Password", "ABC")
Em muốn hộp thoại này khi nhập nó định dạng **** hoặc gì đó được không ạ? v

Nếu bạn cần ký tự "*" và cả tiếng Việt trong tiêu đề cửa sổ và dòng nhắc thì bạn thử code của tôi. Nhân tiện bạn kiểm tra luôn với mọi phiên bản Windows + với mọi phiên bản Excel.

 
Upvote 0
Web KT
Back
Top Bottom