xin giúp đỡ code về import data (1 người xem)

Liên hệ QC

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

yeuthamhangxom

Thành viên tiêu biểu
Tham gia
26/10/07
Bài viết
517
Được thích
419
Nghề nghiệp
Nhân viên văn phòng
Gửi các anh chị GPE. em có yêu cầu như file đính kèm nhờ các anh chị giúp đỡ.
Cám ơn các anh chị nhiều.
Đề bài.
Có 2 file: Canon07B-26Oct07-Mechanical Load Detail và Canon07B-26Oct07-Mechanical Load Detail (submit)
Yêu cầu.
Bên file Canon07B-26Oct07-Mechanical Load Detail (submit) này khi ấn nút "Cap nhat du lieu" thì tự động cập nhật dữ liệu mới nhất vùng từ D10:BD504 bên file Canon07B-26Oct07-Mechanical Load Detail sang file Canon07B-26Oct07-Mechanical Load Detail (submit) này bắt đầu từ B10: đến hết.
Mong các anh chị giúp đỡ.
 

File đính kèm

Gửi các anh chị GPE. em có yêu cầu như file đính kèm nhờ các anh chị giúp đỡ.
Cám ơn các anh chị nhiều.
Đề bài.
Có 2 file: Canon07B-26Oct07-Mechanical Load Detail và Canon07B-26Oct07-Mechanical Load Detail (submit)
Yêu cầu.
Bên file Canon07B-26Oct07-Mechanical Load Detail (submit) này khi ấn nút "Cap nhat du lieu" thì tự động cập nhật dữ liệu mới nhất vùng từ D10:BD504 bên file Canon07B-26Oct07-Mechanical Load Detail sang file Canon07B-26Oct07-Mechanical Load Detail (submit) này bắt đầu từ B10: đến hết.
Mong các anh chị giúp đỡ.

Bạn chép đoạn code sau vào Module

Mã:
Option Explicit
 
Public Sub GetData(SourceFile As Variant, SourceSheet As String, _
                   SourceRange As String, TargetRange As Range, Header As Boolean, UseHeaderRow As Boolean)
    Dim rsCon As Object
    Dim rsData As Object
    Dim szConnect As String
    Dim szSQL As String
    Dim lCount As Long
    If Header = False Then
        If Val(Application.Version) < 12 Then
            szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 8.0;HDR=No"";"
        Else
            szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 12.0;HDR=No"";"
        End If
    Else
        If Val(Application.Version) < 12 Then
            szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 8.0;HDR=Yes"";"
        Else
            szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 12.0;HDR=Yes"";"
        End If
    End If
    If SourceSheet = "" Then
 
        szSQL = "SELECT * FROM " & SourceRange$ & ";"
    Else
 
        szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    End If
    On Error GoTo SomethingWrong
    Set rsCon = CreateObject("ADODB.Connection")
    Set rsData = CreateObject("ADODB.Recordset")
    rsCon.Open szConnect
    rsData.Open szSQL, rsCon, 0, 1, 1
 
    If Not rsData.EOF Then
        If Header = False Then
            TargetRange.Cells(1, 1).CopyFromRecordset rsData
        Else
 
            If UseHeaderRow Then
                For lCount = 0 To rsData.Fields.Count - 1
                    TargetRange.Cells(1, 1 + lCount).Value = _
                    rsData.Fields(lCount).Name
                Next lCount
                TargetRange.Cells(2, 1).CopyFromRecordset rsData
            Else
                TargetRange.Cells(1, 1).CopyFromRecordset rsData
            End If
        End If
    Else
        MsgBox "No records returned from : " & SourceFile, vbCritical
    End If
 
    rsData.Close
    Set rsData = Nothing
    rsCon.Close
    Set rsCon = Nothing
    Exit Sub
SomethingWrong:
    MsgBox "The file name, Sheet name or Range is invalid of : " & SourceFile, _
           vbExclamation, "Error"
    On Error GoTo 0
End Sub
Function LastRow(sh As Worksheet)
    On Error Resume Next
    LastRow = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            Lookat:=xlPart, _
                            LookIn:=xlFormulas, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Row
    On Error GoTo 0
End Function
 
Function Array_Sort(ArrayList As Variant) As Variant
    Dim aCnt As Integer, bCnt As Integer
    Dim tempStr As String
    For aCnt = LBound(ArrayList) To UBound(ArrayList) - 1
        For bCnt = aCnt + 1 To UBound(ArrayList)
            If ArrayList(aCnt) > ArrayList(bCnt) Then
                tempStr = ArrayList(bCnt)
                ArrayList(bCnt) = ArrayList(aCnt)
                ArrayList(aCnt) = tempStr
            End If
        Next bCnt
    Next aCnt
    Array_Sort = ArrayList
End Function

Rồi tiếp tục chép code sau vào cửa sổ code của sheet "Du lieu tai"

Mã:
Option Explicit
Private Sub CommandButton1_Click()
Dim SaveDriveDir As String, MyPath As String
    Dim FName As Variant
    Range("b10:bb1000").ClearContents
    SaveDriveDir = CurDir
    MyPath = Application.DefaultFilePath
    ChDrive MyPath
    ChDir MyPath
    FName = Application.GetOpenFilename(filefilter:="Excel Files, *.xl*")
    If FName = False Then
 
    Else
        GetData FName, "Load Condition(M)", "d10:bd504", Sheets("Du lieu tai").Range("b10"), False, False
    End If
 
    ChDrive SaveDriveDir
    ChDir SaveDriveDir
 
    MsgBox "Done !!!", vbExclamation, "Import Data"
 
End Sub

Bạn xem thêm file nhé.
 

File đính kèm

Upvote 0
Gửi các anh chị GPE. em có yêu cầu như file đính kèm nhờ các anh chị giúp đỡ.
Cám ơn các anh chị nhiều.
Đề bài.
Có 2 file: Canon07B-26Oct07-Mechanical Load Detail và Canon07B-26Oct07-Mechanical Load Detail (submit)
Yêu cầu.
Bên file Canon07B-26Oct07-Mechanical Load Detail (submit) này khi ấn nút "Cap nhat du lieu" thì tự động cập nhật dữ liệu mới nhất vùng từ D10:BD504 bên file Canon07B-26Oct07-Mechanical Load Detail sang file Canon07B-26Oct07-Mechanical Load Detail (submit) này bắt đầu từ B10: đến hết.
Mong các anh chị giúp đỡ.

Nếu bạn không muốn sử dụng ADODB thì có thể dùng tạm cái này(Tham khảo trên GPE)
Mã:
Option Explicit
Private Sub CommandButton1_Click()
    On Error Resume Next
    Dim Wb As Workbook
    Dim Ws As Worksheet
    Dim TenFile As String
    TenFile = ThisWorkbook.Path & "\Canon07B-26Oct07-Mechanical Load Detail.xls"
    Set Wb = Workbooks.Open(TenFile)
    Set Ws = Wb.Worksheets("Load Condition(M)")
    Ws.Range("D10:BD504").Copy
    Sheet1.Range("B10").PasteSpecial 1
    Application.CutCopyMode = False
    Wb.Close
    Set Ws = Nothing: Set Wb = Nothing
End Sub
Thân
 
Upvote 0
Bạn chép đoạn code sau vào Module
Bạn xem thêm file nhé.
Cảm ơn domfootwear đã làm giúp đúng ý mình rồi. Mình làm theo hướng dẫn của bạn đã được.
Phiền bạn thêm giúp mình đoạn code sau nữa nhé.
khi ấn nút "cap nhat du lieu" sau khi chỉ đến file cần cập nhật dữ liệu thì dữ liệu không cập nhật ngay mà phải gõ pass đúng là 123456 thì mới cập nhật dữ liệu còn nếu gõ không đúng pass là 123456 thì dữ liệu là trắng không có gì cả.
Mong bạn giúp thêm mình yêu cầu đó.
Cảm ơn bạn nhiều.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm ơn domfootwear đã làm giúp đúng ý mình rồi. Mình làm theo hướng dẫn của bạn đã được.
Phiền bạn thêm giúp mình đoạn code sau nữa nhé.
khi ấn nút "cap nhat du lieu" sau khi chỉ đến file cần cập nhật dữ liệu thì dữ liệu không cập nhật ngay mà phải gõ pass đúng là 123456 thì mới cập nhật dữ liệu còn nếu gõ không đúng pass là 123456 thì dữ liệu là trắng không có gì cả.
Mong bạn giúp thêm mình yêu cầu đó.
Cảm ơn bạn nhiều.
Cố gắng tự làm đi bạn à!
Mình nghĩ chỉ có thêm 1 InputBox và đặt điều kiện IF InputBox(....) = "123456" thì.... LÀM GÌ ĐÓ ---> Vậy thôi!
Ngoài cách dùng ADO, bạn cũng có 1 cách khác đơn giản hơn, đó là mở 2 file lên cùng lúc, copy dữ liệu nguồn paste vào nơi bạn cần ---> Quá trình này bạn thực hiện đồng thời với việc bật chức nâng Record macro, sau đó chỉnh sửa lại code là được rồi
 
Upvote 0
Cố gắng tự làm đi bạn à!
Mình nghĩ chỉ có thêm 1 InputBox và đặt điều kiện IF InputBox(....) = "123456" thì.... LÀM GÌ ĐÓ ---> Vậy thôi!
Ngoài cách dùng ADO, bạn cũng có 1 cách khác đơn giản hơn, đó là mở 2 file lên cùng lúc, copy dữ liệu nguồn paste vào nơi bạn cần ---> Quá trình này bạn thực hiện đồng thời với việc bật chức nâng Record macro, sau đó chỉnh sửa lại code là được rồi
Vì không dành về VBA lắm nên tự làm hơi khó. mò mãi mà không được.
Mong thầy và các bạn giúp đỡ.
 
Upvote 0
Vì không dành về VBA lắm nên tự làm hơi khó. mò mãi mà không được.
Mong thầy và các bạn giúp đỡ.

1/ Nếu dùng code của domfootwear thì thế này
Mã:
Option Explicit
    Private Sub CommandButton1_Click()
    Anser = InputBox("What is password", "Password", "abcde")
    If Anser = "123456" Then
    'If InputBox("What is password", "Password", "abcde")="123456" Then
        Dim SaveDriveDir As String, MyPath As String
        Dim FName As Variant
        Range("b10:bb1000").ClearContents
        SaveDriveDir = CurDir
        MyPath = Application.DefaultFilePath
        ChDrive MyPath
        ChDir MyPath
        FName = Application.GetOpenFilename(filefilter:="Excel Files, *.xl*")
        If FName = False Then
 
        Else
            GetData FName, "Load Condition(M)", "d10:bd504", Sheets("Du lieu tai").Range("b10"), False, False
        End If
        ChDrive SaveDriveDir
        ChDir SaveDriveDir
        MsgBox "Done !!!", vbExclamation, "Import Data"
    End If
End Sub

2/ Nếu dùng theo của bạn ThanhPhương( theo cách đơn giản nhất) thì thế này
Mã:
Option Explicit
Private Sub CommandButton1_Click()
    If InputBox("What is password", "Password", "abcde") = "123456" Then
        On Error Resume Next
        Dim Wb As Workbook
        Dim Ws As Worksheet
        Dim TenFile As String
        TenFile = ThisWorkbook.Path & "\Canon07B-26Oct07-Mechanical Load Detail.xls"
        Set Wb = Workbooks.Open(TenFile)
        Set Ws = Wb.Worksheets("Load Condition(M)")
        Ws.Range("D10:BD504").Copy
        Sheet1.Range("B10").PasteSpecial 1
        Application.CutCopyMode = False
        Wb.Close
        Set Ws = Nothing: Set Wb = Nothing
    End If
End Sub[
 
Upvote 0
Cảm ơn domfootwear đã làm giúp đúng ý mình rồi. Mình làm theo hướng dẫn của bạn đã được.
Phiền bạn thêm giúp mình đoạn code sau nữa nhé.
khi ấn nút "cap nhat du lieu" sau khi chỉ đến file cần cập nhật dữ liệu thì dữ liệu không cập nhật ngay mà phải gõ pass đúng là 123456 thì mới cập nhật dữ liệu còn nếu gõ không đúng pass là 123456 thì dữ liệu là trắng không có gì cả.
Mong bạn giúp thêm mình yêu cầu đó.
Cảm ơn bạn nhiều.

Bạn có thể tạo 1 Userform để làm form đăng nhập, nhưng theo cách này chỉ mang tính chất trang trí thôi chứ không có tác dụng gì cả.

Dù sao cũng làm theo ý bạn:

-Tạo 1 userform, 1 textbox có tên là txtPass, 2 commandbutton lần lượt tên cho 2 command này là cmdOK và cmdCancel

-Copy code sau vào Userform:

Mã:
Private Sub cmdCancel_Click()
Unload Me
End Sub
Private Sub cmdOK_Click()
Dim SaveDriveDir As String, MyPath As String
Dim FName As Variant
'If txtPass.Text = "" Then
'MsgBox "Password must not be blank !!!" & vbNewLine & "Pls try again ", vbInformation, "Password"
'End If
If txtPass.Text <> "123456" Then
    Range("b10:bb1000").ClearContents
    MsgBox "Your password is not correct, Pls try again !!!", vbInformation, "Password"
    txtPass.SetFocus
    txtPass.Text = ""
    Exit Sub
    Else
    SaveDriveDir = CurDir
    MyPath = Application.DefaultFilePath
    ChDrive MyPath
    ChDir MyPath
    FName = Application.GetOpenFilename(filefilter:="Excel Files, *.xl*")
    If FName = False Then
        
    Else
        GetData FName, "Load Condition(M)", "d10:bd504", Sheets("Du lieu tai").Range("b10"), False, False
    End If
   
    ChDrive SaveDriveDir
    ChDir SaveDriveDir
    
    MsgBox "Done !!!", vbExclamation, "Import Data"
Unload Me
End If

End Sub
Private Sub UserForm_QueryClose _
  (Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        MsgBox "Clicking the Close button does not work."
        Cancel = True
    End If
End Sub

Trong cửa sổ code của sheet "Du lieu tai" bạn sửa code lại như sau:

Mã:
Private Sub CommandButton1_Click()
UserForm1.Show
    
End Sub

Bạn xem thêm file nhé.
 

File đính kèm

Upvote 0
Bạn có thể tạo 1 Userform để làm form đăng nhập, nhưng theo cách này chỉ mang tính chất trang trí thôi chứ không có tác dụng gì cả.

Dù sao cũng làm theo ý bạn:

-Tạo 1 userform, 1 textbox có tên là txtPass, 2 commandbutton lần lượt tên cho 2 command này là cmdOK và cmdCancel

-Copy code sau vào Userform:

Mã:
Private Sub cmdCancel_Click()
Unload Me
End Sub
Private Sub cmdOK_Click()
Dim SaveDriveDir As String, MyPath As String
Dim FName As Variant
'If txtPass.Text = "" Then
'MsgBox "Password must not be blank !!!" & vbNewLine & "Pls try again ", vbInformation, "Password"
'End If
If txtPass.Text <> "123456" Then
    Range("b10:bb1000").ClearContents
    MsgBox "Your password is not correct, Pls try again !!!", vbInformation, "Password"
    txtPass.SetFocus
    txtPass.Text = ""
    Exit Sub
    Else
    SaveDriveDir = CurDir
    MyPath = Application.DefaultFilePath
    ChDrive MyPath
    ChDir MyPath
    FName = Application.GetOpenFilename(filefilter:="Excel Files, *.xl*")
    If FName = False Then
        
    Else
        GetData FName, "Load Condition(M)", "d10:bd504", Sheets("Du lieu tai").Range("b10"), False, False
    End If
   
    ChDrive SaveDriveDir
    ChDir SaveDriveDir
    
    MsgBox "Done !!!", vbExclamation, "Import Data"
Unload Me
End If

End Sub
Private Sub UserForm_QueryClose _
  (Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        MsgBox "Clicking the Close button does not work."
        Cancel = True
    End If
End Sub
Trong cửa sổ code của sheet "Du lieu tai" bạn sửa code lại như sau:

Mã:
Private Sub CommandButton1_Click()
UserForm1.Show
    
End Sub
Bạn xem thêm file nhé.
gửi bạn domfootwear và các bạn.
Mình test lại vẫn thấy sai như trong file đính kèm.
khi mình điền chữ "điều hòa không khí" ở các ô trong 1 hàng. sau đó binh import thì thấy nó không import tất cả từ cột D đến cột BD mà chỉ import một số cột như trong file đính kèm.
mong domfootwear và các bạn giúp đơ.
cảm ơn các bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là file đính kèm

Đây là file đính kèm.
mong các bạn giúp đỡ.
cảm ơn nhiều.
 

File đính kèm

Upvote 0
Mình thấy bình thường mà bạn, bạn nói rõ hơn được không
trong file gốc là Canon07B-26Oct07-Mechanical Load Detail mình có sửa các ô ở hàng 11 là "điều hòa không khí" sau đó mình import thì trong file đích là Canon07B-26Oct07-Mechanical Load Detail (submit) nó chỉ import một số cột thôi. còn một số ô ở hàng 11 như ô J11,ô K11, ô L11, cột Q,ô R11, ô S11,U11,V11,X11:AM11…
không cập nhật dữ liệu.
mong bạn giúp mình nha.
 
Upvote 0
trong file gốc là Canon07B-26Oct07-Mechanical Load Detail mình có sửa các ô ở hàng 11 là "điều hòa không khí" sau đó mình import thì trong file đích là Canon07B-26Oct07-Mechanical Load Detail (submit) nó chỉ import một số cột thôi. còn một số ô ở hàng 11 như ô J11,ô K11, ô L11, cột Q,ô R11, ô S11,U11,V11,X11:AM11…
không cập nhật dữ liệu.
mong bạn giúp mình nha.
Không hiểu sau máy mình vẫn bình thường mà bạn, bạn chỉnh dữ liệu xong rồi có lưu file chưa ?
 
Lần chỉnh sửa cuối:
Upvote 0
Không hiểu sau máy mình vẫn bình thường mà bạn, bạn chỉnh dữ liệu xong rồi có lưu file chưa ?
Bạn xem lại trong file bạn gửi lên nha. tại ô J11,K11, L11,Q11, R11 vân vân ở hàng đó dữ liệu không được cập nhật vào mặc dù bên file gốc Canon07B-26Oct07-Mechanical Load Detail ở những ô đó có dữ liệu bạn ạ.
mong bạn giúp mình.
cảm ơn bạn.
 
Upvote 0
Bạn sửa lại đoạn code của tôi theo ý của bác anhphuong và thêm câu lệnh không giật màn hình như sau :
Mã:
Option Explicit
Private Sub CommandButton1_Click()
    If InputBox("What is password", "Password", "abcde") = "123456" Then
        On Error Resume Next
        Application.ScreenUpdating = False
        Dim Wb As Workbook
        Dim Ws As Worksheet
        Dim TenFile As String
        TenFile = ThisWorkbook.Path & "\Canon07B-26Oct07-Mechanical Load Detail.xls"
        Set Wb = Workbooks.Open(TenFile)
        Set Ws = Wb.Worksheets("Load Condition(M)")
        Ws.Range("D10:BD504").Copy
        Sheet1.Range("B10").PasteSpecial 1
        Application.CutCopyMode = False
        Wb.Close
        Set Ws = Nothing: Set Wb = Nothing
        Application.ScreenUpdating = True
    End If
End Sub

Đảm bảo vừa ngắn gọn vừa chính xác
Thân
 
Upvote 0
Bạn sửa lại đoạn code của tôi theo ý của bác anhphuong và thêm câu lệnh không giật màn hình như sau :
Mã:
Option Explicit
Private Sub CommandButton1_Click()
    If InputBox("What is password", "Password", "abcde") = "123456" Then
        On Error Resume Next
        Application.ScreenUpdating = False
        Dim Wb As Workbook
        Dim Ws As Worksheet
        Dim TenFile As String
        TenFile = ThisWorkbook.Path & "\Canon07B-26Oct07-Mechanical Load Detail.xls"
        Set Wb = Workbooks.Open(TenFile)
        Set Ws = Wb.Worksheets("Load Condition(M)")
        Ws.Range("D10:BD504").Copy
        Sheet1.Range("B10").PasteSpecial 1
        Application.CutCopyMode = False
        Wb.Close
        Set Ws = Nothing: Set Wb = Nothing
        Application.ScreenUpdating = True
    End If
End Sub
Đảm bảo vừa ngắn gọn vừa chính xác
Thân
nếu làm như bạn thì lấy cả công thức từ file gốc sang. Nhưng nếu chỉ muốn lấy dữ liệu sang thôi không lấy công thức (kiểu như chỉ lấy value) không thôi thì làm như thế nào?
mong bạn giúp đỡ.
cảm ơn bạn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
nếu làm như bạn thì lấy cả công thức từ file gốc sang. Nhưng nếu chỉ muốn lấy dữ liệu sang thôi không lấy công thức (kiểu như chỉ lấy value) không thôi thì làm như thế nào?
mong bạn giúp đỡ.
cảm ơn bạn nhiều.
Chài ai... thì sửa PasteSpecial 1 thành PasteSpecial 3
 
Upvote 0
Cảm ơn thầy ndu .
vì em còn kém về VBA lên chưa biết cái này.
em sẽ học hỏi thêm.
cảm ơn thầy và các bạn nhiều.
Nói thêm:
- Khi bạn copy 1 cell rồi click phải vào 1 cell khác, chọn PasteSpecial, bạn sẽ nhìn thấy hộp PasteSpecial như sau

untitled.JPG

Nhìn từ trên xuống thi theo thứ tự sẽ là:
- PasteSpecial 1 <===> All
- PasteSpecial 2 <===> Formulas
- PasteSpecial 3 <===> Values
.... vân vân.... cứ thế mà đếm
 
Upvote 0
Web KT

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

Back
Top Bottom