Page 1 of 2
อธิบาย Code
Posted: Mon Oct 05, 2015 12:53 pm
by jinjin
เรียนอาจารย์ รบกวนอธิบาย Code ได้หรือเปล่าคะ
Private Sub UserForm_Initialize()
Dim Projectarray(50) As String
Dim i As Integer
Dim j As Integer
i = o
j = 4
While (Sheet1.Cells(j, 1) > " ")
If Left(Sheet1.Cells(j, 1), 3) = "IMT" Then
Projectarray(i) = Sheet1.Cells(j, 2)
i = i + 1
j = j + 1
Else: j = j + 1
End If
Wend
ListBox2.List = Projectarray()
End Sub
Re: อธิบาย Code
Posted: Mon Oct 05, 2015 2:47 pm
by DhitiBank
ขอลองดูนะครับ ตกหล่นอย่างไร ขอให้อาจารย์และเพื่อนๆ ช่วยปรับครับ

ช่วง
Dim เป็นการประกาศตัวแปรครับ ลองดูชนิดของตัวแปรที่นี่
DataType Summary
มีตัวแปรตัวหนึ่งถูกประกาศเป็นอาร์เรย์คือ
Projectarray() มีสมาชิก 51 รายการ (รวม 0 ด้วย)

เริ่มแรกให้
i=0 (สมาชิกตัวแรกของอาร์เรย์) และ
j=4
While [condition]...Wend เป็นการลูปหรือการสั่งให้ทำงานแบบวนไปเรื่อยๆ ครับ ในกรณีจะวนจนกว่า [condition] จะเป็นเท็จ [condition] ในที่นี้ก็คือ Sheet1.Cells(j, 1) > ""
--- เริ่มที่
.cells(4,1) คือแถวที่ 4 คอลัมน์ที่ 1 หรือก็คือเซลล์ A4 มีค่ามากกว่าค่าว่างหรือไม่ (เอ... เปรียบเทียบแบบนี้น่าจะ error นะ หรือยังไง? งง)
--- หากตรวจ [condition] แล้วได้ True ก็จะมาที่คำสั่ง
If... Else... Endif
--- ที่
If Left(Sheet1.Cells(j, 1), 3) = "IMT" จะตรวจว่าอักขระ 3 ตัวซ้ายในเซลล์ A4 คือ "IMT" หรือไม่ หากใช่ก็จะมาที่
Projectarray(i) = Sheet1.Cells(j, 2) คือเอาค่าในเซลล์ B4 มาใส่เป็นสมาชิกตัวที่ i (หรือตัวที่ 0 ในตอนเริ่ม) จากนั้นคำสั่งก็จะให้เพิ่มค่า i และ j อย่างละ 1
--- หาก If ตรวจแล้วว่า
Left(Sheet1.Cells(j, 1), 3) = "IMT" เป็นเท็จ คำสั่งก็ไปที่ Else และให้เพิ่มเฉพาะค่า j อีก 1 (ให้เปลี่ยนเซลล์ในการตรวจสอบไปเรื่อยๆ)
--- ลูปก็จะวนไปที่
While ใหม่ จนกว่าจะพบว่า condition เป็น False หากเจอว่าเป็น False ก็จะมาที่
ListBox2.List = Projectarray() คือให้แสดงรายการ Projectarray ใน ListBox2 ครับ
Re: อธิบาย Code
Posted: Tue Oct 06, 2015 11:10 am
by jinjin
ขอบคุณ คุณDhitiBank มากคะ
ขอรบกวนอีกครั้งนะค่ะ หากจะตรวจสอบค่ามากกว่า 1 สามารถเขียนต่อจาก
If Left(Sheet1.Cells(j, 1), 3) = "IMT" Then
If Left(Sheet1.Cells(j, 1), 2) = "XXT" Then
If Left(Sheet1.Cells(j, 1), 1) = "IMXT" Then
Projectarray(i) = Sheet1.Cells(j, 2)
i = i + 1
j = j + 1
Else: j = j + 1
End If
Wend
ListBox2.List = Projectarray()
End Sub
รบกวนอีกคร้ังนะคะ
ขอบคุณค่ะ
Re: อธิบาย Code
Posted: Tue Oct 06, 2015 11:47 am
by DhitiBank
คุณ jinjin ควรแนบไฟล์ตัวอย่างมาด้วยจะดีมากครับ และบอกว่าต้องการจะทำอะไร ปัญหาคืออะไร เพื่ออาจารย์และเพื่อนๆ จะได้ช่วยทดสอบและแนะนำได้สะดวกขึ้น บอกตามตรงว่าผมเพิ่งจะหัด VBA หากไม่มีไฟล์ตัวอย่างให้ทดลองก็ตอบยากครับ

Re: อธิบาย Code
Posted: Tue Oct 06, 2015 3:42 pm
by jinjin
ต้องขอโทษด้วยคะ แนบไฟล์ให้แล้วคะ
1.ขออธิบายในส่วนของโปรแกรมนะคะ ดิฉันใช้ ComboBox ในการค้นหา ID (Sheet1 column 1) เพื่อให้ข้อมูลID และรายละเอียดข้อมูล (Sheet1 column 2) Show ในส่วนของ ListBox2 ค่ะ รบกวน run ดูได้ค่ะ
Re: อธิบาย Code
Posted: Tue Oct 06, 2015 5:01 pm
by jinjin
jinjin wrote:ต้องขอโทษด้วยคะ แนบไฟล์ให้แล้วคะ
1.ขออธิบายในส่วนของโปรแกรมนะคะ ดิฉันใช้ ComboBox ในการค้นหา ID (Sheet1 column A) เพื่อให้ข้อมูลID และรายละเอียดข้อมูล (Sheet1 column B) Show ในส่วนของ ListBox2 ค่ะ รบกวน run ดูได้ค่ะ
Re: อธิบาย Code
Posted: Tue Oct 06, 2015 5:57 pm
by snasui

ตามไฟล์ที่แนบมาช่วย Code อยู่ Module ไหน ชื่อว่าอะไร อ่านกฎการใช้บอร์ดข้อ 5 ด้านบนประกอบครับ
ค่าทดสอบเช่นค่าใด หากถูกต้องแล้วจะต้องได้คำตอบเป็นอย่างไร
การโพสต์ Code ควรให้แสดงเป็น Code ดูตัวอย่างที่ Link นี้ครับ
viewtopic.php?f=6&t=1187
Re: อธิบาย Code
Posted: Wed Oct 07, 2015 6:16 pm
by jinjin
ต้องขอโทษด้วยค่ะ ดิฉันเองพึ่งศึกษา VBA ด้วยคะ
โดยนำ Code ตามเว็บที่ศึกษามาทดลองใช้ค่ะ
แต่เกิดปัญหาตามไฟล์ที่แนบมาคะ Code อยู่ Module 1 Formsชื่อว่า IMTGT โดยดิฉันต้องการ Code เลือกประเภทจากรหัส 3 ตัวแรก
ใน Column A
Process ที่ได้ คือ เมื่อเลือกประเภทใดประเภทหนึ่งแล้ว ผลลัพท์ที่ออกมาคือข้อมูลที่อยู่ในส่วนของ Column B จะแสดงผลออกมาทั้งหมดค่ะ
Re: อธิบาย Code
Posted: Wed Oct 07, 2015 6:18 pm
by jinjin
ดิฉันเองไม่แน่ใจค่ะว่าจัดวาง Excell ถูกหรือไม่ เพราะเมื่อ run แล้วข้อมูลไม่แสดงผลค่ะ และก็ไม่เกิด error ด้วย รบกวนอาจารย์ช่วยแนะนำด้วยค่ะ
Re: อธิบาย Code
Posted: Wed Oct 07, 2015 6:33 pm
by snasui
jinjin wrote:โดยดิฉันต้องการ Code เลือกประเภทจากรหัส 3 ตัวแรก
ใน Column A

ได้เขียน Code นั้นไว้แล้วหรือไม่ เขียนไว้ที่บรรทัดใดครับ
เอา Code มาเฉย ๆ โดยไม่ปรับเลยนั้นไม่เข้าเงื่อนไขของการตอบปัญหา VBA หากเอา Code มาก็ต้องปรับเองเป็นบ้างไม่มากก็น้อยครับ
jinjin wrote:Process ที่ได้ คือ เมื่อเลือกประเภทใดประเภทหนึ่งแล้ว ผลลัพท์ที่ออกมาคือข้อมูลที่อยู่ในส่วนของ Column B จะแสดงผลออกมาทั้งหมดค่ะ
ต้องการให้แสดงที่ไหนครับ
Re: อธิบาย Code
Posted: Fri Oct 09, 2015 2:07 pm
by jinjin
เรียนถามอาจารย์คะว่า หากจะอ้างอิง ที่จัดเก็บ
Path workbook
สามารถที่จะจัดเก็บรูปแบบ Folder ได้หรือไม่ค่ะ
Re: อธิบาย Code
Posted: Fri Oct 09, 2015 2:20 pm
by jinjin
Re: อธิบาย Code
Posted: Fri Oct 09, 2015 6:28 pm
by snasui

จัดเก็บแบบ Folder ที่ว่านั้นต้องการจะจัดเก็บอย่างไรครับ
สำหรับการเปิด Folder ไม่มี Code
Folder.Open การเปิด Folder ด้วยวิธีต่าง ๆ ดูที่นี่ครับ
http://stackoverflow.com/questions/1120 ... r-from-vba
Re: อธิบาย Code
Posted: Sat Oct 10, 2015 5:00 pm
by jinjin
ขอบคุณค่ะ ทำได้แล้วค่ะ
Re: อธิบาย Code
Posted: Sun Oct 11, 2015 1:06 pm
by jinjin
รบกวนช่วย อธิบายให้หน่อยนะค่ะ
Code: Select all
Dim Prompt As String
Dim RetValue As String
Dim Rng As Range
Dim RowCrnt As Long
Prompt = ""
' The macro recorder has used the active worksheet. This says which
' worksheet is to be used whether it is active or not. Change "Sheet4"
' to the name of your worksheet.
With Sheets("Sheet4")
' This will loop forever unless a statement within
' the loop exits the Do.
Do While True
RetValue = InputBox(Prompt & "Give me a value to look for")
'RetValue will be empty if you click cancel
If RetValue = "" Then
Exit Do
End If
' I do not wish to active the cell containing the required value.
' I want to know where it is.
Set Rng = .Columns("A:A").Find(What:=RetValue, After:=.Range("A1"), _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Rng Is Nothing Then
' The entered value could not be found
Prompt = "I could not find """ & RetValue & """"
Else
' The entered value was found
RowCrnt = Rng.Row
Prompt = "I found """ & RetValue & """ on row " & RowCrnt
End If
Prompt = Prompt & vbLf
Loop
End With
End Sub
Re: อธิบาย Code
Posted: Sun Oct 11, 2015 1:12 pm
by snasui

ใน Code มีคำอธิบายไว้เรียบร้อยแล้วลองแปลดูก่อน ติดตรงไหนแล้วค่อยถามกันต่อครับ
Re: อธิบาย Code
Posted: Sun Oct 11, 2015 10:05 pm
by jinjin
ได้ code มา รบกวนอธิบายให้อีกครั้งนะคะ
Code: Select all
Dim irow as Long
Dim ws As Long
Dim count As Integer
lastrow = sheets("item").cells(Rows.count,1).End(xlUp).Row
For x = 2 to lastrow
If sheets("item").cells(x,1) = sheet2.Rang ("B2")Then
sheet2.Rang ("B2") = Sheet ("item").cell(x,1)
sheet2.Rang ("B2") = Sheet ("item").cell(x,2)
end If
Next x
end sub
Re: อธิบาย Code
Posted: Mon Oct 12, 2015 12:24 am
by snasui

ไม่เข้าใจบรรทัดใดครับ
การใช้ Code จำเป็นต้องศึกษามาตามลำดับ หากไม่เข้าใจเลยแม้แต่บรรทัดเดียวยังไม่ควรใช้ VBA ควรหาหนังสือมาอ่านและลองทำตามก่อนครับ
Re: อธิบาย Code
Posted: Thu Oct 15, 2015 2:43 pm
by jinjin
รบกวนอีกคร้ังนะค่ะ
ต้องการทราบ "ข้อมูลที่อยู่ใน cell" เท่านั่น หาก cell ไหนไม่มีข้อมูลอยู่ ไม่ต้องแสดงค่าออกมา
โดยข้อมูลที่ได้มาจะมีลักษณะเป็น 5 คอลัมน์ ซึ่งใน 5 คอลัมน์นั่นมี cell ว่าง "ไม่มีข้อมูลอยู่"
เช่น ข้อมูล A แถวที่ 1 มีข้อมูลใน cell แต่ละคอลัมน์ ไม่ครบ
ข้อมูล B แถวที่ 2 มีข้อมูลโดยเรียงกันไปในแต่ละคอลัมน์ครบ
แถวต่อ ๆ ไปก็ เป็นลักษณะเดียวกันนี้สลับกันไปไม่แน่นอน
ซึ่ง "Code เก่าที่ใช้" เป็นการหาพิกัดค่า Row, Column ซื่งผลที่ได้ไม่ต้องตามที่ต้องการค่ะ
Code: Select all
Dim j As Integer
Dim tCol As Integer
TextBox7.Text = " "
j = 3
While (Sheet1.Cells(1, j) > " ")
If (Sheet1.Cells(1, j) = ListBox4.Text) Then
tCol = j
End If
j = j + 1
Wend
TextBox7.Text = Sheet1.Cells(eRow, tCol) 'รับค่าที่ได้ มาแสดงผล Textbox7 คะ
จะต้องใช้ code macro อะไรเพิ่มเติมคะ ขอคำแนะนำด้วยค่ะ
Re: อธิบาย Code
Posted: Thu Oct 15, 2015 6:03 pm
by snasui

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