روش متفاوتی برای اعلام لزوم فعال سازی ماکرو در نوار security warning !

Collapse
این تاپیک قفل است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • Skynet

    • 2017/03/02
    • 142

    [حل شده] روش متفاوتی برای اعلام لزوم فعال سازی ماکرو در نوار security warning !

    با سلام و احترام
    با توجه به اهمیت فعال سازی ماکرو به هنگام نمایش نوار SECURITY WARNING ، بمنظور اجرای صحیح برنامه ، ابتکاری به ذهنم رسید ، که خواستم از اساتید عزیز راهنمایی بگیرم .
    یک عکسی با محتوای اعلام لزوم فعال سازی ماکرو در اکسل وارد کردم که کاربر به هنگام ورود به فایل دارای ماکرو ، با این عکس و لزوم فعال سازی ماکرو مواجه می شود !
    با فعال سازی ماکرو در نوار SECURITY WARNING ، می خوام این عکس حذف بشه ! و محتوای اصلی برنامه مشخص بشه !
    در حال حاضر میشه با ضبط ماکرو و با دستور حذف عکس، کار رو انجام داد و به نتیجه رسید، اما مشکل اونجا پیدا می شه که بعد از ذخیره شدن فایل، دفعه بعد در هنگام اجرای برنامه و فعال سازی ماکرو، دستور حذف عکس به مشکل بر می خوره و Error میده ! چون عکس قبلا" حذف شده و الان وجود نداره!
    اگر ممکنه اساتید عزیز کدی رو لطف کنند که اگر عکس مربوطه وجود داشت ، عکس مربوطه پاک بشه ، در غیر این صورت هیچ اقدامی صورت نگیره .
    خیلی ممنونم.
    Click image for larger version

Name:	123.jpg
Views:	1
Size:	377.8 کیلو بایت
ID:	145381
    فایل های پیوست شده
    Last edited by Skynet; 2017/04/11, 12:54.
  • rasools13

    • 2017/01/20
    • 360
    • 80.00

    #2
    با سلام
    ایده خوبی است.. تشکر
    با کنترل کردن خطا میتوان از بروز مشکل جلوگیری کرد
    ...
    کدی که در زمان باز شدن اکسل اجرا میشه رو به صورت ذیل اصلاح کنید.
    .
    کد PHP:
    Private Sub WORKBOOK_OPEN()
        
    On Error GoTo sucess_Open
        ActiveSheet
    .Shapes.Range(Array("Picture 1")).Select
        Selection
    .Delete
    sucess_Open
    :
        
    Range("L10:W18").Select
        ActiveCell
    .FormulaR1C1 "Hello My Friend :)"
        
    Range("L10:W18").Select
    End Sub 
    [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
    [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
    [/CENTER]

    کامنت

    • Skynet

      • 2017/03/02
      • 142

      #3
      نوشته اصلی توسط rasools13
      با سلام
      ایده خوبی است.. تشکر
      با کنترل کردن خطا میتوان از بروز مشکل جلوگیری کرد
      ...
      کدی که در زمان باز شدن اکسل اجرا میشه رو به صورت ذیل اصلاح کنید.
      .
      کد PHP:
      Private Sub WORKBOOK_OPEN()
          
      On Error GoTo sucess_Open
          ActiveSheet
      .Shapes.Range(Array("Picture 1")).Select
          Selection
      .Delete
      sucess_Open
      :
          
      Range("L10:W18").Select
          ActiveCell
      .FormulaR1C1 "Hello My Friend :)"
          
      Range("L10:W18").Select
      End Sub 
      باسلام و احترام
      خواهش می کنم، خوشحالم که ایده مورد نظر براتون جذاب بوده.
      مرسی از کد عالی تون. فکر می کنید برای بهینه شدن نحوه اجرای این ایده بشه اینطور برنامه نویسی کرد :

      در هنگام اجرای فایل اکسل عکس نمایش داده بشه و با فعال کردن ماکرو ، عکس مربوطه پنهان بشه و هنگام خارج شدن از فایل ( چه ذخیره بشه و چه نشه ) در آخرین لحظه خروج بصورت اتوماتیک به شیت عکس رفته و عکس ظاهر بشه !
      که در دفعه بعد، هنگام اجرای برنامه ما در شیت مورد نظر سازنده فایل هستیم و عکس دوباره ظاهر بشه ! در این صورت اگر ماکرو فعال بود عکس سریع پنهان میشه و اگر نه ، دوباره عکس اونجاست و اشاره به فعال سازی کنه !
      * ( شیت مورد نظر بطور مثال شیت HOME و راهنمای فایل هست که کاربران بایستی برای دسترسی به همه قسمت های فایل بهتره از اونجا با زدن لینک های مربوطه اقدام کنند )

      مزایای این روش :
      اگر فایل رو من اجرا کنم و ماکرو رو فعال کنم دیگه عکس پاک نمیشه ! و فقط پنهان میشه و با ذخیره و خروج از فایل ، و ارائه فایل به شخص دیگه ، هنگام اجرای فایل کاربر شیت مورد نظر سازنده فایل رو می بینه و عکس نمایش داده میشه و ماکرو رو فعال میکنه و عکس دوباره پنهان میشه و این پروسه برای همیشه ادامه پیدا می کنه و کاربران در اولین اقدام ماکرو رو فعال می کنن.
      خیلی ممنونم از شما جناب rasools13 عزیز.Click image for larger version

Name:	456.jpg
Views:	1
Size:	383.4 کیلو بایت
ID:	132065
      فایل های پیوست شده
      Last edited by Skynet; 2017/04/11, 12:43.

      کامنت

      • rasools13

        • 2017/01/20
        • 360
        • 80.00

        #4
        کد های ذیل رو جایگزین کنید
        همون چیزی هست که میخواهین
        .
        کد PHP:
        Private Sub WORKBOOK_OPEN()
            
        On Error GoTo sucess_Open
            Sheets
        ("Home").Shapes.Range(Array("Picture 1")).Visible msoFalse
        sucess_Open
        :
            
        Range("L10:W18").Select
            ActiveCell
        .FormulaR1C1 "Hello My Friend :)"
            
        Range("L10:W18").Select
        End Sub
        '
        '

        Private Sub Workbook_BeforeClose(Cancel As Boolean)
            
        On Error Resume Next
            Sheets
        ("Home").Shapes.Range(Array("Picture 1")).Visible msoTrue
            Sheets
        ("Home").Select
        End Sub 
        فایل های پیوست شده
        [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
        [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
        [/CENTER]

        کامنت

        • Skynet

          • 2017/03/02
          • 142

          #5
          بله دقیقا ، خیلی خیلی ممنونمممم
          دارم فکر می کنم آیا راهی هست زمان خارج شدن از فایل عکس نمایش داده نشه! ولی موقع باز کردن فایل ( و عدم فعال بودن ماکرو ) عکس در ابتدا نمایش داده بشه !

          معایب ایده فعلی :
          1- حرفه ای نبودن نمایش تصویر در هنگام خروج از فایل
          2- اگر کاربر هنگام خروج از فایل، کلید Cancel رو انتخاب کنه عکس باقی می مونه! و حتی می تونه اونو پاک کنه ! که در این صورت بعد از Save در دفعات اجرای بعدی برنامه دیگه عکس نشون داده نمیشه!

          حالت ایده آل اینه که :
          هر بار در هنگام وارد شدن به فایل اگر ماکرو غیر فعال بود عکس نمایش داده بشه که با فعال سازی ماکرو عکس اتوماتیک پنهان بشه .
          و تحت هیچ شرایطی کاربر نتونه به عکس مورد نظر دسترسی داشته و اون رو ویرایش و یا حذف کنه .

          برای این حالت ایده ای به ذهنم نمی رسه ، بنظر شما میشه به این هدف دست پیدا کرد ؟!
          ممنونممم

          کامنت

          • rasools13

            • 2017/01/20
            • 360
            • 80.00

            #6
            با سلام
            بله به این هدف میشه دست پیدا کرد
            با اکسل تنها نمیشه چای درست کرد.

            .
            کد me.save در خط آخر متد بسته شدن قرار بدین.
            با اینکار کارهای انجام شده ذخیره شده و دیگر اون پیغام بسته شدن بدون ذخیره رو نشون نمیده و مستقیم برنامه بسته میشه
            .
            کد PHP:
            Private Sub Workbook_BeforeClose(Cancel As Boolean)
                
            On Error Resume Next
                Sheets
            ("Home").Shapes.Range(Array("Picture 1")).Visible msoTrue
                Sheets
            ("Home").Select
                Me
            .Save
            End Sub 
            .
            در ضمن در هر صورت کاربر اگر قصد خرابکاری داشته باشه و بخواد عکس رو پاک کنه.. کار سخت نیست
            ما تنها فایل عکس رو نمایش داده و مخفی میکنیم
            کاربر به راحتی میتونه از قسمت selection panel به صورت دستی دوباره عکس رو نمایش بده.
            .
            به نظرم راه حل بهتر اینه که به جای تصویر یک متن رنگی و بزرگ رو در سلول ها نمایش داده و حذف کنید
            متنی مثلا به این صورت:
            کاربر گرامی جهت استفاده از برنامه لطفا از نوار زرد رنگ ظاهر شده در بالا بر روی enable content کلیک نمایید
            Last edited by rasools13; 2017/04/13, 02:21.
            [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
            [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
            [/CENTER]

            کامنت

            • Skynet

              • 2017/03/02
              • 142

              #7
              سلام مهندس نصف شبی کلی خندیدممم مرسی داداش
              آقا فقط یه نکته :
              اون پیغامه خوبه بیاد ، شاید کاربر تغییراتی رو انجام بده و نخواد ذخیره کنه و خارج بشه ! با این روش هنگام خروج فایل ذخیره میشه!

              بنظرت راهی هست اون پیغام ذخیره یا عدم ذخیره بیاد ولی عکس در آخر نشون داده نشه ؟!
              مرسی از کدها و ترفندهای خوبت ، از هر کدوم در بخش های مختلفی از کارم می تونم استفاده کنم خدا خیرت بده

              کامنت

              • rasools13

                • 2017/01/20
                • 360
                • 80.00

                #8
                نوشته اصلی توسط Skynet
                سلام مهندس نصف شبی کلی خندیدممم مرسی داداش
                آقا فقط یه نکته :
                اون پیغامه خوبه بیاد ، شاید کاربر تغییراتی رو انجام بده و نخواد ذخیره کنه و خارج بشه ! با این روش هنگام خروج فایل ذخیره میشه!

                بنظرت راهی هست اون پیغام ذخیره یا عدم ذخیره بیاد ولی عکس در آخر نشون داده نشه ؟!
                مرسی از کدها و ترفندهای خوبت ، از هر کدوم در بخش های مختلفی از کارم می تونم استفاده کنم خدا خیرت بده
                .
                مهندس نیستم... مدیریت خوندم
                .
                کد ذیل رو جایگزین کنید تا قبل از بسته شدن به کاربر پیغام دهد.
                .
                کد PHP:
                Private Sub Workbook_BeforeClose(Cancel As Boolean)
                    
                On Error Resume Next
                    Dim Ans
                captiontitle As String
                    title 
                "اخطار برنامه"
                    
                caption "تمامي تغييرات صورت گرفته ذخيره شده و برنامه بسته خواهد شد. برنامه بسته شود؟"
                    
                Ans MsgBox(captionvbYesNotitle)
                    If 
                Ans vbYes Then
                        Sheets
                ("Home").Shapes.Range(Array("Picture 1")).Visible msoTrue
                        Sheets
                ("Home").Select
                        Me
                .Save
                    
                Else
                        
                Cancel True
                    End 
                If
                End Sub 
                [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                [/CENTER]

                کامنت

                • Skynet

                  • 2017/03/02
                  • 142

                  #9
                  سلام دوست من
                  رشته مدیریت عالیههه.
                  مرسی از کد جدید، واقعا هر کدوم از کدهایی که میدی یه خلاقیت جدید توش داره و میشه در جاهای مختلف ازش استفاده کرد tnx

                  در این روش هم ، یجورایی میشه یجوری سیستم رو دور زد و به عکس مربوطه دسترسی داشت و اونو ویرایش و یا حذف کرد! طی مراحل مشخص شده در تصویر زیر :

                  Click image for larger version

Name:	ok.jpg
Views:	1
Size:	270.6 کیلو بایت
ID:	132077

                  پیغام آخری که توسط ویندوز نشون داده میشه خوبه ، مشکلی نداره . نیازی نیست در آخر برای خروج پیغام خاصی نشون داده بشه ، فقط زمان خروج عکس نشون داده نشه ! ولی زمان ورود، عکس وجود داشته باشه ! بنظرت میشه اینجوری باشه ؟

                  به بیان صریح تر و کامل تر :
                  موقعی که فایل اجرا میشه : اگر 1 -ماکرو غیر فعال باشه , عکس وجود داشته باشه و نشون داده بشه و با فعال سازی ماکرو عکس پنهان بشه .
                  2- اگر ماکرو فعال باشه عکس بسرعت پنهان بشه و اصلا دیده نشه !

                  موقعی که فایل بسته میشه : هیچ اتفاق خاصی نیافته و پیغام همیشگی خود اکسل ظاهر بشه که میگه : ذخیره بشود ؟ نشود ؟ Cancel ?

                  The End.

                  این که من در اولین مرتبه گفتم موقع خروج، عکس مجددا" نمایش داده بشه بخاطر اینکه فکر کردم برای رسیدن به حالت بالا، نمیشه کاری کرد! ولی الان بهت ایمان دارم و فکر می کنم بتونی برای رسیدن به حالت ایده آل بالا ایده ای داشته باشی

                  کامنت

                  • rasools13

                    • 2017/01/20
                    • 360
                    • 80.00

                    #10
                    تنها راه همونی ک در پست قبلی گذاشتم
                    مخفی کردن عکس یک عمل جدید هست و نیاز به ذخیره شدن دارد واسه همین اکسل پیغام رو در زمان بسته شدن نشون میده
                    ..
                    واسه همین اومدن اتوماتیک ذخیره کردم... گفتی پیغام نشون بده بهتره شاید کاربر نخواد ذخیره کنه
                    اومدم پیغام گذاشتم.. الان میگین پیغام لازم نیست همون پیغام آخر خوبه
                    ..
                    با این کد آخر... ظاهر شدن دوباره عکس اخرین عمل هست و قبل از آن هم یک اخطار نشون داده میشه (میتونید این پیغام رو شبیه پیغام خود اکسل درست کنید که کاربر متوجه نشه)... تو این هیچ مشکلی نمیبینم...
                    در ضمن باز هم میگم از متن بجای عکس استفاده کنید بهتره....
                    [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                    [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                    [/CENTER]

                    کامنت

                    • Skynet

                      • 2017/03/02
                      • 142

                      #11
                      با سلام و احترام ویژه
                      خیلی ممنونم از توضیحاتتون من عذر خواهی می کنم اون قسمت از پیامتون رو در چند پست بالاتر که اشاره کردید اگر کاربر قصد خرابکاری داشته باشه کار سختی نیست و پیشنهاد استفاده از متن به جای تصویر ، رو بدلیل اینکه با موبایل در سر کار و در شرایط نامطلوب خوندم بطور کامل ندیدم !
                      در مورد جمله ای که در مورد "پیغام" گفتم از اول منظورم از پیغام همون پیغام خود آفیس در زمان خروج بود و درخواستی برای نمایش پنجره پیام جداگانه، نداشتم که لطف کردین مطرح کردیدنش.
                      بعد از پست اول تنها دغدقه ام این بود که اگر امکان داشته باشه عکس در انتها نمایش داده نشه که ظاهرا" مورد نمایش عکس در اخرین لحطه رو نمیشه کاریش کرد ، و ایده جدیدتون در مورد نمایش متن بجای تصویر ایده جالبی هست.
                      در نهایت بخاطر همه راهنمایی عالیتون بی نهایت ممنونم دوست عزیز.

                      کامنت

                      چند لحظه..