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

vuthuanbkvn

Member
Hội viên mới
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?
 
Ðề: 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?

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
 
Ðề: Chuyển dữ liệu từ EXcel vào ACCESS

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."
 
Sửa lần cuối:
Ðề: Chuyển dữ liệu từ EXcel vào ACCESS

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.
 
Ðề: Chuyển dữ liệu từ EXcel vào ACCESS

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
 
Ðề: 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
 
Ðề: 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

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:
 
Ðề: 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
 
Sửa lần cuối:
Ðề: Chuyển dữ liệu từ EXcel vào ACCESS

-----------------------------------------------------------------------------------------
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
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"
 
Sửa lần cuối:
Ðề: 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é
 
Ðề: Chuyển dữ liệu từ EXcel vào ACCESS

mình gán đc file excel đó vô 1 table rồi, cùng lúc đó mình mở luôn cái table đó lên xem thì sao hả các Bác????
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top