ایجاد فرم های سفارشی توسط VBA

Collapse
X
 
  • زمان
  • نمایش
Clear All
new posts
  • m_d6712

    • 2010/05/22
    • 174

    ایجاد فرم های سفارشی توسط VBA

    [align=center]لینک کمکی اضافه شد[/align]

    با سلام دوستی سوال فرمودند که چطور می شود فرم های سفارشی در VBA ساخت. به این مفهوم که بشود بر اساس نیاز مشتری Control هایی (button, textbox, label) بسازیم.

    نوشته اصلی توسط دوستی
    سلام آقای داوری.
    چطور میشه از طریق کد در Form،یک کنترل(مثل:label,textbox,...)به فرم اضافه کرد.
    این فایل رو من خیلی ساده جهت آموزش در مدت کوتاه درست کردم. لذا ممکن است ایراداتی داشته باشد.

    http://www.mediafire.com/file/28v0tpepm2v8bhv/CustomizeControls_with_VBA.xlsm

    لینک کمکی:
    http://uplod.ir/gax3gakjje3h/CustomizeControls_with_VBA.zip.htm

    در فایل بالا دو label ایجاد شده است. یک textbox و دو button

    برای ایجاد label ها از کد های زیر استفاده کردم:

    Dim label As MSForms.label
    Set label = Me.Controls.Add("Forms.Label.1", "myLabe", True)
    With label
    .Caption = "write some text here:"
    .Width = 60
    .Height = 25
    .Top = 110
    .Left = 10
    .ZOrder (0)
    End With

    Dim label2 As MSForms.label
    Set label2 = Me.Controls.Add("Forms.Label.1", "myLabel2", True)
    With label2
    .Caption = "then click these two buttons"
    .Width = 200
    .Height = 20
    .Top = 140
    .Left = 10
    .ZOrder (0)
    End With



    برای تولید textbox از کد زیر:

    Dim mytextbox As Control
    Set mytextbox = Me.Controls.Add("Forms.TextBox.1", "MyTextBox1", True)
    With mytextbox
    .Width = 150
    .Height = 25
    .Top = 110
    .Left = 70
    .ZOrder (0)
    End With


    دو نوع button درست کردم: اولی withoutevent
    Dim mybutton As Control
    Set mybutton = Me.Controls.Add("Forms.CommandButton.1", "MyButton1", True)

    With mybutton
    .Caption = "without events"
    .Width = 200
    .Height = 25
    .Top = 160
    .Left = 10
    .ZOrder (0)
    End With

    اگر همین طور ساده button و یا هر control دیگری رو ایجاد کنید. این کنترل event نخواهد داشت. به این مفهوم که شما قادر خواهید بود از امکانات اون استفاده کنید اما event نخواهد داشت. یعنی تابعی به نام button_click() وجود نخواهد داشت. در واقع وقتی کنترلی به این روش درست می کنید باید event اون رو هم دستی ایجاد کنید.

    دو راه برای رفع این مشکل وجود دارد.
    راه سخت تر:
    برای ایجاد event به صورتی دستی (manual) باید از یک event در control مادر (که userform هست) استفاده کنید. مثلا می خواهید رویداد click بسازید. می توانید از رویداد click یوزر فرم استفاده کنید. فقط باید شرطی بگذارید که مکان موس رو ارزیابی کنه در لحظه کلیک و اگر مکان موس روی مقتصات button بود دستورات مورد نظر رو اجرا کنه. در صورت تمایل بیشتر توضیح می دهم.


    راه ساده تر
    البته راه آسون تر استفاده از control های withevent هست. البته این روش محدودیت هایی رو ایجاد می کنه. اما برای استفاده در ابتدای راه خیلی مفید می باشد:

    ابتدا یک شی اما private خارج از هر گونه تابعی در یوزر فرم ایجاد می کنید با این دستور:
    Private WithEvents mybut As MSForms.CommandButton

    سپس در تابعی که control ها رو میسازید این کد را اضافه می کنید.
    Set mybut = Me.Controls.Add("Forms.CommandButton.1", "mybut", True)

    With mybut
    .Caption = "with events"
    .Width = 200
    .Height = 25
    .Top = 190
    .Left = 10
    .ZOrder (0)
    End With


    به این صورت می توانید event click این button رو فرآخوانی کنید:

    Private Sub mybut_Click()
    MsgBox ("you wrote '" + Me.Controls("MyTextBox1") + "' in the textbox above.")
    End Sub

    توجه فرمایید که Me.Controls("MyTextBox1") مقدار داخل textboxی که از طریق VBA ایجاد کرده اید رو برای شما بر میگرداند.

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



    همچینی می توانید button در شیت و سلول ایجادنمایید.
    البته روش اون کار فرق می کند.

    موفق و پیروز باشد.
    -------
    http://md6712.com
    جامعه ایده پردازان: http://idekadeh.com
  • Javid Mokhtari
    مدير تالار ويژوال بيسيك

    • 2012/01/16
    • 1213

    #2
    RE: ایجاد فرم های سفارشی توسط VBA

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

    شرکت در دوره:

    https://javidsoft.ir/courses/


    کامنت

    Working...