Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 12
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    0

    Chuyển dữ liệu từ EXcel vào ACCESS

    Mình tìm và đọc được thông tin và mẫu VBA như sau:
    Để nhập mới nội dung một table (trong Access) từ một tập tin Excel, ta có thể dùng một trong những cách sau đây:
    1. Chọn File \ Get External Data \ Import từ trình đơn Access. Trên hộp thoại Import, chọn mục Microsoft Excel từ danh sách Files of type, rồi chọn tập tin Excel muốn đưa dữ liệu vào Access và bấm OK. Sau đó, theo từng bước hướng dẫn của Access. Tuy nhiên, dữ liệu luôn luôn được đưa vào một table mới, chứ không đưa vào table có sẵn cấu trúc được.
    2. Tạo một macro, rồi trên form vẽ một nút lệnh để chạy macro này. Tuy nhiên, các thông số như TableName, FileName cần phải được gõ sẵn, hoặc phải bổ sung thêm một số “kỹ xảo” nữa rất mất công.
    3. Cách khác hay hơn: dùng đối tượng DoCmd, một hình thức sử dụng macro của Access trong VBA. Ví dụ: Tạo form như hình 1, gồm có một textbox (đặt tên txtTapTinExcel), một nút lệnh (có dấu 3 chấm, đặt tên cmdTimTapTin), một nút lệnh (để đọc dữ liệu từ tập tin Excel có tên chứa trong ô txtTapTinExcel, đặt tên cmdDocDuLieuTuExcel) và một ActiveX Control có tên dlgTimTapTin. ActiveX Control này được tạo bằng cách bấm nút More Controls (nút cuối cùng) trên ToolBox, rồi chọn mục Microsoft Common Dialog Control. Lần lượt gõ vào các thủ tục xử lý tình huống OnClick của các nút lệnh cmdDocDuLieuTuExcel và cmdTimTapTin (đoạn mã 1). Bạn lưu ý, thứ tự và tên các cột trong tập tin Excel phải giống như cấu trúc table đã khai báo trong Access.

    Đoạn mã 1
    Private Sub cmdTimTapTin_Click()
    With dlgTimTapTin
    .ShowOpen
    txtTapTinExcel = .FileName
    End With
    End Sub

    Private Sub cmdDocDuLieuTuExcel_Click()
    Dim sTenTable As String
    sTenTable = "tbNhanVien" ‘ Ví dụ
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
    sTenTable, txtTapTinExcel, True
    End Sub
    ////////////////////////////////////////////////////////
    Mình sử dụng cách 3. Nhưng từ Toolbox chọn Microsoft Common Dialog Control thì báo lỗi tạm thời mình dich là: bạn không có license để sử dụng ActiveX Control? Bạn có cách khắc phụ không?
    Có phải là cài VB6.0 mới có không?

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS




    Trích dẫn Gửi bởi vuthuanbkvn
    Mình tìm và đọc được thông tin và mẫu VBA như sau:
    Để nhập mới nội dung một table (trong Access) từ một tập tin Excel, ta có thể dùng một trong những cách sau đây:
    1. Chọn File \ Get External Data \ Import từ trình đơn Access. Trên hộp thoại Import, chọn mục Microsoft Excel từ danh sách Files of type, rồi chọn tập tin Excel muốn đưa dữ liệu vào Access và bấm OK. Sau đó, theo từng bước hướng dẫn của Access. Tuy nhiên, dữ liệu luôn luôn được đưa vào một table mới, chứ không đưa vào table có sẵn cấu trúc được.
    2. Tạo một macro, rồi trên form vẽ một nút lệnh để chạy macro này. Tuy nhiên, các thông số như TableName, FileName cần phải được gõ sẵn, hoặc phải bổ sung thêm một số “kỹ xảo” nữa rất mất công.
    3. Cách khác hay hơn: dùng đối tượng DoCmd, một hình thức sử dụng macro của Access trong VBA. Ví dụ: Tạo form như hình 1, gồm có một textbox (đặt tên txtTapTinExcel), một nút lệnh (có dấu 3 chấm, đặt tên cmdTimTapTin), một nút lệnh (để đọc dữ liệu từ tập tin Excel có tên chứa trong ô txtTapTinExcel, đặt tên cmdDocDuLieuTuExcel) và một ActiveX Control có tên dlgTimTapTin. ActiveX Control này được tạo bằng cách bấm nút More Controls (nút cuối cùng) trên ToolBox, rồi chọn mục Microsoft Common Dialog Control. Lần lượt gõ vào các thủ tục xử lý tình huống OnClick của các nút lệnh cmdDocDuLieuTuExcel và cmdTimTapTin (đoạn mã 1). Bạn lưu ý, thứ tự và tên các cột trong tập tin Excel phải giống như cấu trúc table đã khai báo trong Access.

    Đoạn mã 1
    Private Sub cmdTimTapTin_Click()
    With dlgTimTapTin
    .ShowOpen
    txtTapTinExcel = .FileName
    End With
    End Sub

    Private Sub cmdDocDuLieuTuExcel_Click()
    Dim sTenTable As String
    sTenTable = "tbNhanVien" ‘ Ví dụ
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _
    sTenTable, txtTapTinExcel, True
    End Sub
    ////////////////////////////////////////////////////////
    Mình sử dụng cách 3. Nhưng từ Toolbox chọn Microsoft Common Dialog Control thì báo lỗi tạm thời mình dich là: bạn không có license để sử dụng ActiveX Control? Bạn có cách khắc phụ không?
    Có phải là cài VB6.0 mới có không?
    Bạn dùng lệnh regsvr32 tên_đầy_đủ_của_control
    VD: cái control của bạn là cái file có tên commdlg.ocx lưu ở D:-/MyApp thì bạn mở menu Start - Run và gõ vào:
    regsvr32 D:-/MyApp\commdlg.ocx

  3. #3
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS




    Trích dẫn Gửi bởi phatnq2002
    Bạn dùng lệnh regsvr32 tên_đầy_đủ_của_control
    VD: cái control của bạn là cái file có tên commdlg.ocx lưu ở D:-/MyApp thì bạn mở menu Start - Run và gõ vào:
    regsvr32 D:-/MyApp\commdlg.ocx
    mình đã thực hiện : regsvr32 \windows\system32\COMDLG32.OCX nó báo successful nhưng vẫn lỗi ở đó
    Cái này mình đọc vào làm nhưng nó chỉ sửa được lỗi báo sai Comdg32.ocx
    "In order to fix this problem, you'll need to set up and register the library file.

    The easiest way to do that is to download the following file that will install and register most of the Library Files used by Ascentive's products (if you still see the error, try the manual instructions below).

    Please use the following URL to download a 5.66 MB (5,935,720 bytes) Ascentive Library Installer.

    http://www.box.net/public/tv8pgkh16d

    Alternatively, you may download just the file you are missing and manually register it yourself. Here's how to do it:

    1. Download COMDLG32.OCX (right click the text on the left, go to website and save to your Desktop).
    http://www.box.net/public/2snvbtgvge

    2. Back up your current copy of COMDLG32.OCX and copy the new version to the same file location. This file should be located in the WINDOWS\SYSTEM directory on your C: drive (for Windows NT and 2000: \WINNT\system32).

    3. Using your mouse, click on the "Start" button and then click on "Run".

    4. According to your Operating System, type the following command to register this library file:

    Windows 95, 98, or Me:
    regsvr32 \windows\system\COMDLG32.OCX

    Windows NT or 2000:
    regsvr32 \WINNT\system32\COMDLG32.OCX

    Windows XP:
    regsvr32 \windows\system32\COMDLG32.OCX

    5. You should see a message saying "DllRegisterServer ... succeeded"

    If you are getting an error telling you that the file is missing, then you are not typing the command in correctly. You will need to type it in *exactly* as as shown above for your operating system."

  4. #4
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS




    Trích dẫn Gửi bởi vuthuanbkvn
    mình đã thực hiện : regsvr32 \windows\system32\COMDLG32.OCX nó báo successful nhưng vẫn lỗi ở đó
    Cái này mình đọc vào làm nhưng nó chỉ sửa được lỗi báo sai Comdg32.ocx
    "In order to fix this problem, you'll need to set up and register the library file.

    The easiest way to do that is to download the following file that will install and register most of the Library Files used by Ascentive's products (if you still see the error, try the manual instructions below).

    Please use the following URL to download a 5.66 MB (5,935,720 bytes) Ascentive Library Installer.

    http://www.box.net/public/tv8pgkh16d

    Alternatively, you may download just the file you are missing and manually register it yourself. Here's how to do it:

    1. Download COMDLG32.OCX (right click the text on the left, go to website and save to your Desktop).
    http://www.box.net/public/2snvbtgvge

    2. Back up your current copy of COMDLG32.OCX and copy the new version to the same file location. This file should be located in the WINDOWS\SYSTEM directory on your C: drive (for Windows NT and 2000: \WINNT\system32).

    3. Using your mouse, click on the "Start" button and then click on "Run".

    4. According to your Operating System, type the following command to register this library file:

    Windows 95, 98, or Me:
    regsvr32 \windows\system\COMDLG32.OCX

    Windows NT or 2000:
    regsvr32 \WINNT\system32\COMDLG32.OCX

    Windows XP:
    regsvr32 \windows\system32\COMDLG32.OCX

    5. You should see a message saying "DllRegisterServer ... succeeded"

    If you are getting an error telling you that the file is missing, then you are not typing the command in correctly. You will need to type it in *exactly* as as shown above for your operating system."
    Copy cái ocx đó về folder của ứng dụng bạn đang thực hiện. Đăng ký lại.
    Thông thường, dù đã khai báo OK, nhưng nếu bạn mở form ra để design thì nó lại báo lỗi, nhưng nếu bạn không mở design thì không sao. Nó vẫn chạy bình thường. Tôi đã gặp trường hợp này.

    Tuy nhiên xin góp ý với bạn một chút, bạn hãy add thư viện Microsoft Office vào, trong đó có sẵn control dialog cũng ngon lành không kém và không bị báo lỗi.

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS




    Trích dẫn Gửi bởi phatnq2002
    Copy cái ocx đó về folder của ứng dụng bạn đang thực hiện. Đăng ký lại.
    Thông thường, dù đã khai báo OK, nhưng nếu bạn mở form ra để design thì nó lại báo lỗi, nhưng nếu bạn không mở design thì không sao. Nó vẫn chạy bình thường. Tôi đã gặp trường hợp này.

    Tuy nhiên xin góp ý với bạn một chút, bạn hãy add thư viện Microsoft Office vào, trong đó có sẵn control dialog cũng ngon lành không kém và không bị báo lỗi.
    add thư viên micro... vào references chọn gì nhỉ? quá nhiều thứ,hic hic

  6. #6
    Ngày tham gia
    Nov 2015
    Bài viết
    5
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS

    Nếu đã biết dùng VBA thì cần gì cái tool đó nữa nhỉ?

    Bản thân Access đã tích sẵn cái dialog cho chọn file rồi.


    Private Sub cmdTimTapTin_Click()
    Dim dlgOpen As FileDialog, txtFilePathname As String

    Set dlgOpen = Application.FileDialog(msoFileDialogOpen)
    With dlgOpen
    .Title = "Chon file XLS chua data"
    .Filters.Add "Excel file", "*.xls", 1
    .AllowMultiSelect = False
    If .Show = 0 Then
    Exit Sub
    Else
    If .SelectedItems.Count = 0 Then
    MsgBox "Chua chon mot file nao ca.", , "THONG BAO"
    Exit Sub
    Else
    txtFilePathname = .SelectedItems(1)
    End If
    End If
    End With
    End Sub

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS




    Trích dẫn Gửi bởi muontennguoi
    Nếu đã biết dùng VBA thì cần gì cái tool đó nữa nhỉ?

    Bản thân Access đã tích sẵn cái dialog cho chọn file rồi.


    Private Sub cmdTimTapTin_Click()
    Dim dlgOpen As FileDialog, txtFilePathname As String
    Set dlgOpen = Application.FileDialog(msoFileDialogOpen)
    With dlgOpen
    .Title = "Chon file XLS chua data"
    .Filters.Add "Excel file", "*.xls", 1
    .AllowMultiSelect = False
    If .Show = 0 Then
    Exit Sub
    Else
    If .SelectedItems.Count = 0 Then
    MsgBox "Chua chon mot file nao ca.", , "THONG BAO"
    Exit Sub
    Else
    txtFilePathname = .SelectedItems(1)
    End If
    End If
    End With
    End Sub
    Em cũng chưa viết mấy code này. Em đang cần. thanks anh! (theo doi de tai - don't delete) :xinloinhe:

  8. #8
    Ngày tham gia
    Apr 2016
    Bài viết
    4
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS

    Mình muốn các bạn trợ giúp mình như sau:
    tạo 1 form : formnhapexcel
    1 textbox : txtExcel
    1 textbox: txtAccess
    <---------------- hiện đường dẫn của tập tin chứa Excel và Access
    1 button : cmdExcel
    1 Button : cmdAccess
    <------- 2 nút tìm kiếm tập tin E và A
    Giả sử mình tạo được 1 tập tin Excel tương ứng với 1 bảng dữ liệu trong access rồi bằng đoạn mã sau : DoCmd.OutputTo acTables, "tblnhap", "MicrosoftExcelBiff8(*.xls)", "", True, "", 0
    bây giờ mình tạo 1 buton : cmdExceltoAccess
    nhiệm vụ update hặc change những gì trên Excel vào Access.
    Mong mọi người giúp đỡ!
    -----------------------------------------------------------------------------------------
    Đây mình chỉ làm được đến đây: hic

    Private Sub cmdAccess_Click()
    Set objdialog = CreateObject("UserAccounts.CommonDialog")
    objdialog.Filter = "Programs|*.mdb"
    objdialog.InitialDir = "C:-/"
    Browse = objdialog.ShowOpen
    If Browse = 0 Then
    Else
    'Run.Text = objdialog.Filename
    TxtAccess = objdialog.Filename
    MsgBox "ÐaÞ tiÌm thâìy dýÞ liêòu Access thaÌnh công!!", vbInformation, "Thông baìo "
    End If
    End Sub

    Private Sub cmdExcel_Click()
    Set objdialog = CreateObject("UserAccounts.CommonDialog")
    objdialog.Filter = "Programs|*.xls"
    objdialog.InitialDir = "C:-/"
    Browse = objdialog.ShowOpen
    If Browse = 0 Then
    Else
    'Run.Text = objdialog.Filename
    txtExcel = objdialog.Filename
    MsgBox "ÐaÞ tiÌm thâìy dýÞ liêòu Excel thaÌnh công!!", vbInformation, "Thông baìo "
    End If
    End Sub
    -----------------------------------------------------------------------------------------
    Mình thử viết như sau: nhưng không được. híc
    Private Sub cmdExceltoAccess_Click()
    Dim txtExcel As String
    Dim TxtAccess As String
    If IIf(IsNull(txtExcel), "", txtExcel) = "" Then
    MsgBox "không coì dýÞ liêòu naÌo ðýõòc nhâòp vaÌo?", vbInformation, "Thông baìo lôÞi saÒy ra"
    Exit Sub
    End If
    If IIf(IsNull(TxtAccess), "", TxtAccess) = "" Then
    MsgBox "không coì dýÞ liêòu naÌo ðýõòc nhâòp vaÌo?", vbInformation, "Thông baìo lôÞi saÒy ra"
    Exit Sub
    End If
    '''''''
    Call Ex2Ac(ExcelPath$ & AccessPath$) '<-- Thay tên file Excel kèm Path thích ho'p

    'Call Access2Excel2("txtExcel", "TxtAccess")
    MsgBox "ÐaÞ nhâòp thaÌnh công?", vbInformation, "Thông baìo "
    End Sub
    Private Sub Ex2Ac(ExcelPath$)

    Const acImport = 0: Const acSpreadsheetTypeExcel9 = 8
    Set objAccess = CreateObject("Access.Application")
    'objAccess.NewCurrentDatabase AccessPath$
    objAccess.OpenCurrentDatabase ("TxtAccess")
    objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tblnhap", "txtExcel", True
    End Sub
    '//////////////////////
    'Cach thu 2
    Private Sub Access2Excel2(AccessPath$, ExcelPath$)
    Const acExport = 1: Const acSpreadsheetTypeExcel9 = 8
    Set objAccess = CreateObject("Access.Application")
    objAccess.OpenCurrentDatabase AccessPath$ ' Câu sau có Test là tên Table
    objAccess.DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Test", ExcelPath$, True
    End Sub

  9. #9
    Ngày tham gia
    Nov 2015
    Bài viết
    3
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS




    Trích dẫn Gửi bởi vuthuanbkvn
    -----------------------------------------------------------------------------------------
    Mình thử viết như sau: nhưng không được. híc
    Private Sub cmdExceltoAccess_Click()
    Dim txtExcel As String
    Dim TxtAccess As String
    If IIf(IsNull(txtExcel), "", txtExcel) = "" Then
    MsgBox "không coì dýÞ liêòu naÌo ðýõòc nhâòp vaÌo?", vbInformation, "Thông baìo lôÞi saÒy ra"
    Exit Sub
    End If
    If IIf(IsNull(TxtAccess), "", TxtAccess) = "" Then
    MsgBox "không coì dýÞ liêòu naÌo ðýõòc nhâòp vaÌo?", vbInformation, "Thông baìo lôÞi saÒy ra"
    Exit Sub
    End If
    '''''''
    Call Ex2Ac(ExcelPath$ & AccessPath$) '<-- Thay tên file Excel kèm Path thích ho'p

    'Call Access2Excel2("txtExcel", "TxtAccess")
    MsgBox "ÐaÞ nhâòp thaÌnh công?", vbInformation, "Thông baìo "
    End Sub
    Private Sub Ex2Ac(ExcelPath$)

    Const acImport = 0: Const acSpreadsheetTypeExcel9 = 8
    Set objAccess = CreateObject("Access.Application")
    'objAccess.NewCurrentDatabase AccessPath$
    objAccess.OpenCurrentDatabase ("TxtAccess")
    objAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tblnhap", "txtExcel", True
    End Sub
    Hì hì, cái này dùng cũng dc đấy. Bạn viết không sai nhưng hơi thừa, có mấy cái dấu (") được dùng không đúng chỗ. Nó đang là tham biến thì biến nó thành text thì làm sao mà lại không báo lỗi.
    Cái này "txtExcel" và "TxtAccess" cần bỏ mấy cái dấu '' là chạy phăm phăm thôi mà

    Mà bạn xem lại đoạn này



    Trích dẫn Gửi bởi vuthuanbkvn
    If IIf(IsNull(txtExcel), "", txtExcel) = "" Then
    MsgBox "không coì dýÞ liêòu naÌo ðýõòc nhâòp vaÌo?", vbInformation, "Thông baìo lôÞi saÒy ra"
    Exit Sub
    End If
    If IIf(IsNull(TxtAccess), "", TxtAccess) = "" Then
    MsgBox "không coì dýÞ liêòu naÌo ðýõòc nhâòp vaÌo?", vbInformation, "Thông baìo lôÞi saÒy ra"
    Theo mình thì bỏ nó đi và bẫy bằng câu lệnh error hơn
    VD:
    On error goto thongbaoloi
    (action)
    exit sub
    thongbaoloi:
    msgbox " Xem lai du lieu dau vao"

  10. #10
    Ngày tham gia
    May 2016
    Bài viết
    47
    Ðề: Chuyển dữ liệu từ EXcel vào ACCESS

    Nhân tiện đây cho hỏi người nào có source chỉ cần đặt sự kiện(VD: click) là nó auto convert các trường excel tùy chọn vào thành 01 table trong access. Rồi từ các table đó kết nối với nhau bằng câu lệnh VB chứ chuyển sang table tạm như SuyNghiDi nói cũng vất vả lắm mà lại không thuận tiện. Cảm ơn trước nhé

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •