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

ช่วยแนบไฟล์ที่เกี่ยวข้องพร้อมแจ้งลำดับขั้นตอนการทดสอบมาด้วยจะได้เข้าถึงปัญหาโดยไวครับ
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

ทำให้ผ่านไปทีละขั้น ค่อย ๆ ถามตอบกันไป ควรให้รายละเอียดในแต่ละขั้นมาให้ครบถ้วนครับ
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

อ่านดูแล้วคำถามน่าจะหมายว่าจะเลือกรายการจาก 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

ตัวอย่าง 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

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

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

สำหรับงานนี้ ไม่จำเป็นต้องไปสร้าง 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

ตัวอย่างการ 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 บางตัว ผมก็ เข้าใจ บางตัวผมก็ไม่เข้าใจ ครับ แต่ผมก็พยายาม
ส่วน งานชิ้นนี้เอง ผมก็พยายาม จะทำให้สำเร็จนะครับ เพราะผมคิดว่ามันสามารถจะต่อยอดงานของผมต่อไปได้
หลังจากนี้ไป ผมจะไปปรับแก้ และ สอบถามอาจารย์ ต่อไปเรื่อยๆนะครับ
ขอบคุณครับ