توضیح روی توابعی که خودمان درست کرده*ایم

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • eppagh

    • 2012/07/04
    • 42

    توضیح روی توابعی که خودمان درست کرده*ایم

    سلام.
    تعدادی فرمول درست کرده*ام و می*خواهم مانند فرمول*های خود اکسل شرح روی خودش و آرگومان*هایش داشته باشد.
    جستجو کردم و Application.MacroOptions Method (Excel) را پیدا کردم ولی نفهمیدم چطور کار می*کند و هیچکدام از نمونه*ها هم کار نکرد.
    راه انجامش چیست؟
  • rasools13

    • 2017/01/20
    • 360
    • 80.00

    #2
    سلام با استفاده از کد ذیا میتونید این کار رو انجام بدید

    برای هر تابع کافیه فقط یک بار اطلاعات آن را وارد کرد و کد (ماکرو) را اجرا کنید
    کد PHP:
    Sub DescribeFunction()
       
    Dim FuncName As String
       Dim FuncDesc 
    As String
       Dim Category 
    As String
       Dim ArgDesc
    (1 To 4) As String 'تعداد آرگومان ها

       FuncName = "نام تابع"
       FuncDesc = "توضيح کلي تابع"
       Category = 7 '
    Text category
       ArgDesc
    (1) = "توضيح مربوط به آرگومان اول"
       
    ArgDesc(2) = "توضيح مربوط به آرگومان دوم"
       
    ArgDesc(3) = "توضيح مربوط به آرگومان سوم"
       
    ArgDesc(4) = "توضيح مربوط به آرگومان چهارم"

       
    Application.MacroOptions _
          Macro
    :=FuncName, _
          Description
    :=FuncDesc, _
          Category
    :=Category, _
          ArgumentDescriptions
    :=ArgDesc
    End Sub 
    [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
    [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
    [/CENTER]

    کامنت

    • eppagh

      • 2012/07/04
      • 42

      #3
      در این نمونه چطور کار نمی*کنه؟
      آیا میان نام فانکشن و نام ساب*روتین ارتباطی باید باشه؟

      کد PHP:
      Public Function myFunction(ByVal a As Integer, ByVal b As Integer) As Boolean
      myFunction 
      = True
      End 
      Function

      Sub DescribeFunction()
         
      Dim FuncName As String
         Dim FuncDesc 
      As String
         Dim Category 
      As String
         Dim ArgDesc
      (1 To 2) As String 'تعداد آرگومان ها

         FuncName = "myFunction"
         FuncDesc = "توضيح کلي تابع"
         Category = 7 '
      Text category
         ArgDesc
      (1) = "توضيح مربوط به آرگومان اول"
         
      ArgDesc(2) = "توضيح مربوط به آرگومان دوم"

         
      Application.MacroOptions _
            Macro
      :=FuncName, _
            Description
      :=FuncDesc, _
            Category
      :=Category, _
            ArgumentDescriptions
      :=ArgDesc
      End Sub 

      کامنت

      • eppagh

        • 2012/07/04
        • 42

        #4
        Click image for larger version

Name:	3.jpg
Views:	1
Size:	55.4 کیلو بایت
ID:	131771Click image for larger version

Name:	1.jpg
Views:	1
Size:	24.1 کیلو بایت
ID:	131769Click image for larger version

Name:	2.jpg
Views:	1
Size:	16.3 کیلو بایت
ID:	131770

        کامنت

        • rasools13

          • 2017/01/20
          • 360
          • 80.00

          #5
          نوشته اصلی توسط eppagh
          [ATTACH=CONFIG]14221[/ATTACH][ATTACH=CONFIG]14219[/ATTACH][ATTACH=CONFIG]14220[/ATTACH]
          نمیخواد در تابع ماکرو رو فراخوانی کنید
          داخل ماکرو کلیک کنید و دکمه f8 رو چند بار بزنید تا ماکرو اجرا شه یا دکمه f5 رو بزنید
          همانند یک ماکروی عادی باهاش رفتار کنید و دستی اجراش کنید
          برای هرتابع باید یک بار دستی این ماکرو رو اجرا کنید
          [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
          [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
          [/CENTER]

          کامنت

          • eppagh

            • 2012/07/04
            • 42

            #6
            وقتی که ماکرو رو دستی اجرا می*کنم فانکشن از لیست فانکشن*های کاربر ناپدید میشه. همینطور که ور می*رفتم یک بار آمد ولی دوباره ناپدید شد.
            دیگه اینکه با اینکه برای آرگومان Description در Application.MacroOptions همه*چیز درست به*نظر میاد ولی روی پنجره چیزی نشون نمی*ده. وقتی اجرا شد فقط شرح آرگومان*ها رو نشون می*داد.
            این چرا اینقدر بدقلقه؟!

            کامنت

            • rasools13

              • 2017/01/20
              • 360
              • 80.00

              #7
              نوشته اصلی توسط eppagh
              وقتی که ماکرو رو دستی اجرا می*کنم فانکشن از لیست فانکشن*های کاربر ناپدید میشه. همینطور که ور می*رفتم یک بار آمد ولی دوباره ناپدید شد.
              دیگه اینکه با اینکه برای آرگومان Description در Application.MacroOptions همه*چیز درست به*نظر میاد ولی روی پنجره چیزی نشون نمی*ده. وقتی اجرا شد فقط شرح آرگومان*ها رو نشون می*داد.
              این چرا اینقدر بدقلقه؟!
              این کار رو انجام بدین
              یک فایل جدید اکسل باز کنید و تابع و اون ماکرو رو در این فایل قرار بدین بعد فایل رو با فرمت add in یعنی (xlam.*) ذخیره کنید حالا یک فایل جدید اکسل رو باز کرده و از قسمت option بعد Add in فایل add inی که ساختین رو به اضافه کنید... از این به بعد این تابع در تمامی فایل های اکسل قابل استفاده هست و هر وقت پنجره vba رو باز کنید در ستون سمت چب فایل add in قرار داشته و میتوانید توابع جدید رو بهش اضافه کنید.
              یک نمونه از توابع تعریف شده
              Click image for larger version

Name:	function.png
Views:	1
Size:	111.5 کیلو بایت
ID:	131775
              [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
              [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
              [/CENTER]

              کامنت

              • eppagh

                • 2012/07/04
                • 42

                #8
                از حوصله*ی شما متشکرم.
                ولی چون منظورم این بود که فایل رو رد کنم به کس دیگه و مطمئن باشم که همه*جا درست کار خواهد کرد این کار رو کردم:
                یه Module درست کردم و ماکروی شرح فانکشن*ها رو گذاشتم توی اون. بعد توی همون یه مدول دیگه درست کردم که همه رو اجرا کنه.
                در فایل در ایونت *Open گذاشتم که ماکروی اجرای شرح همه*ی فانکشن*ها رو اجرا کنه.
                اینطوری دیگه گمونم هیچوقت مشکلی پیش نیاد.
                باز هم از پاسخ*های شما متشکرم.

                کامنت

                • eppagh

                  • 2012/07/04
                  • 42

                  #9
                  در مدول فانکشن*ها:
                  کد PHP:
                  Function TestMacro(ByVal FirstArgo As Integer, ByVal SecoundArgo As Integer) As Boolean
                  TestMacro 
                  = True
                  End 
                  Function

                  Function 
                  TestMacroX(ByVal FirstArgo As Integer, ByVal SecoundArgo As Integer) As Boolean
                  TestMacroX 
                  = False
                  End 
                  Function 
                  در مدول شرح فانکشن*ها:
                  کد PHP:
                  Sub UDFDiscriptions()
                  Call UDFTestMacro
                  Call UDFTestMacroX
                  End Sub

                  Sub UDFTestMacro
                  ()
                   
                  Dim ArgDesc(1 To 2) As String        
                  FuncDesc 
                  = "TestMacro" 
                  ArgDesc(1) = "عدد صحيح اول:"        
                  ArgDesc(2) = "عدد صحيح دوم:"   
                   
                  Application.MacroOptions Macro:="TestMacro", Category:="My Custom Category", _
                   Description
                  :=FuncDesc, ArgumentDescriptions:=ArgDesc
                  End Sub

                  Sub UDFTestMacroX
                  ()
                   
                  Dim ArgDesc(1 To 2) As String        
                  FuncDesc 
                  = "TestMacro" 
                  ArgDesc(1) = "عدد صحيح اول:"        
                  ArgDesc(2) = "عدد صحيح دوم:"   
                   
                  Application.MacroOptions Macro:="TestMacroX", Category:="My Custom Category", _
                   Description
                  :=FuncDesc, ArgumentDescriptions:=ArgDesc
                  End Sub 
                  در WorkBook:
                  کد PHP:
                  Private Sub Workbook_Open()
                  Call UDF_Discriptions.UDFDiscriptions
                  End Sub 

                  کامنت

                  چند لحظه..