:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

VBA: Scatter lines on Userform

Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: VBA: Scatter lines on Userform

Re: VBA: Scatter lines on Userform

#18

by PLM » Tue May 18, 2021 11:14 pm

สวัสดีครับ อาจารย์
ขอบคุณ อาจารย์ ครับ ผมขอยอมรับนะครับว่า เพิ่งจะลองหัดใช้ vba ผมพยายาม ศึกษา ด้วยตนเอง มาเป็นเวลา 1 เดือนแล้วครับ เพราะผมคิดว่า ผมต้องนำมันมาใช้งาน code บางตัว ผมก็ เข้าใจ บางตัวผมก็ไม่เข้าใจ ครับ แต่ผมก็พยายาม
ส่วน งานชิ้นนี้เอง ผมก็พยายาม จะทำให้สำเร็จนะครับ เพราะผมคิดว่ามันสามารถจะต่อยอดงานของผมต่อไปได้

หลังจากนี้ไป ผมจะไปปรับแก้ และ สอบถามอาจารย์ ต่อไปเรื่อยๆนะครับ

ขอบคุณครับ

Re: VBA: Scatter lines on Userform

#17

by snasui » Tue May 18, 2021 5:50 pm

:D ตัวอย่างการ Loop ที่ผมให้ไปนั้นจำเป็นต้องทำความเข้าใจและปรับให้เข้ากับงานเสียก่อน ที่ยกมานั้นผมถือว่ายังไม่เข้าใจ Code นั้นแต่อย่างใด ดังเช่นบรรทัดนี้ Cells(i + 1, 1) = LB1.Text ทราบหรือไม่ว่าให้ผลลัพธ์เป็นอย่างไร จำเป็นต้องมีหรือไม่ :?:

งานนี้เหมาะกับผู้ที่มีความรู้ในเรื่อง VBA มาพอสมควร ถ้ายังไม่มีความรู้ต้องไปศึกษามาก่อน หรือให้ผู้ที่มีความรู้มาถามแทนครับ

ลักษณะงานเป็นการนำค่าจากหลายชีต ซึ่งอยู่ในหลายไฟล์มาใช้ จะต้องออกแบบการทำงานเสียก่อนว่าจะนำข้อมูลเหล่านั้นเข้ามาอย่างไร สิ่งที่ออกแบบมาแล้วยังไม่รองรับการทำงานนี้ เพราะปัจจุบันเป็นการนำเข้ามาทีละไฟล์แล้วนำชีตของไฟล์นั้นมาสร้างกราฟ สิ่งที่ต้องทำคือ นำเข้ามาพร้อมกันทุกไฟล์ หรือถ้าไม่เข้ามาพร้อมกันทุกไฟล์ก็ต้องออกแบบว่าจะนำแต่ละชีตของแต่ละไฟล์เข้ามาใช้ใน ListBox อย่างไร และในแต่ละ Item ของ ListBox โปรแกรมจะทราบได้อย่างไรว่าเป็นของไฟล์ไหน :?: การที่มีแต่ชื่อชีตไม่ได้หมายถึงว่าจะสามารถอ้างอิงไปถึงต้นทางของชีตนั้น ๆ ได้แต่อย่างใด ยกเว้นว่ามีการเก็บชื่อไฟล์ในที่ใด ๆ เอาไว้ด้วย

หากไม่ต้องจดจำไฟล์ก็ต้องนำข้อมูลมาพักไว้ที่ตัวแปรใด ๆ ไฟล์ใด ๆ ชีตใด ๆ เสียก่อน เป็นต้น ซึ่งเมื่อเลือก Item ใด ๆ ใน ListBox แล้วจะต้องทราบว่าข้อมูลนั้นอยู่ตำแหน่งใด แต่ไม่ว่าจะเลือกทางไหนก็ต้องออกแบบและเขียนสิ่งเหล่านั้นมาเองก่อนเสมอครับ

อีกประการที่สำคัญ ตอนนี้โปรแกรมจะสร้างชีตใหม่อยู่ทุกครั้งที่มีการสร้างกราฟจากนั้นทำการซ่อนชีตไว้ ปกติจะไม่ออกแบบให้ทำงานลักษณะนี้ ควรออกแบบให้ทำงานบนชีตใด ๆ เพียงชีตเดียว หรือถ้ามีการเพิ่มชีตมาช่วยทำงาน เมื่อใช้เสร็จก็ควรลบทิ้งไปครับ

Re: VBA: Scatter lines on Userform

#16

by PLM » Tue May 18, 2021 8:44 am

สวัสดีครับ อาจารย์
ขอโทษครับ ที่แก้ไข ไม่ครบตามที่อาจารย์แนะนำ ตอนนี้ ผมแก้ code เปลี่ยนชื่อ จาก เดิมแล้วครับ ดังนั้น จะมีความแตกต่างกันแล้วครับ

ผมขอ รายงาน ผลการแก้ไข นะครับ คือ หลังจากแก้ไขแล้ว ทุกอย่างปกติครับ ผม สามารถ add ชื่อ เข้าไปใน listbox ได้ และสามารถที่จะ สร้าง chart ได้ ตามที่ผมเลือก ความหมายคือ ผมเลือก file ตัวที่ 1 ผมก็จะได้ chart ของ file ตัวนั้นแล้ว

ตอนนี้ปัญหาของผมคือ ถ้า ผมต้องการ ให้ chart ของผม แสดง ทั้งหมด ที่ผมเลือก ผมควรทำแย่างไงครับ วัตถุประสงค์ของผม คือ เพื่อ เปรียบเทียบ ความเปลี่ยนแปลงของ ข้อมูลครับ

ิสิ่งที่ผม ลองแก้ไขมา คือ การใส่ loop ลง ไป ผลคือ ติด ตั้งแต่ code Ln14,col5 เลยครับ ดังที่แนบ มาครับ
ทั้งนี้ ผม เขียน ใน module นะครับ รบกวน อาจารย์ ช่วย แนะนำ ด้วยครับ ผมส่ง เฉพาะ code ที่มีปัญหามานะครับ

Code: Select all

Sub mychart()
    Dim ochart As Chart
    Dim sourceBook As Workbook
    Dim fname As String
    Dim sh As Worksheet
    Dim i As Integer
    
    'For loop
        For i = 1 To LB1.ListCount - 1
        LB1.ListIndex = i
        Cells(i + 1, 1) = LB1.Text
    Next i
Attachments
X1.xlsm
VBA
(227.06 KiB) Downloaded 6 times
2021_01_Jan.xls
ตัวอย่าง rawdata1
(64 KiB) Downloaded 5 times
2021_02_Feb.xls
ตัวอย่าง rawdata2
(75.5 KiB) Downloaded 4 times

Re: VBA: Scatter lines on Userform

#15

by logic » Mon May 17, 2021 11:13 am

ผมยังเห็นโค้ดยังเป็น sub mychart() กับ dim mychart as chart เหมือนเดิม อาจารย์แจ้งว่าควรเปลี่ยนนี่ครับ

ยกมาอีกที ⤵
snasui wrote: Sat May 15, 2021 11:10 am ที่สำคัญอีกประการ ชื่อ Procedure ไม่ควรซ้ำกับชื่อตัวแปร อย่างเช่นใน Code นี้ Procedure ชื่อ mychart ตัวแปรก็ชื่อ mychart ควรแก้ไขเสียใหม่ครับ
การลูปอาจารย์ตอบไว้แล้วใน #7 🙄 ยกโค้ดที่เขียนลูปแล้วติดมาด้วยจะได้เห็นกันชัด ๆ เผื่อเพื่อน ๆ ช่วยกันดูได้ครับ

Re: VBA: Scatter lines on Userform

#14

by PLM » Mon May 17, 2021 10:37 am

สวัสดีครับอาจารย์
ขอบคุณสำหรับคำแนะนำ ผมลอง แก้ไข ปรับปรุง code ใน Module แล้ว ผม สามารถ สร้าง graph ได้แล้วครับ ต้องขอขอบคุณมากครับ
ขั้นตอนต่อมา ที่ผม ไม่สามารถ ทำได้คือ

1. ผมต้องการ เพิ่ม graph ตาม file ที่ผม add เข้าไป ใน listbox ซึ่งผม เข้าใจว่า ผมควร จะต้อง สั่งให้มีการวน loop ตรงขั้นตอนนี้ ผม ไม่รุ้ว่าจะ เขียน การวน loop แบบไหนดีครับ

2. การสร้าง legend ตาม ชื่อ file ที่ผม สร้าง graph ครับ ผม พยายาม เปลี่ยนแล้ว แต่ไม่ได้ ครับ
รบกวน อาจารย์ ชี้แนะ ผมด้วยครับ ...ผมแนบ file ที่ปรับปรุงมาด้วยแล้วนะครับ

Code: Select all

Sub mychart()
    Dim mychart As Chart
    Dim sourceBook As Workbook
    Dim fname As String
    Dim sh As Worksheet
    Dim i As Integer

    DS.LB1.ListIndex = 0
    
    Set sourceBook = Workbooks(VBA.Split(DS.File.Caption, _
        "\")(UBound(VBA.Split(DS.File.Caption, "\"))))
    Set sh = sourceBook.Worksheets(DS.LB1.Text)
    
    Set mychart = Charts.Add
    With mychart
        Chartarray1 = sh.Range("$G$2:$G$300")
        Chartarray2 = sh.Range("$H$2:$H$300")
              
        .SeriesCollection.NewSeries
        .SeriesCollection(1).XValues = Chartarray1
        .SeriesCollection(1).Values = Chartarray2
        .ChartType = xlXYScatterSmoothNoMarkers
       '        .ChartStyle = 73

        mychart.Axes(xlCategory).HasTitle = True
        mychart.Axes(xlCategory).AxisTitle.Caption = "Longtiude"
        mychart.Axes(xlValue).HasTitle = True
        mychart.Axes(xlValue).AxisTitle.Caption = "Ele(m.asl)"
        
        'Chart Title "Cross section"
        mychart.Name = "Line information"
        
       ' To creat the Legend with is the LB1(listbox)?
       
        mychart.SetElement (msoElementLegendRight)
       

    End With
    
    ActiveChart.Export "D:\chartname.gif"
    f = ActiveSheet.Name
    Sheets(f).Select
    ActiveWindow.SelectedSheets.Visible = False
    fname = "D:\chartname.gif"
    DS.Image1.Picture = LoadPicture(fname)

End Sub

Attachments
2021_01_Jan.xls
raw data1
(64 KiB) Downloaded 2 times
2021_02_Feb.xls
raw data2
(75.5 KiB) Downloaded 1 time
X1.xlsm
VBA Code
(180.7 KiB) Downloaded 3 times

Re: VBA: Scatter lines on Userform

#13

by snasui » Sat May 15, 2021 11:10 am

:D สำหรับงานนี้ ไม่จำเป็นต้องไปสร้าง Module ขึ้นมาใหม่ซึ่งจะทำให้การเขียน Code ต้องอ้างอิง UserForm เข้ามาทำให้ยุ่งยากไปกว่าเดิม

ตัวอย่าง Code ใน Module1 ครับ

Code: Select all

Sub mychart()
    Dim mychart As Chart
    Dim sourceBook As Workbook
    Dim fname As String
    Dim sh As Worksheet
    Dim i As Integer

    DS.LB1.ListIndex = 0
    
    Set sourceBook = Workbooks(VBA.Split(DS.File.Caption, _
        "\")(UBound(VBA.Split(DS.File.Caption, "\"))))
    Set sh = sourceBook.Worksheets(DS.LB1.Text)
    
    Set mychart = Charts.Add
    With mychart
        chartarray1 = sh.Range("$G$2:$G$300")
        Chartarray2 = sh.Range("$H$2:$H$300")
        
        .SetSourceData Source:=sh.Range("a2:i300")
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Name = " Cross Section"
        .SeriesCollection(1).XValues = Chartarray2
        .SeriesCollection(1).Values = chartarray1
        .ChartType = xlXYScatterSmoothNoMarkers
'        .ChartStyle = 73
    End With
    
    ActiveChart.Export "D:\chartname.jpg"
    f = ActiveSheet.Name
    Sheets(f).Select
    ActiveWindow.SelectedSheets.Visible = False
    fname = "D:\chartname.jpg"
    DS.Image1.Picture = LoadPicture(fname)

End Sub
ที่สำคัญอีกประการ ชื่อ Procedure ไม่ควรซ้ำกับชื่อตัวแปร อย่างเช่นใน Code นี้ Procedure ชื่อ mychart ตัวแปรก็ชื่อ mychart ควรแก้ไขเสียใหม่ครับ

Re: VBA: Scatter lines on Userform

#12

by PLM » Sat May 15, 2021 9:25 am

สวัสดีครับ อาจารย์
สืบเนื่องจาก คำถามอาจารย์ ทำให้ผม เห็นไฟสว่างนิดๆ ผมพลาดเองครับ สิ่งที่ผมพลาดคือ ผม ไม่ได้สร้าง Module1

ผมแก้ไข้ และ ได้สร้าง Module เป็นที่เรียบร้อยแล้ว ครับ แต่ ผมติด debug ที่ Ln 7,col1 คับ
ผมเข้าใจว่า การ เปิด ข้อมูลของ listbox มาใช้ สร้าง chart ของผมไม่ถูกต้อง

ผม แนบ code ของ module ที่เขียน และ files มา ด้วยล่ะครับ รบกวนอาจารย์ ชี้แนะด้วยนะครับ

Code: Select all

Sub mychart()
Dim mychart As Chart
Dim sourceBook As Workbook
Dim fname As String
Dim i As Integer

For i = 0 To LB1.Listcounr - 1
Cells(i + 1, 1) = LB1.Text
Next i
LB1.ListIndex = 0


Set mychart = Charts.Add
With mychart

chartarray1 = sourceBook.Worksheets(LB1.Text).Range("$G$2:$G$300")
Chartarray2 = sourceBook.Worksheets(LB1.Text).Range("$H$2:$H$300")

.SetSourceData Source:=sourceBook
Worksheets(LB1.Text).Range ("a2:i300")
.SeriesCollection.NewSeries
.SeriesCollection(1).Name = " Cross Section"
.SeriesCollection(1).XValues = Chartarray2
.SeriesCollection(1).Values = chartarray1
.ChartType = xlXYScatterSmoothNoMarkers
.ChartStyle = 73
End With

ActiveChart.Export "D:\chartname.jpg"
f = ActiveSheet.Name
Sheets(f).Select
ActiveWindow.SelectedSheets.Visible = False
fname = "D:\chartname.jpg"
UserForm1.Image1.Picture = LoadPicture(fname)

End Sub

Attachments
X1.xlsm
VBA file
(42.98 KiB) Downloaded 3 times
2021_01_Jan.xls
Raw Data
(64 KiB) Downloaded 3 times

Re: VBA: Scatter lines on Userform

#11

by snasui » Fri May 14, 2021 6:43 am

:D ไฟล์ที่แนบมาไม่สามารถทำงานได้ เกิด Error และปิดตัวไปตอนคลิกสร้างกราฟครับ

นอกจากนี้ยังไม่พบ Code สำหรับการสร้างกราฟใน UserForm ช่วยระบุตำแหน่งมาให้ด้วยว่า Code นั้นอยู่ใน Module ไหน ชื่อ Procedure ว่าอะไร ติดขัดบรรทัดไหน จะได้เข้าถึงปัญหาโดยไว กรุณาอ่านกฎการใช้บอร์ดข้อ 5 ด้านบนประกอบครับ :roll:

Re: VBA: Scatter lines on Userform

#10

by PLM » Thu May 13, 2021 10:49 pm

สวัสดีครับ อาจารย์ ผมขอบคุณสำหรับคำแนะนำครับ
ตอนนี้ ลองไล่ทำ ทีล่ะขั้นตอน ผมพบปัญหา ครับ ปัญหาของผมคือ
1. code ที่ปรับแก้ แล้ว ตัว chart แสดงที่ ตัว excel ครับ แต่ ผม ต้องการให้ ตัว chart แสดง บน userform ใน frame ที่ออกแบบไว้
2. ตัว chart ที่แสดง นั้น ไม่ขึ้น เส้น ครับ แสดงแต่ กรอบ เท่านั้นครับ

ผมแนบ code ที่ปรับแก้มาแล้วครับ
รบกวนอาจารย์ชี้แนะด้วยครับ

Code: Select all

Private Sub Creating_Click()
Dim i As Integer
For i = 0 To LB1.ListCount - 1
LB1.ListIndex = i
Cells(i + 1, 1) = LB1.Text
Next i
LB1.ListIndex = 0

'to create the Scetter line

Dim MyChart As Chart
Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart
With MyChart
.SetSourceData Source:=sourceBook
Worksheets(Me.LB1.Text).Range ("a2:i300")
.SeriesCollection(1).Values = sourceBook.Worksheets(Me.LB1.Text).Range("$G$2:$G$300")
.SeriesCollection(1).Values = sourceBook.Worksheets(Me.LB1.Text).Range("$H$2:$H$300")
End With

'set chart axis min and max
'Y-Axis

MyChart.Axes(xlValue).MaximumScale = 235
MyChart.Axes(xlValue).MinimumScale = 210
MyChart.Axes(xlValue).MajorUnit = 5
MyChart.Axes(xlValue).MinorUnit = 1

'X-Axis
MyChart.Axes(xlCategory).MaximumScale = 101.824
MyChart.Axes(xlCategory).MinimumScale = 101.821
MyChart.Axes(xlCategory).MajorUnit = 0.0005
MyChart.Axes(xlCategory).MinorUnit = 0.0001

'Name the Y-Axis
MyChart.Axes(xlValue).HasTitle = True
MyChart.Axes(xlValue).AxisTitle.Text = "Ele(m.asl)"

'Name the x-Axis
MyChart.Axes(xlCategory).HasTitle = True
MyChart.Axes(xlCategory).AxisTitle.Text = "Longitude"

'Add gridlines
MyChart.SetElement (msoElementPrimaryValueGridLinesMajor)
MyChart.SetElement (msoElementPrimaryCategoryGridLinesMajor)
MyChart.SetElement (msoElementPrimaryValueGridLinesMinorMajor)
MyChart.SetElement (msoElementPrimaryCategoryGridLinesMinorMajor)

'Display chart title
MyChart.HasTitle = True

'Change colour of gridlines
MyChart.Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
][/End Sub]
Attachments
2021_01_Jan.xls
Raw Data
(64 KiB) Downloaded 4 times
X1.xlsm
Code
(42.62 KiB) Downloaded 3 times

Re: VBA: Scatter lines on Userform

#9

by snasui » Thu May 06, 2021 6:54 am

:D ตัวอย่าง Code ที่ทำให้แสดงกราฟได้โดยไม่ Error ลองนำไปประยุกต์ดูครับ

Code: Select all

Option Explicit

Dim sourceBook As Workbook

Private Sub Add_Click()
    Me.LB1.AddItem Me.COB1.Column(0)
End Sub

Private Sub Browse_Click()
    Dim YPath As Variant
    Dim wb As Workbook
    Dim ws As Worksheet
    YPath = Application.GetOpenFilename("Excel Files (*.xls*),*.xls*")
    File.Caption = YPath
    If YPath = False Then Exit Sub Else File.Caption = YPath
    
    COB1.Clear
    
    Application.ScreenUpdating = False
    Set wb = Workbooks.Open(File.Caption)
    Set sourceBook = wb
    ActiveWindow.Visible = False
    ThisWorkbook.Activate
    Application.ScreenUpdating = True
    ActiveWindow.Visible = True
    
    
    For Each ws In wb.Worksheets
        COB1.AddItem ws.Name
    Next ws
End Sub

Private Sub Creating_Click()
Dim i As Integer
'For i = 0 To LB1.ListCount - 1
'LB1.ListIndex = i
'Cells(i + 1, 1) = LB1.Text
'Next i
LB1.ListIndex = 0
'to create the Scetter line

Dim MyChart As Chart
Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart
With MyChart
    .SetSourceData Source:=sourceBook _
        .Worksheets(Me.LB1.Text).Range("a1:i300")
    .SeriesCollection(1).Values = sourceBook.Worksheets(Me.LB1.Text).Range("$G$2:$G$300")
    .SeriesCollection(1).Values = sourceBook.Worksheets(Me.LB1.Text).Range("$H$2:$H$300")
End With

'set chart axis min and max
MyChart.Axes(xlValue).MaximumScale = 102
'MyChart.Axes(xlValue).MinimumScale = 101
'MyChart.Axes(xlValue).MaximumScaleIaAuto = True
'MyChart.Axes(xlValue).MinimumScaleIaAuto = True

'MyChart.Axes(xlValue).MaximumScale = 200
'MyChart.Axes(xlValue).MinimumScale = 100
'MyChart.Axes(xlValues).MaximumScaleIaAuto = True
'MyChart.Axes(xlValues).MinimumScaleIaAuto = True
' my error is Values


'Display axis
MyChart.HasAxis(xlCategory) = True

'Display axis
'MyChart.Axes(xlCategory, xlSecondary).HasTite = True
'MyChart.Axes(xlCategory).HasTite = True
'Add gridlines
MyChart.SetElement (msoElementPrimaryValueGridLinesMajor)
'MyChart.SetElement (msoElementPrimaryCategoryGridLinesMajor)
MyChart.SetElement (msoElementPrimaryValueGridLinesMinorMajor)
'MyChart.SetElement (msoElementPrimaryCategoryGridLinesMinorMajor)

'Display chart title
MyChart.HasTitle = True

'Change colour of gridlines
'MyChart.Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(255, 0, 0)

End Sub

Private Sub Delete_Click()
    With Me.LB1
        .RemoveItem (.ListIndex)
    End With
End Sub
กรณีเกิดปัญหาในบรรทัดใด ๆ จะต้องแจ้งมาด้วยว่าบรรทัดนั้นต้องการจะทำอะไร จะได้ช่วยกันหาวิธีการได้ครับ

Re: VBA: Scatter lines on Userform

#8

by PLM » Wed May 05, 2021 8:03 pm

สวัสดีครับ อาจารย์
ใช่ แล้วครับผม ...ผม ต้องการนำข้อมูลจาก listbox มา สร้าง chart ซึ่งผมได้ดูตามที่ อาจารย์แนบตัวอย่างมาแล้วครับ และแก้ไขแล้วครับ ขอบคุณครับ

ขั้นตอนต่อมา หลังจากที่ผม เลือก ข้อมูล แล้ว จะต้องสร้าง chart ให้แสดง บน frame
ผมได้ส่ง code และ ตำแหน่ง error แนบมาด้วย
รบกวนขอคำชี้แนะ จาก อาจารย์ ด้วยครับ

Code: Select all

Private Sub Creating_Click()
Dim i As Integer
For i = 0 To LB1.ListCount - 1
LB1.ListIndex = i
Cells(i + 1, 1) = LB1.Text
Next i

'to create the Scetter line

Dim MyChart As Chart
Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart
With MyChart
.SetSourceData Source:=LB1
.SeriesCollection(1).xlValues = ActiveSheet.Range("$G$2:$G$300")
.SeriesCollection(1).Values = ActiveSheet.Range("$H$2:$H$300")
End With

'set chart axis min and max
MyChart.Axes(xlValue).MaximumScale = 102
MyChart.Axes(xlValue).MinimumScale = 101
MyChart.Axes(xlValue).MaximumScaleIaAuto = True
MyChart.Axes(xlValue).MinimumScaleIaAuto = True

MyChart.Axes(Values).MaximumScale = 200
MyChart.Axes(Values).MinimumScale = 100
MyChart.Axes(Values).MaximumScaleIaAuto = True
MyChart.Axes(Values).MinimumScaleIaAuto = True
' my error is Values


'Display axis
MyChart.HasAxis(xlCategory) = True

'Display axis
MyChart.Axes(xlCategory, xlSecondary).HasTite = True

'Add gridlines
MyChart.SetElement (msoElementPrimaryValueGridLinesMajor)
MyChart.SetElement (msoElementPrimaryCategoryGridLinesMajor)
MyChart.SetElement (msoElementPrimaryValueGridLinesMinorMajor)
MyChart.SetElement (msoElementPrimaryCategoryGridLinesMinorMajor)

'Display chart title
MyChart.HasTitle = True

'Change color of gridlines
MyChart.Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(255, 0, 0)

End Sub
Attachments
Error point
Error point
Problem.jpg (49.51 KiB) Viewed 170 times
2021_01_Jan.xls
Raw data1
(60.5 KiB) Downloaded 6 times
X1.xlsm
VBA
(40.05 KiB) Downloaded 7 times

Re: VBA: Scatter lines on Userform

#7

by snasui » Tue May 04, 2021 11:06 pm

:D อ่านดูแล้วคำถามน่าจะหมายว่าจะเลือกรายการจาก ListBox อย่างไรมากกว่าครับ

Me.LB1.Select คือต้องการจะเลือกรายการจาก ListBox ใช่หรือไม่ครับ :?:

ถ้าการสร้างกราฟต้องใช้รายการใน ListBox จะต้องเลือกรายการใน ListBox ให้ได้ก่อนครับ

ต้วอย่างการ Loop เพื่อเลือกรายการใน ListBox ครับ viewtopic.php?t=2171#p14112

Re: VBA: Scatter lines on Userform

#6

by PLM » Tue May 04, 2021 9:53 pm

สวัสดี ครับ อาจารย์ ได้อ่าน คำตอบ แบบนี้ ค่อย ยิ้มได้หน่อย...
งั้น ขั้นตอน ที่ผมเริ่ม ติด คือ
- ผม ไม่สามารถ สร้าง กร็าฟ จากการเลือก ข้อมูลจาก listbox ได้ครับ
- "Me.LB1.Select " ผม ระบุ ว่า ผมต้องการ เลือก ข้อมูล จาก listbox มาสร้าง กร๊าฟ ครับ

ขอบคุณครับ อาจารย์

Re: VBA: Scatter lines on Userform

#5

by snasui » Tue May 04, 2021 6:43 pm

:D ทำให้ผ่านไปทีละขั้น ค่อย ๆ ถามตอบกันไป ควรให้รายละเอียดในแต่ละขั้นมาให้ครบถ้วนครับ

Code ติดที่บรรทัดไหนควรแจ้งมาด้วยเสมอ ผมเปิดไฟล์แล้วไม่สามารถสร้าง Chart ได้ เกิด Error ที่ Me.LB1.Select ไม่ทราบว่าต้องการจะทำอะไรด้วยคำสั่งนี้ครับ

Re: VBA: Scatter lines on Userform

#4

by PLM » Mon May 03, 2021 6:13 pm

สวัสดี ครับ อาจารย์
step ของ การทำงานคือ
1. ผม เลือก file จาก การ browse
2. ผม เลือก sheet name จาก ComboBox แล้ว add sheet name ลง ListBox โดย เลือก add
3.ผม ต้องการ นำ file ที่ ลง ใน ListBox สร้าง scatter line บน frame
- แกน x คือ คอลัม G
-แกน y คือ คอลัม H
4. หลังจากนั้น ผม ต้องการ save รูป scatter line บน frame
5. ถ้า ต้องการ สร้าง หลายๆ กร๊าฟ ผม ต้องการทำ ซ้ำ จาก ข้อ 1-4
6. ถ้า ผม ไม่ต้องการ ดู ข้อมูล กร๊าฟ ไหน ผม จะ กด Delete ที่ List Box

ผม แนบ file ตัวอย่าง ที่ใช้ มาให้ แล้วนะครับ พร้อมกับ .xlsm

ขอบคุณ ครับ อาจารย์
Attachments
X1.xlsm
file VBA
(37.46 KiB) Downloaded 5 times
2021_01_Jan.xls
file Raw data1
(60.5 KiB) Downloaded 5 times
2021_02_Feb.xls
file Raw data2
(75.5 KiB) Downloaded 3 times

Re: VBA: Scatter lines on Userform

#3

by snasui » Mon Apr 26, 2021 9:18 pm

:D ช่วยแนบไฟล์ที่เกี่ยวข้องพร้อมแจ้งลำดับขั้นตอนการทดสอบมาด้วยจะได้เข้าถึงปัญหาโดยไวครับ

Re: VBA: Scatter lines on Userform

#2

by PLM » Mon Apr 26, 2021 4:37 pm

ขอโทษครับ ผมลืมแนบ file

ตามนี้นะครับ
Attachments
X1.xlsm
file
(37.46 KiB) Downloaded 8 times

VBA: Scatter lines on Userform

#1

by PLM » Mon Apr 26, 2021 4:34 pm

สวัสดี ครับ อาจารย์
วันนี้ผมมีเรื่องรบกวนขอความช่วยเหลือ ในการเขียน code vba ครับ ผมพยายามเขียน เพื่อใช้ในการ สร้าง sctter lines หลายๆ เส้น แสดง บน userform ตาม รูปที่ผมแนบ รบกวน อาจารย์ ช่วยดู และ comments ผมหน่อยนะครับ

ผม ออกแบบ งาน ดังนี้ครับ
1. นำข้อมููล จาก listbox ไป plot scatter lines แล้ว แสดง บน frame.
2. ถ้า หาก delete หรือ remove file ใน listbox scatter line ของ file นั้นๆ จะหายไปด้วย
ผมพยายาม แก้ไข code แต่ ไม่สามารถ run ได้ คงจะเขียน ผิด นั่นแหละ ครับ....

รบกวน ด้วยนะครับอาจารย์
ขอบพระคุณครับ

Code: Select all

Private Sub Creating_Click()

Application.ScreenUpdating = True

Me.LB1.Select

Dim MyChart As Chart
Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart
With MyChart
.SetSourceData Source:=LB1
.SeriesCollection(1).xlValues = ActiveSheet.Range("$G$2:$G$800")
.SeriesCollection(1).Values = ActiveSheet.Range("$H$2:$H$800")
End With

'set chart axis min and max
MyChart.Axes(xlValue).MaximumScale = 102
MyChart.Axes(xlValue).MinimumScale = 101
MyChart.Axes(xlValue).MaximumScaleIaAuto = True
MyChart.Axes(xlValue).MinimumScaleIaAuto = True

MyChart.Axes(Value).MaximumScale = 200
MyChart.Axes(Value).MinimumScale = 100
MyChart.Axes(Value).MaximumScaleIaAuto = True
MyChart.Axes(Value).MinimumScaleIaAuto = True

'Display axis
MyChart.HasAxis(xlCategory) = True

'Display axis
MyChart.Axes(xlCategory, xlSecondary).HasTite = True

'Add gridlines
MyChart.SetElement (msoElementPrimaryValueGridLinesMajor)
MyChart.SetElement (msoElementPrimaryCategoryGridLinesMajor)
MyChart.SetElement (msoElementPrimaryValueGridLinesMinorMajor)
MyChart.SetElement (msoElementPrimaryCategoryGridLinesMinorMajor)

'Display chart title
MyChart.HasTitle = True

'Change colour of gridlines
MyChart.Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(255, 0, 0)

End Sub

Attachments
ตัวอย่าง
ตัวอย่าง
Lines on chart.jpg (40.54 KiB) Viewed 225 times

Top