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

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 IntegerByVal 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 IntegerByVal SecoundArgo As Integer) As Boolean
                  TestMacro 
                  True
                  End 
                  Function

                  Function 
                  TestMacroX(ByVal FirstArgo As IntegerByVal 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
                  :=FuncDescArgumentDescriptions:=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
                  :=FuncDescArgumentDescriptions:=ArgDesc
                  End Sub 
                  در WorkBook:
                  کد PHP:
                  Private Sub Workbook_Open()
                  Call UDF_Discriptions.UDFDiscriptions
                  End Sub 

                  کامنت

                  چند لحظه..