Page 1 of 1

VBA: Scatter lines on Userform

Posted: Mon Apr 26, 2021 4:34 pm
by PLM
สวัสดี ครับ อาจารย์
วันนี้ผมมีเรื่องรบกวนขอความช่วยเหลือ ในการเขียน 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


Re: VBA: Scatter lines on Userform

Posted: Mon Apr 26, 2021 4:37 pm
by PLM
ขอโทษครับ ผมลืมแนบ file

ตามนี้นะครับ

Re: VBA: Scatter lines on Userform

Posted: Mon Apr 26, 2021 9:18 pm
by snasui
:D ช่วยแนบไฟล์ที่เกี่ยวข้องพร้อมแจ้งลำดับขั้นตอนการทดสอบมาด้วยจะได้เข้าถึงปัญหาโดยไวครับ

Re: VBA: Scatter lines on Userform

Posted: Mon May 03, 2021 6:13 pm
by PLM
สวัสดี ครับ อาจารย์
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

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

Re: VBA: Scatter lines on Userform

Posted: Tue May 04, 2021 6:43 pm
by snasui
:D ทำให้ผ่านไปทีละขั้น ค่อย ๆ ถามตอบกันไป ควรให้รายละเอียดในแต่ละขั้นมาให้ครบถ้วนครับ

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

Re: VBA: Scatter lines on Userform

Posted: Tue May 04, 2021 9:53 pm
by PLM
สวัสดี ครับ อาจารย์ ได้อ่าน คำตอบ แบบนี้ ค่อย ยิ้มได้หน่อย...
งั้น ขั้นตอน ที่ผมเริ่ม ติด คือ
- ผม ไม่สามารถ สร้าง กร็าฟ จากการเลือก ข้อมูลจาก listbox ได้ครับ
- "Me.LB1.Select " ผม ระบุ ว่า ผมต้องการ เลือก ข้อมูล จาก listbox มาสร้าง กร๊าฟ ครับ

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

Re: VBA: Scatter lines on Userform

Posted: Tue May 04, 2021 11:06 pm
by snasui
:D อ่านดูแล้วคำถามน่าจะหมายว่าจะเลือกรายการจาก ListBox อย่างไรมากกว่าครับ

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

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

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

Re: VBA: Scatter lines on Userform

Posted: Wed May 05, 2021 8:03 pm
by PLM
สวัสดีครับ อาจารย์
ใช่ แล้วครับผม ...ผม ต้องการนำข้อมูลจาก 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

Re: VBA: Scatter lines on Userform

Posted: Thu May 06, 2021 6:54 am
by snasui
: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

Posted: Thu May 13, 2021 10:49 pm
by PLM
สวัสดีครับ อาจารย์ ผมขอบคุณสำหรับคำแนะนำครับ
ตอนนี้ ลองไล่ทำ ทีล่ะขั้นตอน ผมพบปัญหา ครับ ปัญหาของผมคือ
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]

Re: VBA: Scatter lines on Userform

Posted: Fri May 14, 2021 6:43 am
by snasui
:D ไฟล์ที่แนบมาไม่สามารถทำงานได้ เกิด Error และปิดตัวไปตอนคลิกสร้างกราฟครับ

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

Re: VBA: Scatter lines on Userform

Posted: Sat May 15, 2021 9:25 am
by PLM
สวัสดีครับ อาจารย์
สืบเนื่องจาก คำถามอาจารย์ ทำให้ผม เห็นไฟสว่างนิดๆ ผมพลาดเองครับ สิ่งที่ผมพลาดคือ ผม ไม่ได้สร้าง 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


Re: VBA: Scatter lines on Userform

Posted: Sat May 15, 2021 11:10 am
by snasui
: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

Posted: Mon May 17, 2021 10:37 am
by PLM
สวัสดีครับอาจารย์
ขอบคุณสำหรับคำแนะนำ ผมลอง แก้ไข ปรับปรุง 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


Re: VBA: Scatter lines on Userform

Posted: Mon May 17, 2021 11:13 am
by logic
ผมยังเห็นโค้ดยังเป็น 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

Posted: Tue May 18, 2021 8:44 am
by PLM
สวัสดีครับ อาจารย์
ขอโทษครับ ที่แก้ไข ไม่ครบตามที่อาจารย์แนะนำ ตอนนี้ ผมแก้ 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

Re: VBA: Scatter lines on Userform

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

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

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

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

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

Re: VBA: Scatter lines on Userform

Posted: Tue May 18, 2021 11:14 pm
by PLM
สวัสดีครับ อาจารย์
ขอบคุณ อาจารย์ ครับ ผมขอยอมรับนะครับว่า เพิ่งจะลองหัดใช้ vba ผมพยายาม ศึกษา ด้วยตนเอง มาเป็นเวลา 1 เดือนแล้วครับ เพราะผมคิดว่า ผมต้องนำมันมาใช้งาน code บางตัว ผมก็ เข้าใจ บางตัวผมก็ไม่เข้าใจ ครับ แต่ผมก็พยายาม
ส่วน งานชิ้นนี้เอง ผมก็พยายาม จะทำให้สำเร็จนะครับ เพราะผมคิดว่ามันสามารถจะต่อยอดงานของผมต่อไปได้

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

ขอบคุณครับ