سلام
در ابتدا باید عرض کنم شما باید اطلاعات لیست هر ماه وام را در یک لیست جداگانه تهیه کنید . به عبارتی اگر لیست وام برای ماههای مختلف در شیت های یک فایل اکسل قرار دارد شما باید لیست هر شیت را جدا و بصورت یک فایل مستقل ایجاد کنید
بنده اطلاعات سه شیت فایل اکسل شما رو تبدیل به سه تا فایل نمودم و نامی که برای آنها انتخاب کردم شامل عدد سال و عدد ماه میباشد.
فرض را براین قرار داده ام که اطلاعات شیت اول مربوط به فروردین 1403 ، شیت دوم اردیبهشت 1403 و شیت سوم خرداد 1403 میباشد.
و اما مواردی که در ارتباط با فایل اکسس باید عرض کنم :
در فایل اکسس ابتدا یک جدول با نام TblMainExcel ایجاد کرده ام که دارای 10 فیلد با نام های فینگلیش شده نام های فارسی ستون های فایل اکسل میباشد .
سپس یک فرم اصلی با نام FrmImport ایجاد کرده ام که در این فرم کمند باتنی تحت عنوان افزودن اطلاعات از اکسل تعبیه نموده ام که در رویداد کلیک آن کد های زیر بکار رفته :
Dim dag As Office.FileDialog
Dim IntSal As Integer
Dim IntMah As Integer
Dim strFile As String
Dim item As Variant
Set dag = Application.FileDialog(msoFileDialogFilePicker)
dag.AllowMultiSelect = False
dag.Title = "Select the Excel file to import"
dag.Filters.Clear
dag.Filters.Add "Excel SpreadSheets", "*.xls,*.xlsx"
If dag.Show Then
For Each item In dag.SelectedItems
strFile = Dir(item)
Me.txtPath = item
Next
End If
IntSal = Left(strFile, 4)
IntMah = Mid(strFile, 5, 2)
If DCount("Sal", "TblMainExcel", "Sal=" & IntSal & "") > 0 And DCount("Mah", "TblMainExcel", "Mah=" & IntMah & "") > 0 Then
MsgBox " .اطلاعات فايل انتخاب شده قبلاً اضافه گردیده است", vbCritical + vbMsgBoxRight, "توجه"
Exit Sub
End If
On Error Resume Next
CurrentDb.Execute "drop table [TblImportedExcel]"
If IsNull([txtPath]) Or Me.txtPath = "" Then
MsgBox "فايلي انتخاب نشده است", vbInformation + vbMsgBoxRight, "توجه"
Exit Sub
Else
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "TblImportedExcel", Me.txtPath, True
DoCmd.OpenQuery "QAppendRec", acViewNormal, acEdit
DoCmd.RunSQL "Update TblMainExcel Set TblMainExcel.Sal=" & IntSal & ",Mah=" & IntMah & " where Sal is null"
MsgBox "اطلاعات فايل " & mahname(IntMah) & " سال " & IntSal & " با موفقيت اضافه گرديد", vbInformation + vbMsgBoxRight, "توجه"
End If
چند خط کد اول مربوط به انتخاب فایل اکسل میباشد . بعد از چند خط کد فوق شماره سال و شماره ماه فایل انتخاب شده که از مسیر فایل انتخاب شده استخراج گردیده در دو متغییر IntSal و IntMah قرار داده ام و در کد بعدی زیر شرط گذاشته ام که با توجه به شماره سال و ماه اگر اطلاعات سال و ماه فایل انتخاب شده قبلاً به جدول اکسس اضافه شده باشد پیغام « اطلاعات قبلاً اضافه گردیده » صادر شود و ادامه عملیات متوقف شود .
If DCount("Sal", "TblMainExcel", "Sal=" & IntSal & "") > 0 And DCount("Mah", "TblMainExcel", "Mah=" & IntMah & "") > 0 Then
MsgBox " .اطلاعات فايل انتخاب شده قبلاً اضافه گرده است", vbCritical + vbMsgBoxRight, "توجه"
Exit Sub
End If
با کد زیر جدولTblImportedExcel که اطلاعات فایل اکسل در آن ایمپورت شده و اطلاعات آن به جدول TblMainExcel اضافه شده حذف میبشود ( بمنظور دریافت اطلاعات جدید)
CurrentDb.Execute "drop table [TblImportedExcel]"
و در نهایت از طریق کدهای زیر ابتدا چک میشود که اگر فایل اکسلی انتخاب نشده باشد پیغام عدم انتخاب فایل صادر شود در غیر اینصورت اطلاعات فایل اکسل انتخاب شده به جدول اکسس از طریق کوئری QAppendRec اضافه شود.
ضمنا با کد زیر شماره سال و ماه نام فایل انتخاب شده به دو فیلد ایجادی در جدول اکسس تحت عنوان Sal و Mah اضافه میشود .
در سابفرم فرم اصلی هم اطلاعات تجمیعی وام افراد نمایش داده میشود.
تا این مرحله بررسی کن و مواردی که برای کنترل مد نظرت است مطرح کن تا ان شاءااله در ادامه انجام شود .
فعلاً ...