بررسی وجود داشتن ActiveWindow.Caption خاص در بین فایل های باز شده

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

    • 2011/04/29
    • 384
    • 67.00

    [حل شده] بررسی وجود داشتن ActiveWindow.Caption خاص در بین فایل های باز شده

    با سلام خدمت همه

    من توسط این کد
    کد PHP:
    ActiveWindow.Caption "FileeeeZZZZ" 
    وقتی فایلم باز میشه کپشن فایل رو تغییر میدم.(بنا به نیاز)

    حالا میخوام توسط یه ماکرو چک کنم که اگه این کپشن (FileeeeZZZZ) در بین فایل ها باز اکسل وجود داشت یه msgbox برای کاربر بیاد .
    ممنون میشم کمکم کنید
  • Amir Ghasemiyan

    • 2013/09/20
    • 4598
    • 100.00

    #2
    سلام دوست عزيز
    يك حلقه ميتونه اين كار رو براتون انجام بده

    کد:
    For Each win In Windows
        If win.Caption = "FileeeeZZZZ" Then MsgBox "founded"
    Next win

    کامنت

    • a.dal65

      • 2011/04/29
      • 384
      • 67.00

      #3
      ممنون امیر جان
      میشه چک کنی اشکال من کجاست ؟
      اول file1 رو باز کنید کپشن رو ست کنه بعد فایل دوم که باید Msgbox ظاهر بشه
      فایل های پیوست شده

      کامنت

      • Amir Ghasemiyan

        • 2013/09/20
        • 4598
        • 100.00

        #4
        فايل شما درسته. كدي كه من دادم ناقصه

        اين كد رو استفاده كنيد درست ميشه

        کد:
        Private Sub Workbook_Open()
        For Each win In Application.Windows
            If win.Caption = "aa" Then MsgBox "فايل قبلا باز شده است"
        Next win
        End Sub

        کامنت

        • a.dal65

          • 2011/04/29
          • 384
          • 67.00

          #5
          ممنون امیر جان الان کد شما درست کار میکنه .
          حالا من میخوام به If شما یه AND رو هم اضافه کنم که نمیتونم !.





          وقتی فایل 1 رو باز کنید ، این تغییرات اعمال میشه (تغییر کپشن برنامه و نوشتن یه value در رجیستری ):

          کد:
          Private Sub Workbook_Open()
          ActiveWindow.Caption = "aa"
          SaveSetting appname:="Atadaliran", Section:="Run", Key:="Started", setting:=1
          End Sub
          حالا من در فایل 2 یه دکمه گذاشتم که این شرایط رو باید چک کنه( که درست کار نمیکنه ) :


          من میخوام اگه مقدار Reg در جیستری 1 بود و بین فایل ها کپشن aa وجود داشت به کاربر پیام بده ( aa exist and 1 exist)

          ولی اگه مقدار Regدر رجیستری 1 بود و بین فایل ها کپشن aa وجود نداشت به کاربر پیام بده (aa NOT exist and 1 exist)

          و اگه مقدار Reg در جیستری 0 بود و بین فایل ها کپشن aa وجود نداشت به کاربر پیام بده (aa NOT exist and 0 exist)


          ممنون
          فایل های پیوست شده

          کامنت

          • Amir Ghasemiyan

            • 2013/09/20
            • 4598
            • 100.00

            #6
            علاوه بر اينكه كدهايي كه نوشته بوديد غلط داشت روشي هم كه استفاده كرده بوديد مشكل داشت.
            از اين كد استفاده كنيد

            کد:
            Sub Rectangle1_Click()
            flag = False
            Reg = GetSetting("Atadaliran", "Run", "Started")
            For Each win In Application.Windows
                If win.Caption = "aa" Then flag = True: Exit For
            Next win
            
            
            If flag And Reg = 1 Then
                MsgBox "aa exist and 1 exist"
            ElseIf flag = False And Reg = 1 Then
                MsgBox "aa NOT exist and 1 exist"
            ElseIf flag = False And Reg = 0 Then
                MsgBox "aa NOT exist and 0 exist"
            End If
            End Sub


            کامنت

            • a.dal65

              • 2011/04/29
              • 384
              • 67.00

              #7
              Perfectly Work
              ممنون امیر جان :6:.


              یه سوال دیگه :

              برای چک کردن باز بودن یا باز نبودن یه فایل چه روش های رو میشه انجام داد؟

              غیر از چک کردن نام فایل ( IsFileOpen("c:\Book2.xls") )
              یا
              چک کردن مسیر اون فایل
              یا
              چک کردن windows.captionاون فایل
              یا
              ایجاد یه فایل یا یه key در جیستری

              ؟؟؟؟

              کامنت

              • Amir Ghasemiyan

                • 2013/09/20
                • 4598
                • 100.00

                #8
                خواهش میکنم

                بهترینش همون IsFileOpen هست

                هدفتون چیه؟ میخواید فایل دوبار باز نشه؟

                کامنت

                • a.dal65

                  • 2011/04/29
                  • 384
                  • 67.00

                  #9
                  بله امیر جان هدفم اینه که فایل 2 بار باز نشه .
                  (البته در حالت عادی شما نمیتونید فایل رو 2 باردرکنار هم اجرا کنید. ولی وقتی با Lockxls کامپایل میشه شما هر چند بار که بخواهید میتونید فایل رو جدا جدا باز کنید)

                  الان ماکروی که شما زحمتشو کشیدید در حالت عادی(بدون exe کردن) درست کار میکنه .

                  ولی وقتی فایل رو با lockxls کامپایل میکنم دیگه ماکرو درست کار نمیکنه (مشکل از ماکرو نیست و قبلاهم با lockxls به این جور مشکلات خوردم).


                  راحتترین راه برای اینکه بعد exe شدن فایل 2 بار باز نشه، نوشتن یه مقدار در رجیستری هست.

                  در workbookopen مقدار از رجیستری چک میشد اگه 0 بود یعنی فایل باز نشده و فایل اجازه اجرا داشت و مقداررو هم 1 میکرد .
                  اگه مقدار 1 بود یعنی فایل باز هست و اجازه اجرا مجدد فایل رو نمیداد .
                  و قبل از بستن فایل هم مقدار رو 0 میکردم که سری بعد کاربر بتونه فایل رو اجرا کنه.

                  پروسه بالا فقط 1 اشکال اساسی داره .
                  و اونم اینه که وقتی excel هنگ کنه یا به هر نحوی فایل غیر عادی بسته بشه (فرض کنید مثلا برق محل قطع بشه)اون مقدار توی رجیستری 1 هستش و بعد اینکه سیستم روشن بشه فایل باز نمیشه چون مقدار توی رجیستری 1 هست وانگار برنامه بازه (در صورتیکه برنامه باز نیست)

                  برای اینکه این مشکل هم حل بشه اومدم از windows.caption استفاده کردم. که بین فایل ها چک کنه اگه کپشن وجود نداشت ولی مقدار 1 بود اجازه اجرا به کاربر رو بده
                  ولی دیدم بعد exe شدن کار نمیکنه(فایل ضمیمه شده)


                  من تا حالا هر چی ماکرو تست کردم کد هاشو رو تو openworkbook میزارم تا چک کنه
                  مثلا اگه همین IsFileOpen رو توی openworkbook بزارم دیگه فایل اجرا نمیشه جون خودش خودش رو چک میکنه و میبینه فایل باز شده و اجازه اجرا نمیده.


                  Last edited by a.dal65; 2018/10/26, 11:33. دلیل: آپلود نشدن فایل ضمیمه

                  کامنت

                  • Amir Ghasemiyan

                    • 2013/09/20
                    • 4598
                    • 100.00

                    #10
                    متوجه شدم
                    یه پیشنهاد. برای حالتی که ریجستری عدد ۱ داره اما فایل باز نیست یه شرط بذارید که بگه اگه تعداد ورک بوک ها یکی بود اون شرط رو نادیده بگیره و فایل رو باز کنه

                    کامنت

                    • a.dal65

                      • 2011/04/29
                      • 384
                      • 67.00

                      #11
                      امیر جان منظورتو از تعداد ورک بوک ها متوجه نشدم :106:



                      حالا علاوه بر راهنمای شما ، من برای فایلم یه محدودیت گذاشتم که اولا فقط location فایل دسکتاپ بود اجرا بشه . ثانیا اگه فایل تغییر نام پیدا کنه دیگه اجرا نمیشه .

                      از این دوتا محدودیت نمیتونم استفاده کنم ؟

                      کامنت

                      • Amir Ghasemiyan

                        • 2013/09/20
                        • 4598
                        • 100.00

                        #12
                        نوشته اصلی توسط a.dal65
                        امیر جان منظورتو از تعداد ورک بوک ها متوجه نشدم :106:



                        حالا علاوه بر راهنمای شما ، من برای فایلم یه محدودیت گذاشتم که اولا فقط location فایل دسکتاپ بود اجرا بشه . ثانیا اگه فایل تغییر نام پیدا کنه دیگه اجرا نمیشه .

                        از این دوتا محدودیت نمیتونم استفاده کنم ؟

                        منظورم اینه
                        کد:
                        Application.Workbooks.Count
                        اگر یک زمانی این مشکل پیش اومد که کد ریجستری ۱ باقی موند و نرم افزارتون اجرا نشد بتونید با بستن همه فایل های اکسل و بعد اجرا کردن همین یک فایل به کد بفهمونید که کد ریجستری داره اشتباها عدد ۱ رو نشون میده و فایلی باز نیست پس درنتیجه ۱ بودن ریجستری رو در نظر نمیگیره

                        شرط desktop به نظر مناسب نیست. شرط دومی که گفتید رو نمیدونم به چه کاری میاد؟ دو تا فایل با یک کپشن که قابل اجراست

                        کامنت

                        چند لحظه..