
نوشته شده توسط
moustafa
در هر صورت چنانچه زحمتی نباشه مشتاق یادگیری روش شما استاد وسرور گرامی رو همون فایل می باشم .
ابتدا یک روال برای انتقال اطلاعات( شیت اطلاعات) به داخل فایل اکسس ایجاد می کنیم:
Private Sub ImportExcelData()
On Error Resume Next
Dim sFilePathName As String
Const sPassword As String = "125"
Dim xlApp As New Excel.Application
Dim xlWb As New Excel.Workbook
CurrentDb.Execute "Drop Table tblExcel"
With xlApp
.Visible = False
Set xlWb = .Workbooks.Open(txtFileName, , , , sPassword)
'.Sheets(1).Select
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "tblExcel", txtFileName, True
xlWb.Close
.Quit
End With
CurrentDb.TableDefs("tblExcel").Fields(0).Name = "f1"
DoCmd.RunSQL "DELETE * FROM tblExcel WHERE (f4 =""فصل"")"
در این روال فرض شده که فایل اکسل دارای پسورده و پسورد اون هم 125 هستش
بر اساس دستور ایمپورت در روال فوق اطلاعات فایل اکسل در جدولی با نام tblExcel در داخل فایل اکسس اضافه میشه
وقتی اطلاعات در جدول فوق درج میشه عناوین ستون های جدول اکسل در رکورد اول اضافه میشه که باید حذف بشه
با توجه به اینکه در جدول فوق عنوان فیلد ها(غیر از فیلد اول) با حرف F و اندیس 2 شروع میشه عنوان فیلد اول رو به F1 تغییر نام میدهیم
اگه روال فوق رو بدون درنظر گرفتن دو خط آخر امتحان کنی موارد ذکر شده در جدول فوق مشاهده میشه
پس با کد ماقبل آخر عنوان فیلد اول رو بهF1 تبدیل می کنیم و با کد آخر هم رکورد اول رو از جدول حذف می کنیم
حالا میریم سراغ اضافه نمودن رکوردهای جدول فوق به جدول اصلی فایل اکسس که من در این مثال نام tblMain برای این جدول بکار برده ام
پس برای این منظور تابعی بصورت زیر ایجاد می کنیم:
Public Sub AppendData(MainTable As String, ExcelTable As String)
'On Error Resume Next
Dim Fld1 As DAO.Field, Fld2 As DAO.Field, StrSql As String, FldName As String, Fld1Select As String
Dim RS1 As DAO.Recordset
Call ImportExcelData
Set RS1 = CurrentDb.OpenRecordset(MainTable)
Dim RS2 As DAO.Recordset
Set RS2 = CurrentDb.OpenRecordset(ExcelTable)
For Each Fld1 In RS1.Fields
FldName = FldName & ", " & Fld1.Name
Next
For Each Fld2 In RS2.Fields
Fld1Select = Fld1Select & "," & ExcelTable & "." & Fld2.Name
Next
FldName = Right(FldName, Len(FldName) - 1)
Fld1Select = Right(Fld1Select, Len(Fld1Select) - 1)
DoCmd.SetWarnings False
StrSql = "INSERT INTO " & MainTable & " (" & FldName & ")SELECT " & Fld1Select & " FROM " & ExcelTable & ""
DoCmd.RunSQL StrSql
DoCmd.SetWarnings True
MsgBox ("پايان عمليات انتقال اطلاعات")
RS1.Close
RS2.Close
Set RS1 = Nothing
Set RS2 = Nothing
End Sub
در نهایت اگه فرض بر این باشه که در هر دفعه انتقال اطلاعات جدول اصلی باید خالی بشه از کد زیر برای انتقال اطلاعات استفاده می کنیم:
If Nz(Me.txtFileName, "") = "" Then
MsgBox ("لطفا يک فايل انتخاب کنيد")
Exit Sub
End If
DoCmd.RunSQL "DELETE * FROM tblMain"
Call AppendData("tblMain", "tblExcel")