PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ایجاد نمودار ها و چارت ها در VBA



m_d6712
2010/06/11, 21:30
یکی از بهترین روش ها برای ایجاد چارت در VBA به صورت زیر می باشد.




Dim mychart As Chart
Set mychart = ActiveWorkbook.Charts("نام چارت مورد نظر")

mychart.ChartType = xlXYScatterLinesNoMarkers
mychart.SetSourceData Source:=Worksheets("نام شیت داده ها").Range("A:A,C:C"), PlotBy:=xlColumns
mychart.Axes(xlValue, xlPrimary).MinimumScale = 0
mychart.Axes(xlCategory, xlPrimary).HasTitle = True
mychart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "نام محور افقی"


خط اول یک شی از نوع چارت ایجاد کرد.
خط دوم مقدار شی رو برابر با یک چارت که در صفحه اکسل موجود است کرد.
خط سوم نوع چارت رو مشخص می کنه
خط چهارم حدود داده ها رو برای رسم چارت مشخص می کنه
خط پنجم کمترین مقادیر برای چارت
خط ششم مشخص می کنه که محور x دارای عنوان است
و خط آخر هم Title رو مشخص می کنه


البته امکانات دیگر رو هم می توان بهش اضافه کرد.

مثلا برای ایحاد جدول جدید از می توان به جای خط دوم کد قبلی این خط رو نوشت:


Set mychart = ActiveWorkbook.Charts.Add

esyoo
2010/08/05, 19:46
میشه یک فایل نمونه قرار بدید؟
با تشکر

m_d6712
2010/08/07, 17:04
در فایل الگوریتم SA وجود داره یک نمونه! چک کنید.
http://forum.exceliran.com/showthread.php?tid=201

behrangbinesh
2010/08/10, 11:39
سلام
یک سوال داشتم در همین زمینه
ما چارتی داریم که هر دفعه جدولش تغییر میکنه
میشه کاری کرد که اطلاعات مربوط به جدول رو از یک یا چند سلول بخونه و نمایش بده؟

m_d6712
2010/08/11, 18:11
سلام
یک سوال داشتم در همین زمینه
ما چارتی داریم که هر دفعه جدولش تغییر میکنه
میشه کاری کرد که اطلاعات مربوط به جدول رو از یک یا چند سلول بخونه و نمایش بده؟


سلام
بله! این کار امکان پذیر است!
میشه توضیحات بیشتری بدهید.

در همون فایلی Simulated Anealing داره! (SA) این طور هست که با هر بار RUn اطلاعات جداول عوض می شود و بر اساس اطلاعات این جداول دوباره چارت کشیده می شود.
شما باید هر بار که اطلاعات جداول عوض می شود چارت را دوباره رسم کنید. یعنی همه کد های بالا را run کنید.

esyoo
2010/08/12, 19:45
پیرو پست های 4و5و6و7 در این تاپیک (http://forum.exceliran.com/showthread.php?tid=239&page=1)

آیا می توان نمودار را روی یوزر فورم نمایش داد؟

با درود فراوان
بله همانطور که یک تکس باکس و یا یک لیبل رو رو یوزفرم قرار می دهی یک چارت هم میتوان به فرم اضافه کرد
اگر روی تولز باکس چارت نداری با راست کلیک روی یکی از آبجکت ها به منوی additional controls رفته و آن را تیک بزنید



با کلیک بر روی additional controls مراحل زیر را باید طی کنید.

[][تصویر: tjahmbebdw18a570lykj_thumb.jpg][/]


مرحله دوم

[i][تصویر: hok3mj9fdn7zeaffb7xj_thumb.jpg][/]

یادت باشه جایی که با فلاش قرمز مشخص کردم نباید تیک خورده باشه تا آبجکهای تیک نخورده رو بتونی ببینی

گفتم ادامه بحث رو بیارم اینجا تا در تاپیک خودش قرار بگیره
من این گزینه ها رو فعال کردم(نصب دوباره ویندوز و اکسل!)
ولی به جای ارتباط با شیت های خود اکسل از شیت های که خودش در اختیار ما قرار میده استفاده می کند!
در واقع من میخوام اطلاعات رو از شیت 1 بگیره و نمودار رو روی یک userformنمایش بده
با تشکر

behrangbinesh
2010/08/14, 10:08
سلام
با تشکر از شما دوست عزیز
منظورم رو شاید بد گفته باشم
مثلا اطلاعات ما همیشه تو a3:c3 نباشه
یک بار تو a3:c3 باشه یک بار توی a5:c5 هستش
اولی تو شیت 1 و دومی تو شیت 2
من میخوام مثلا سه تا فروشنده دارم
که اطلاعاتشون تو سه تا شیت مختلفه
حالا میخوام که تو یه شیت اطلاعاتی، با انتخاب اسم افراد، نمودارشون رو نمایش بدیم
امکانش هست یا نیست؟
با تشکر از شما

mrexcel
2010/08/14, 14:42
اين كار با تركيب vlookup انجام ميشه چون اين چيزي كه شما ميگيد فراخواني اطلاعاتي بر اساس يك ايتم ميباشد كه اختصاص كار توابع lookup هست

m_d6712
2010/08/14, 21:31
پیرو پست های 4و5و6و7 در این تاپیک (http://forum.exceliran.com/showthread.php?tid=239&page=1)

آیا می توان نمودار را روی یوزر فورم نمایش داد؟

با درود فراوان
بله همانطور که یک تکس باکس و یا یک لیبل رو رو یوزفرم قرار می دهی یک چارت هم میتوان به فرم اضافه کرد
اگر روی تولز باکس چارت نداری با راست کلیک روی یکی از آبجکت ها به منوی additional controls رفته و آن را تیک بزنید



با کلیک بر روی additional controls مراحل زیر را باید طی کنید.

[][تصویر: tjahmbebdw18a570lykj_thumb.jpg][/]


مرحله دوم

[i][تصویر: hok3mj9fdn7zeaffb7xj_thumb.jpg][/]

یادت باشه جایی که با فلاش قرمز مشخص کردم نباید تیک خورده باشه تا آبجکهای تیک نخورده رو بتونی ببینی

گفتم ادامه بحث رو بیارم اینجا تا در تاپیک خودش قرار بگیره
من این گزینه ها رو فعال کردم(نصب دوباره ویندوز و اکسل!)
ولی به جای ارتباط با شیت های خود اکسل از شیت های که خودش در اختیار ما قرار میده استفاده می کند!
در واقع من میخوام اطلاعات رو از شیت 1 بگیره و نمودار رو روی یک userformنمایش بده
با تشکر





همان طورکه دوست عزیز توضیح دادند یک Chartspase ایجاد کنید. (از گزینه Additional Controls آن را به لیست ابزار خود اضافه کنید و با کشیدن بر روی صفحه ایجاد کنید)

پس از این که این ChartSpace را ایجاد کردید هیج Sheet یا اطلاعاتی برایش در نظر نگیرید و مستقیما به صفحه Code بروید.
اگر اسم این شی را تغییر نداده باشید احتمالا ChartSpace1 خواهد بود. کد هایی که در زیر می نویسم بر اساس این اسم است. در صورتی که اسم آن را تغییر دادید در کد زیر نام انتخابی خود را با ChartSpace1 تعویض کنید.

کد زیر اطلاعات ستون های A و B از Sheet1 فایل اکسل شما را به صورت چارت ScatterXYLine نمایش می دهد.



Private Sub UserForm_Activate()
Dim mychart As OWC11.ChChart
Dim mysheet As OWC11.Spreadsheet
Dim ws As Worksheet

Set mychart = ChartSpace1.Charts.Add
Set mysheet = New OWC11.Spreadsheet
Set ws = ActiveWorkbook.Sheets("Sheet1")

mysheet.Range("A:B") = ws.Range("A:B").Value
ChartSpace1.DataSource = mysheet

With mychart
.Type = chChartTypeScatterLine
.SetData chDimXValues, 0, "A:A"
.SetData chDimYValues, 0, "B:B"
.HasTitle = True
.Title.Caption = "test title by ...."
.BarWidth = 3
End With

End Sub





فایل زیر هم برای درک بهتر:
http://www.mediafire.com/file/5gkjnmnbl6fo84l/11.xlsm[hr][hr]

-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------

هر چه سعی کردم که این دو پاسخ با هم نیاد نشد!
از این به بعد پاسخ برای سوال دیگری است!

-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------




سلام
با تشکر از شما دوست عزیز
منظورم رو شاید بد گفته باشم
مثلا اطلاعات ما همیشه تو a3:c3 نباشه
یک بار تو a3:c3 باشه یک بار توی a5:c5 هستش
اولی تو شیت 1 و دومی تو شیت 2
من میخوام مثلا سه تا فروشنده دارم
که اطلاعاتشون تو سه تا شیت مختلفه
حالا میخوام که تو یه شیت اطلاعاتی، با انتخاب اسم افراد، نمودارشون رو نمایش بدیم
امکانش هست یا نیست؟
با تشکر از شما


بله امکانش هست!
به این صورت عمل کنید:
ابتدا سه شیت اول دوم و سوم را ایجاد کرده
در شیت چهارم یک چارت ایجاد کنید ولی هیچ مقدار دهی برایش انجام ندهید.
کد زیر در شیت چهارم فعال کنید.



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (Selection.Cells(1) = Sheet4.Range("D3").Cells(1) Or Selection.Cells(1) = Sheet4.Range("H3").Cells(1) Or Selection.Cells(1) = Sheet4.Range("L3").Cells(1)) Then
Dim mychart As ChartObject
Dim sourcesheet As Worksheet

If (Selection.Cells(1) = Sheet4.Range("D3").Cells(1)) Then
Set sourcesheet = Sheet1
ElseIf (Selection.Cells(1) = Sheet4.Range("H3").Cells(1)) Then
Set sourcesheet = Sheet2
ElseIf (Selection.Cells(1) = Sheet4.Range("L3").Cells(1)) Then
Set sourcesheet = Sheet3
End If

Set mychart = Sheet4.ChartObjects(1)

With mychart.Chart
.ChartType = xlXYScatterLinesNoMarkers
.SetSourceData Source:=sourcesheet.Range("A:A,B:B"), PlotBy:=xlColumns
.Axes(xlValue, xlPrimary).MinimumScale = 0
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Target.Text
End With
End If
End Sub



فایل آن هم را از این لینک دریافت کنید:
http://www.mediafire.com/file/y5954db0xel26oo/ChartForResellers.xlsm

esyoo
2010/08/22, 23:54
سلام
با تشکر از مطالب مفیدتون.واقعا عالی بود.

شما نموداری که گذاشتید به این شکل در می یاد.
http://aks98.com/images/vuevhaletruo0glkx14_thumb.jpg (http://aks98.com/viewer.php?file=vuevhaletruo0glkx14.jpg)

ولی من می خوام که این شکلی بشه.
http://aks98.com/images/a5iu55uihf2j4zl13wj_thumb.jpg (http://aks98.com/viewer.php?file=a5iu55uihf2j4zl13wj.jpg)


فایل نمونه رو ببینید
http://www.4shared.com/file/hoZN3LRy/chart.html



با تشکر



من خیلی تلاش کردم تا نوع نمودار رو تغییر بدم
اما نشد

esyoo
2010/08/23, 17:30
أوستان چکار کنم این پیغام نیاد؟
همه روenable کردم ولی باز هم پیغام میده.
http://aks98.com/images/acm2qibqx0oohegbqfb.jpg

m_d6712
2010/08/23, 18:09
با سلام:



Private Sub UserForm_Activate()
Dim mychart As OWC11.ChChart
Dim mysheet As OWC11.Spreadsheet
Dim ws As Worksheet

Set mychart = ChartSpace1.Charts.Add
Set mysheet = New OWC11.Spreadsheet
Set ws = ActiveWorkbook.Sheets("Sheet1")

mysheet.Range("A2:B9") = ws.Range("A2:B9").Value
ChartSpace1.DataSource = mysheet

With mychart
.Type = chChartTypeColumnClustered

.SetData chDimCategories, 0, "A2:A9"
.SetData chDimValues, 0, "B2:B9"
.HasTitle = True
.Title.Caption = "ãÕÑÝ"
End With
End Sub