آموزش تهیه یک سند حسابداری ساده

Collapse
این تاپیک یک تاپیک مهم است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • ~M*E*H*D*I~
    • 2011/10/19
    • 4377
    • 70.00

    آموزش تهیه یک سند حسابداری ساده



    درود

    در این تاپیک نحوه ایجاد یک سند حسابداری ساده قرار داده میشه ، با توجه به اینکه رشته بنده حسابداری نیست امیدوارم دوستان گرامی آقایان ترابی، فیاضی و سرگزی ایرادات احتمالی این آموزش رو اصلاح و راهکار های بهتری نیز ارائه کنند



    بخش اول: مقدمات

    در حسابداری سنتی سند حسابداری(Journal Voucher) برگه ای است که حداقل یک تراکنش مالی(شامل یک طرف بدهکار و یک طرف بستانکار) در آن نوشته می شده است. و چنین مدرکی پس از امضای مرجع ذی صلاح و صدور آن قابل ثبت در دفاتر کل، معین و روزنامه است.
    با استفاده فراگیر از کامپیوتر در ثبت تراکنشهای مالی این دیدگاه نیز به طور کلی تغییر یافته است. سند حسابداری در ثبت رایانه ای رویدادهای مالی، عبارت است از یک فرم که کاربر می تواند یک/چند تراکنش مالی را در آن وارد نماید. هر تراکنش مالی مرکب از دو آرتیکل و هر آرتیکل در بردارنده حداقل یک کد حساب و مبلغ(بدهکار/بستانکار) می باشد به علاوه هر سند مالی الزاما دارای شماره سریال و تاریخ نیز هست.

    حساب چیست؟
    برای اینکه در هر زمان وضعیت مربوط به هر یک از اقلام حسابداری مشخص باشد ، آن قلم و کلیه تغییرات مربوط به آن در یک صفحه یا کارت به طور جداگانه نوشته می شود که به آن حساب می گویند . هر حساب شامل سه بخش می باشد که بخش اول عنوان حساب ، بخش دوم طرف بدهکار و بخش سوم طرف بستانکار است .
    عنوان حساب که مشخص می نماید اطلاعات مندرج در آن حساب متعلق به کدامیک از اقلام دارایی ، بدهی ، حقوق صاحبان سرمایه ، درآمد و هزینه می باشد.

    طرف راست حساب که در اصطلاح حسابداری آن را طرف بدهکار می نامند و طرف چپ حساب که در اصطلاح حسابداری آن را طرف بستانکار می نامند . در اصطلاح حسابداری ثبت رقمی در سمت راست یک حساب را بدهکار کردن و ثبت رقمی در سمت چپ حساب را بستانکار کردن آن حساب می گویند .

    ساده ترین شکل حساب به دلیل شباهتی که با حرف لاتین ( T ) دارد به نام
    " شکل تی " خوانده می شود که یک فرم ابتدایی می باشد و فقط توسط حسابداران به منظور تجزیه و تحلیل مسایل حسابداری و نیز توسط استادان در هنگام تدریس درس حسابداری مورد استفاده قرار می گیرد و الا در واحد های اقتصادی فرمهای کامل چاپی که دارای ستونهای متعدد می باشند به صورت اوراق جداگانه یا دفتر به کار می رود .

    حسابهای موجود در یک موسسه را از جهتی می توان به سه دسته تقسیم نمود :

    حسابهای دائمی
    این حسابها همانطوری که از نامشان پیداست ، دائمی هستند . یعنی ، فقط مربوط به یک دوره مالی نبوده ، مانده آنها به دوره مالی بعد انتقال می یابد . حسابهای ترازنامه ، از نوع حسابهای دائمی می باشند . در پایان هر دوره مالی ، حسابهای دائمی مانده گیری می شوند . سپس مانده های جدید در ترازنامه پایان دوره منعکس گردیده ، به دوره مالی بعد نقل می گردند . به حسابهای دائمی ، حسابهای واقعی نیز گفته می شود .


    حسابهای موقتی
    این حسابها ، که حسابهای اسمی نیز خوانده می شوند ، با پایان یافتن دوره مالی بسته شده ، در نتیجه مانده آنها به دوره مالی بعد انتقال نمی یابد . کلمه موقتی ، توصیف کننده خوبی برای این حسابهاست زیرا آنها فقط در طی یک دوره مالی و به منظور طبقه بندی و محاسبه تغییرات حاصله در حساب حقوق صاحبان سرمایه افتتاح گردیده ، در طی این مدت ، تنها افزایشها را نشان می دهند و نمی توانند کاهشها را نشان دهند و سر انجام در پایان دوره مالی نیز بسته می شوند .
    حسابهای مربوط به صورت سود و زیان جزء حسابهای موقتی می باشند . زیرا همانطوری که گفته شد ، مانده این حسابها ( درآمد فروش ، خرید ، هزینه های مستقیم خرید ، برگشت از فروش و تخفیفات ، برگشت از خرید و تخفیفات ، تخفیفات نقدی خرید و فروش و کلیه هزینه ها ) به حساب خلاصه سود و زیان بسته می شوند . مانده حساب اخیر ، سود یا زیان ویژه دوره مالی است که به حساب سرمایه انتقال می یابد . در نتیجه در پایان دوره مالی ، مانده ای از این حسابها وجود ندارد که به دوره مالی بعد منتقل گردد.

    حسابهای مخلوط
    این حسابها ، همانطوری که از نامشان پیداست ، مخلوطی از حسابهای دائمی و موقتی می باشند . بدین ترتیب ، در پایان دوره مالی ، با استفاده از تعدیلات ، آن قسمت از مانده حساب را که جزء حسابهای موقتی است ( باید به صورت سود و زیان انتقال یابد ، یعنی در محاسبه سود یا زیان ویژه دوره مالی موثر است و به حساب خلاصه سود و زیان بسته می شود ) ، از آن جدا می نمایند و مابقی را که جزء حسابهای دائمی است ، به ترازنامه پایان دوره انتقال می دهند . پیش پرداختهای هزینه ، پیش دریافتهای درآمد از حسابهای مخلوط می باشند .
    Last edited by ~M*E*H*D*I~; 2020/08/11, 19:47.
    [CENTER]
    [SIGPIC][/SIGPIC]
    [/CENTER]
  • ~M*E*H*D*I~
    • 2011/10/19
    • 4377
    • 70.00

    #2
    داده هایی که برای یک سند حسابداری نیاز داریم




    تاریخ سند: تاریخ ایجاد سند است که یک بار وارد می شود.
    شماره سند: شماره سند بر اساس سند هایی که تاکنون داشته ایم به صورت یک سریال منحصر به فرد وارد می شود
    عنوان حساب: عناوینی مانند خرید، فروش، بدهی، حقوق و...
    بدهکار: با توجه به عنوان حساب ها مشخص می شود و به تعداد عنوان حساب ردیف نیاز دارد
    بستانکار: با توجه به عنوان حساب ها مشخص می شود و به تعداد عنوان حساب ردیف نیاز دارد
    جمع: مجموع دو ستون بدهکار و بستانکار
    شرح سند: توضیحی برای سند است که یکبار به عنوان اطلاعات کلی مطرح می شود
    نام مؤسسه: یکبار مطرح شده و نام مؤسسه مربوطه است
    شرح ردیف: به تعداد عنوان حساب ردیف نیاز دارد و جهت این است که شخص مراجعه کننده به راحتی اطلاعاتی در رابطه با آن حساب بدست آورد
    شماره مدرک: جهت دسترسی راحت به اطلاعات استفاده می شود و به تعداد عنوان حساب ردیف نیاز دارد
    تاریخ مدرک: گاهی ممکن است تاریخ سند با تاریخ مدرک مطابق نباشد لذا ستونی جهت تاریخ مدرک در نظر گرفته می شود
    نام مشتری یا عطف: در یک مؤسسه مشتریان متعددی خرید و فروش انجام می دهند جهت دسترسی راحت تر به جزئیات مدرک برای اسامی مشتریان نیز ستونی در نظر گرفته می شود.
    ردیف: تعداد خط های سند را مشخص می کند
    سال مالی: سالی مربوط به سند
    نام مدیر عامل: جهت درج و پرینت در انتهای حساب قرار میگیرد
    نام تنظیم کننده سند: جهت درج در انتهای سند استفاده می شود



    [CENTER]
    [SIGPIC][/SIGPIC]
    [/CENTER]

    کامنت

    • ~M*E*H*D*I~
      • 2011/10/19
      • 4377
      • 70.00

      #3


      تبدیل جدول اطلاعات به Table

      ابتدا بایستی ردیف اول و عنوان ستون ها را انتخاب و از تب insert گزینه table را انتخاب کنیم به نحوی که نتیجه همانند شکل زیر گردد ،دقت کنید حتما در ابتدا یک خط برای سند انتخاب کنید تا پس از اعمال تنظیمات لازم برای همان یک خط به محض ایجاد یک خط جدید برای سند کلیه تنظیمات اعمال شده به خط جدید منتقل گردد. این نکته از اهمیت زیادی برای ما برخوردار است چون نمیدانیم سند چند خط خواهد داشت.








      دقت کنید گزینه my table has headers تیک خورده باشد.




      بر روی table ایجاد شده کلیک کنید و از تب data گزینه فیلتر را غیر فعال نمایید تا زبانه های فیلتر نمایش داده نشوند.




      لیست کردن عنوان های حساب و نام مشتریان
      در شیت مجزایی عنوان های حساب و نام مشتریان خود را وارد نموده آنهارا از طریق data validation به لیست فروریز تبدیل کنید برای آموزش این بخش به لینک زیر مراجعه کنید


      آموزش تصویری نام گذاری سریع یک محدوده و ایجاد لیست فروریز از طریق دیتا ولیدیشن







      در صورت وارد کردن عنوان و حساب و مشتری مغایر با لیست شما پیغامی تنظیم نمایید تا خطا صادر شود (شکل زیر)




      شماره مدرک و بدهکار و بستانکار
      این سه می بایست عدد باشند و بزرگتر از صفر لذا ابتدا بر روی سلول مربوط به هر کدام کلیک کرده CTRL+1 را فشار دهید و تنظیمات زیر را اعمال کنید.





      سپس از طریق Datevalidation محدوده ای معتبر برای این اعداد تعریف نموده و پیغام خطای مناسب نیز وارد نمایید.






      [CENTER]
      [SIGPIC][/SIGPIC]
      [/CENTER]

      کامنت

      • ~M*E*H*D*I~
        • 2011/10/19
        • 4377
        • 70.00

        #4


        تاریخ سند و مدرک
        برای تاریخ دو کار می توانید انجام دهید
        الف: از طریق format cell
        با فشردن ctrl+1 همانند تصویر می توانید فرمت تاریخ را تعریف نمایید:
        کد PHP:
        0000"/"00"/"00 




        ب : از طریق Datavalidation
        تاریخ سند مربوط به یک روز است اما تاریخ مدرک امکان دارد مرتبط با روز های متعدد باشد. میتوان تاریخ را به صورت اعداد 6 رقمی از 111111 تا 999999 وارد کنیم یعنی همه تاریخ ها با فرمت مثلا 930331 وارد شود که این روش توصیه می شود.







        نکته: می توان سلول هایی که داده در آنها وارد می شود رنگ یا Border متفاوت داشته باشند.
        برای بدهکار و بستانکار اعداد سه رقم سه رقم جدا گردد و ممیز نداشته باشد.
        برای عنوان حساب و عنوان مشتری از طریق Validation list اطلاعات انتقال پیدا کند و با اضافه شدن عناوین لیست ایجاد شده به روز شود.


        نکته : برای نام موسسه و نام مدیر عامل بهتر است تابعی نوشته شود تا عنوان از آن تابع استخراج گردد و در تمامی شیت ها از این تابع استفاده شود و در صورت تغییر به راحتی بتوان با اصلاح تابع تمام اطلاعات به روز آوری شود.
        نام شرکت:

        کد PHP:
        Public Function onvan()
        onvan "شرکت الف"
        End Function 

        نام مدیر عامل:

        کد PHP:
        Public Function name1()
        name1 "مدیر عامل: خانم ب"
        End Function 
        نام تنظیم کننده:

        کد PHP:
        Public Function name2()
        name2 "تنظیم کننده: خانم الف"
        End Function 
        سال مالی:

        کد PHP:
        Public Function salemali()
        salemali "1393"
        End Function 
        ایجاد جمع سند اتوماتیک
        بر روی تیبل ایجاد شده کلیک کنید در نوار ابزار از همانند تصویر بر روی Total Row کلیک کنید:




        و در ردیف اضافه شده گزینه sum را برای بدهکار و بستانکار انتخاب کنید








        از این پس با اضافه شدن هر ردیف جمع کل بدهکار و بستانکار نیز محاسبه می گردد.کلمه جمع را می توانیم خودمان بنویسیم.
        از طریق Name manager نام تیبل را به asnad تغییر می دهیم تا در ادامه از این نام در کد های خود استفاده کنیم.
        [CENTER]
        [SIGPIC][/SIGPIC]
        [/CENTER]

        کامنت

        • ~M*E*H*D*I~
          • 2011/10/19
          • 4377
          • 70.00

          #5

          اضافه کردن یک سطر به تیبل

          در کنار سند یک دکمه گذاشته و آنرا به ماکروی زیر متصل میکنیم
          کد:
          [LEFT][COLOR=#800000]
          Public Sub addroww()
          Dim sheet As Worksheet
          Dim table As ListObject
          Set sheet = Application.ActiveWorkbook.Worksheets("asnad")
          Set table = sheet.ListObjects.Item("asnad")
          table.ListRows.Add
          End Sub
          [/COLOR][/LEFT]
          [COLOR=#800000][/COLOR]


          در خط زیر asnad نام شیت حاوی سند حسابداری است
          کد:
          [LEFT][COLOR=#800000]
          Set sheet = Application.ActiveWorkbook.Worksheets("asnad")
          [/COLOR][/LEFT]
          [COLOR=#800000][/COLOR]


          و در خط زیر ansad نام تیبل حاوی سند است
          کد:
          [LEFT][COLOR=#800000]
          
          Set table = sheet.ListObjects.Item("asnad")
          [/COLOR][/LEFT]
          [COLOR=#800000][/COLOR]


          حذف سطر انتخاب انتخاب شده

          برای حذف ردیف کد زیر را نوشته و آنرا به دکمه ای جهت حذف سند ارتباط دهید در این کد پس از انتخاب ردیف مورد نظر می توان انرا حذف کرد.
          کد:
          [LEFT][COLOR=#800000]
          
          Public Sub dellrow()
          Dim row1
          Dim sheet As Worksheet
          Dim table As ListObject
          Set sheet = Application.ActiveWorkbook.Worksheets("asnad")
          Set table = sheet.ListObjects.Item("asnad")
          row1 = Application.ActiveCell.Row - table.DataBodyRange.Row + 1
          On Error GoTo errhandler
          table.ListRows(row1).Delete
          errhandler:
          If Err.Number = 9 Then
          UserForm1.Show
          End If
          End Sub
          [/COLOR][/LEFT]
          [COLOR=#800000][/COLOR]





          حال اگر دقت کنید مشاهده خواهید کرد کلیه اعتباراتی که در سطر اول از طریق data validation اعمال کرده بودید در سطر های جدید نیز اعمال شده است.
          ایرادی که به هنگام حذف سطر ممکن است با ان روبرو شوید این است که اگر سطر انتخاب شده خارج از تیبل باشد با خطای زیر مواجه می شوید.





          جهت کنترل این خطا کدهای زیر را در نظر گرفته ایم


          کد:
          [LEFT][COLOR=#800000]
          On Error GoTo errhandler
          table.ListRows(row1).Delete
          errhandler:
          If Err.Number = 9 Then
          UserForm1.Show
          End If
          
          
          [/COLOR][/LEFT]
          [COLOR=#800000][/COLOR]


          در صورت بروز خطا کد به لیبل errhandler: منتقل می شود و کد خطا مورد بررسی قرار میگیرد اگر کد خطا 9 بود یوزرفرم1 نمایش داده می شود.




          نکته : شما می توانید بجای فرم از msgbox استفاده کنید.
          [CENTER]
          [SIGPIC][/SIGPIC]
          [/CENTER]

          کامنت

          • misammisam
            مدير تالار حسابداری و اکسل

            • 2014/04/04
            • 892
            • 64.00

            #6
            مهدي جان ممنون از مطلب خوبت ، مخصوصا كه كل كارو با حوصله توضيح دادي .
            من چند تا سوال برام پيش اومد كه جواب بعضياشو هر چي گشتم پيدا نكردم ، گفتم از خودت بپرسم .
            اين عبارت set كه مثل زير آوردي ، دقيقا چيكار ميكنه ؟
            کد PHP:
            Set table sheet.ListObjects.Item("asnad"
            سوال بعديم اينكه ، در آخر تو طراحي فايلت قرار كلا يه دكمه براي حذف سطر سند و يه دكمه هم براي اضافه كردن سطر سند باشه يا براي هر سند قراره يه دكمه گذاشته بشه ؟
            بازم ممنونم
            [CENTER][SIGPIC][/SIGPIC]
            [/CENTER]
            [CENTER][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][INDENT]
            [CENTER][SIZE=3][URL="https://affstat.adro.co/click/adf04053-f8a6-439a-9ac4-e6a7e6f4b455"][B]اينجا كليك نكنيا ![/B][/URL][/SIZE]
            [/CENTER]
            [/INDENT]

            [/FONT][/FONT][/FONT][/FONT][/FONT]
            [/CENTER]

            کامنت

            • ~M*E*H*D*I~
              • 2011/10/19
              • 4377
              • 70.00

              #7
              نوشته اصلی توسط misammisam
              مهدي جان ممنون از مطلب خوبت ، مخصوصا كه كل كارو با حوصله توضيح دادي .
              من چند تا سوال برام پيش اومد كه جواب بعضياشو هر چي گشتم پيدا نكردم ، گفتم از خودت بپرسم .
              اين عبارت set كه مثل زير آوردي ، دقيقا چيكار ميكنه ؟
              کد PHP:
              Set table sheet.ListObjects.Item("asnad"
              سوال بعديم اينكه ، در آخر تو طراحي فايلت قرار كلا يه دكمه براي حذف سطر سند و يه دكمه هم براي اضافه كردن سطر سند باشه يا براي هر سند قراره يه دكمه گذاشته بشه ؟
              بازم ممنونم
              خواهش می کنم میثم جان
              ببین ما تو VBA میتونیم اشیاء رو به متغیر ها نسبت بدیم مواردی مثل سلول ها ، رنج ها ، سطر ها ، ستون ها ، نمودار ها ، تیبل ها، شیت ها و... از این دسته هستند که باید توسط set به متغیر اختصاص داده بشن

              بخش دوم سوالت ، برای ثبت سند ما همین یک تیبل رو ایجاد خواهیم کردم برای اسناد جدید در شیتی به عنوان بک آپ سند رو ذخیره میکنیم تیبل رو پاک میکنیم و سند جدید رو ایجاد میکنیم که در آینده توضیح میدم
              [CENTER]
              [SIGPIC][/SIGPIC]
              [/CENTER]

              کامنت

              • ~M*E*H*D*I~
                • 2011/10/19
                • 4377
                • 70.00

                #8

                اضافه کردن شماره ردیف
                روش اول برای گذاشتن شماره ردیف استفاده از تابع row است





                عدد 4 ناشی از 4 ردیفی بالایی است که در سند مورد استفاده قرار نگرفته است ، ایراد این روش این است که در صورت کم یا زیاد شدن ردیف این ترتیب به هم می ریزد

                روش دوم

                در این روش از تابعی با کد زیر استفاده میکنیم

                کد:
                [LEFT][COLOR=#800000]
                
                Public Function rownumber(r1 As Range)
                Dim sheet As Worksheet
                Dim table As ListObject
                Set sheet = Application.ActiveWorkbook.Worksheets("asnad")
                Set table = sheet.ListObjects.Item("asnad")
                rownumber = r1.Row - table.DataBodyRange.Row + 1
                End Function
                [/COLOR][/LEFT]
                [COLOR=#800000][/COLOR]



                این تابع را در سند به شکل زیر بکار میگیریم:




                در سلول اول ردیف تابع را فراخوانی می کنیم و در متغیر ورودی تابع یکی از ستون های روبروی ردیف اول مانند عنوان حساب را وارد می کنیم
                در این صورت تمام ردیف ها به ترتیب شماره گذاری می شود و با حذف یا اضافه ردیف نیز این ترتیب به هم نمی ریزد
                [CENTER]
                [SIGPIC][/SIGPIC]
                [/CENTER]

                کامنت

                • ~M*E*H*D*I~
                  • 2011/10/19
                  • 4377
                  • 70.00

                  #9


                  تهیه پشتیبان از سند

                  در این نمونه اسناد با همان فرمتی که تهیه شده اند بکاپ گیری می شوند ، در روش دیگر میتوان با فرمت یک دیتابیس از داده ها پشتیبان تهیه کرد به این نحو که برای هر فاکتور فیلدی(ستونی) در نظر گرفته و داده ها را ذخیره کرد
                  شیت جدیدی با نام bankasnad ایجاد می کنیم سپس در ماژولی کدهای زیر را می نویسیم
                  کد PHP:

                  Public  sheet As Worksheetsh As Worksheethesab As Worksheet
                  Public  shomaresanad As Integer
                  Public Sub backup()
                   
                  With Application
                          
                  .ScreenUpdating False
                          
                  .EnableEvents False
                  End With
                  Set sheet 
                  Application.ActiveWorkbook.Worksheets("asnad")
                  Set sh Application.ActiveWorkbook.Worksheets("bankasnad"(
                  Set hesab Application.ActiveWorkbook.Worksheets("hesab")
                  Dim shsanad As Rangeshsanadback As Range
                  Set shsanad 
                  sheet.Range("h2")
                  Set shsanadback hesab.Range("d1")
                  If 
                  sheet.Range("sumbed") <> sheet.Range("sumbes"Then
                  MsgBox    
                  "سند تراز نیست"
                  GoTo ExitTheSub:
                  End If
                  On Error Resume Next
                  With sh
                      fin 
                  = .Cells.Find(shomaresanadSearchOrder:=xlByRowsSearchDirection:=xlPrevious).Row
                  End With
                  If fin <> "" Then
                  MsgBox    
                  "این سند قبلا ذخیره شده"
                  GoTo ExitTheSub:
                  End If
                  Dim lrow As Integershlrow As IntegerStartRow
                  Dim lcol 
                  As Integer
                  Dim CopyRng 
                  As Range
                  On Error 
                  GoTo errhandler
                  lrow 
                  LastRow(sheet(
                  shlrow LastRow(s)
                  errhandler:
                  If 
                  Err.Number 9 Then
                  UserForm2
                  .Show
                  End 
                  If
                  StartRow 2
                  Set CopyRng 
                  sheet.Range(sheet.Rows(StartRow), sheet.Rows(lrow))
                                  If 
                  shlrow CopyRng.Rows.Count sh.Rows.Count Then
                                      MsgBox  
                  "ردیف های موجود در شیت bankasnad کافی نیست"
                                      
                  GoTo ExitTheSub
                                  End 
                  If
                                 
                  CopyRng.copy
                                  With sh
                  .Cells(shlrow 2"A")
                                      .
                  PasteSpecial xlPasteValues
                                      
                  .PasteSpecial xlPasteFormats
                                      Application
                  .CutCopyMode False
                                  End With
                      Application
                  .GoTo sh.Cells(1)
                      
                  sh.Columns.AutoFit
                      With Application
                          
                  .ScreenUpdating True
                          
                  .EnableEvents True
                     End With
                  ExitTheSub
                  :
                  Exit 
                  Sub
                  End Sub 
                  در قسمت declaration ماژول متغیرهای زیر را به صورت public تعریف میکنیم دلیل این کار این است که که در طول ماژول به مقادیر این متغیرها نیاز داریم و اگر دامنه (طول عمر) آنها محدود به سابروتین شود برنامه خواسته مارا محقق نخواهد کرد
                  کد PHP:

                  Public sheet As Worksheetsh As Worksheethesab As Worksheet
                  Public shomaresanad As Integer 
                  قبلا از عمل پشتیبان گیری باید از تراز بودن سند مطمئن شویم تراز بودن به معنای برابر بودن حاصل جمع مقادیر بدهکار و بستانکار است
                  کد PHP:

                  If sheet.Range("sumbed") <> sheet.Range("sumbes"Then
                  MsgBox    
                  "سند تراز نیست"
                  GoTo ExitTheSub:
                  End If 
                  در شیت asnad سلول حاصل جمع بدهکار را sumbed و سلول حاصلجمع بستانکار را sumbes نامیده ایم عدم تساوی این دو به مفهوم تراز نبودن سند است لذا در صورت بروز این خطا کد متوقف شده و تا رفع خطا و تراز کردن سند امکان تهیه پشتیبان نمی دهد.
                  مورد بعد اطمینان از این است که سند تکراری نباشد ، قبلا گفتیم هر سند شماره منحصر به فردی دارد لذا قبلا از ذخیره سند این شما در شیت بکاپ مورد جستجو قرار میگیرد و در صورتی که وجود داشت پیغام خطا صادر می شود.

                  کد PHP:
                  On Error Resume Next
                  With sh
                      fin 
                  = .Cells.Find(shomaresanadSearchOrder:=xlByRowsSearchDirection:=xlPrevious).Row
                  End With
                  If fin <> "" Then
                  MsgBox    
                  "این سند قبلا ذخیره شده"
                  GoTo ExitTheSub:
                  End If 

                  شیت asnad را در این کد به متغیر sheet اختصاص داده ایم و شیت backupasnad را به شیت sh


                  کد PHP:
                  Set sheet Application.ActiveWorkbook.Worksheets("asnad")
                  Set sh Application.ActiveWorkbook.Worksheets("bankasnad"


                  روال کار این است که کد محدوده سند را در شیت asnad کپی کرده و در شیت backupasnsd پیست میکند لذا متغیر هایی به شرح زیر نیاز داریم
                  Lrow : آخرین ردیف بکار رفته در شیت asnad
                  Shlrow : آخرین ردیف استفاده شده در شیت backupasnad
                  Startrow : ردیفی است که هر سند از آن ردیف شروع شده است در نمونه ما سند از ردیف 2 شروع شده است
                  Copyrng : محدوده ای از سند در شیت asnad که باید کپی شود
                  کد PHP:

                  Dim lrow 
                  As Integershlrow As IntegerStartRow
                  Dim CopyRng 
                  As Range 
                  تابع زیر آخرین ردیف بکار رفته شده در هر شیت را تعیین می کند:

                  کد PHP:

                  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 
                  برای تعین آخرین ردیف بکار رفته در هر شیت کافیست نام متغیری که به هرشیت اختصاص داده ایم با این تابع فراخوانی نموده و مقدار آن را در ذخیره کنیم
                  کد PHP:


                  lrow 
                  LastRow(sheet)
                  shlrow LastRow(sh

                  حال در شیت asnad از ردیف 2 تا ردیف lrow انتخاب کرده و به متغیر copyrng اختصاص می دهیم

                  کد PHP:

                  StartRow 
                  2
                  Set CopyRng 
                  sheet.Range(sheet.Rows(StartRow), sheet.Rows(lrow))
                                  If 
                  shlrow CopyRng.Rows.Count sh.Rows.Count Then
                                      MsgBox  
                  "ردیف های موجود در شیت bankasnad کافی نیست"
                                      
                  GoTo ExitTheSub
                                  End 
                  If
                                 
                  CopyRng.copy 
                  ممکن است در شیت backupasnad تعداد ردیف های شیتی که استفاده کردیم تمام شده باشد که البته احتمال کمی دارد اما می توان آنرا چک کرد

                  کد PHP:


                                  
                  If shlrow CopyRng.Rows.Count sh.Rows.Count Then
                                      MsgBox  
                  "ردیف های موجود در شیت bankasnad کافی نیست"
                                      
                  GoTo ExitTheSub
                                  End 
                  If 

                  حال محدوده copyrng را کپی کرده و بر اساس آخرین ردیف شیت backupasnad پیست می کنیم

                  کد PHP:

                  CopyRng
                  .copy
                                  With sh
                  .Cells(shlrow 2"A")
                                      .
                  PasteSpecial xlPasteValues
                                      
                  .PasteSpecial xlPasteFormats
                                      Application
                  .CutCopyMode False
                                  End With 

                  بین هر سند دو ردیف فاصله گذاشته ایم تا تداخلی پیش نیاید.
                  نکته: برای اجرای این کد فایل برنامه بایستی فعال باشد یعنی در حالت انتخاب قرارداشته باشد در غیر این صورت خطای زیر صادر می شود:
                  کد PHP:

                  Subscript out of range 
                  (Error 9



                  می توان این خطا را کنترل کرد

                  کد PHP:

                  errhandler
                  :
                  If 
                  Err.Number 9 Then
                  UserForm2
                  .Show
                  End 
                  If 

                  در یوزرفرم 2 پیغامی مبنی بر فعال کردن فایل صادر می شود اما پیشنهاد ما این است که فایل را فعال کنید و سپس کد را اجرا کنید تا مکررا با این پیغام روبرو نشوید.
                  برای اجرای این کد کلیدی به نام تهیه پشتیبان در نظر گرفته و کد را به آن اختصاص می دهیم.




                  [CENTER]
                  [SIGPIC][/SIGPIC]
                  [/CENTER]

                  کامنت

                  • ~M*E*H*D*I~
                    • 2011/10/19
                    • 4377
                    • 70.00

                    #10


                    حذف سند


                    بعد از پکاب گیری سند جاری می بایست حذف شده و تیبل برای ثبت اطلاعات جدید آماده گردد، برای اینکار کد زیر را می نویسیم:

                    کد PHP:
                    Sub del()
                    Dim shsanad As Rangeshsanadback As Range
                     With Application
                            
                    .ScreenUpdating False
                            
                    .EnableEvents False
                        End With
                    Set hesab 
                    Application.ActiveWorkbook.Worksheets("hesab")
                    Set sheet Application.ActiveWorkbook.Worksheets("asnad")
                    Set shsanadback hesab.Range("d1")
                    Set shsanad sheet.Range("h2")
                    shomaresanad shsanadback.Value
                    Range
                    ("asnad[[بستانکار]:[عنوان حساب]]").Select
                        Selection
                    .ClearContents
                    shomaresanad 
                    shomaresanad 1
                    errhandler
                    :
                    If 
                    Err.Number 9 Then
                    UserForm2
                    .Show
                    End 
                    If
                    shsanadback.Value shomaresanad
                    shsanad
                    .Value shsanadback.Value
                    End Sub 
                    گفته شد هر سند شماره سند منحصر به فردی دارد ، قصد داریم این شماره به صورت اتوماتیک ایجاد گردد در شیت حساب سلولی در نظر میگیریم

                    کد PHP:
                    Set shsanadback hesab.Range("d1"




                    عدد یک را در این سلول وارد میکنیم که نمایان گر شماره اولین سند است ، در شیت asnad در سلول h2 شماره سند وارد می شد

                    کد PHP:

                    Set shsanad 
                    sheet.Range("h2"
                    در بخش declaration ماژول متغیری از نوع public جهت ذخیره این شماره تعریف کردیم
                    کد PHP:

                    Public shomaresanad As Integer 
                    حال مقدار سلول d1 را به این متغیر نسبت می دهیم
                    کد PHP:

                    shomaresanad 
                    shsanadback.Value 
                    محدوده سند را انتخاب نموده و پاک می کنیم
                    کد PHP:

                    Range
                    ("asnad[[بستانکار]:[عنوان حساب]]").Select
                        Selection
                    .ClearContents 
                    یک واحد به شماره سند می افزاییم

                    کد PHP:

                    shomaresanad 
                    shomaresanad 

                    مقدار سلول h2 در شیت asnad را برابر با متغیر shomaresanad قرار می دهیم

                    کد PHP:
                    shsanadback.Value shomaresanad 
                    همین مقدار را در شیت hesab و سلول d1 نیز ذخیره می کنیم تا برای سند بعدی مورد استفاده قرار گیرد
                    کد PHP:

                    shsanad
                    .Value shsanadback.Value 

                    برای اجرای کد آنرا به کلیدی تحت عنوان پاک کردن سند وصل می کنیم





                    پایان

                    لطفا دوستان نظرات و پیشنهادات خودشون رو در رابطه با این آموزش مطرح کنند
                    فایل های پیوست شده
                    [CENTER]
                    [SIGPIC][/SIGPIC]
                    [/CENTER]

                    کامنت

                    • esa

                      • 2015/03/01
                      • 26

                      #11
                      سلام دوست عزیز
                      تازه مطالبتان را مطالعه کردم من به نوبه خودم از دقت و ظرافت توضیح در ارائه تشکر می کنم از مدیران انجمن که این محیط را جهت تبادل نظر آماده کرده اند س÷اسگزارم

                      کامنت

                      • mohsen.adlkhah

                        • 2014/11/24
                        • 7

                        #12
                        سلام.فقط یه سوال،چطور میشه به دفتر کل منتقل داد؟؟؟؟؟؟؟؟؟؟

                        کامنت

                        • misammisam
                          مدير تالار حسابداری و اکسل

                          • 2014/04/04
                          • 892
                          • 64.00

                          #13
                          نوشته اصلی توسط mohsen.adlkhah
                          سلام.فقط یه سوال،چطور میشه به دفتر کل منتقل داد؟؟؟؟؟؟؟؟؟؟
                          سلام
                          اگه شما سندهای حسابداری رو دیتابستون در نظر بگیرید با یه PivotTable میتونید ازش یه گزارش بگیرید که میشه ترزازنامه شما ، اگر هم از Details خود PivotTable استفاده بشه ، این میشود یه دفتر کل بدون مانده حساب ، با یه ماکروی متوسط میتونی برای این Details که از PivotTable گرفتی هم مانده حساب بزنی و هم گردش حساب براش درست کنی .
                          تو این لینک پایین یه برنامه گذاشتم که میتونید بهتر ببینید منظورم چیه ، ماهیت برنامه مثل همین برنامه ایه که مهدی گذاشته ، فقط تو کدنویسیاش با هم فرق میکنن که برای شما فرقی نمیکنه .
                          مهم تو یه برنامه حسابداری در اکسل اینه که دفتر روزنامه ( سندهای حسابداریهارو ) جوری بزنید که شبیه یک بانک اطلاعاتی بشه
                          ، اگه ساختار بانک اطلاعاتی درست باشه ، هر چیزیرو میتونید براش درست کنید .

                          برنامه حسابداري خودم در اكسل براي دوستاني كه دنبال مثال كاري ميگردن
                          [CENTER][SIGPIC][/SIGPIC]
                          [/CENTER]
                          [CENTER][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][INDENT]
                          [CENTER][SIZE=3][URL="https://affstat.adro.co/click/adf04053-f8a6-439a-9ac4-e6a7e6f4b455"][B]اينجا كليك نكنيا ![/B][/URL][/SIZE]
                          [/CENTER]
                          [/INDENT]

                          [/FONT][/FONT][/FONT][/FONT][/FONT]
                          [/CENTER]

                          کامنت

                          • shirin366
                            • 2016/05/10
                            • 1

                            #14
                            سلام و خداقوت
                            ضمن تشکر فراوان بابت توضیحات عالی و کامل شما
                            من از فایل ضمیمه استفاده کردم ولی برای تهیه پشتیبان تعدادی از اسناد ،پیغام( این سند قبلا ذخیره شده است)را میدهد!!!!

                            کامنت

                            • ~M*E*H*D*I~
                              • 2011/10/19
                              • 4377
                              • 70.00

                              #15
                              نوشته اصلی توسط shirin366
                              سلام و خداقوت
                              ضمن تشکر فراوان بابت توضیحات عالی و کامل شما
                              من از فایل ضمیمه استفاده کردم ولی برای تهیه پشتیبان تعدادی از اسناد ،پیغام( این سند قبلا ذخیره شده است)را میدهد!!!!
                              درود
                              شاید کد سند تکراری باشه این مورد رو چک کنید اگر مشکل برقرار بود توضیحات بیشتر بفرمایید تا بررسی بشه
                              [CENTER]
                              [SIGPIC][/SIGPIC]
                              [/CENTER]

                              کامنت

                              چند لحظه..