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
ขอลองดูนะครับ ตกหล่นอย่างไร ขอให้อาจารย์และเพื่อนๆ ช่วยปรับครับ

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

:arrow: เริ่มแรกให้ i=0 (สมาชิกตัวแรกของอาร์เรย์) และ j=4

:arrow: 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
:D ตามไฟล์ที่แนบมาช่วย Code อยู่ Module ไหน ชื่อว่าอะไร อ่านกฎการใช้บอร์ดข้อ 5 ด้านบนประกอบครับ :roll:

ค่าทดสอบเช่นค่าใด หากถูกต้องแล้วจะต้องได้คำตอบเป็นอย่างไร

การโพสต์ 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
:D ได้เขียน Code นั้นไว้แล้วหรือไม่ เขียนไว้ที่บรรทัดใดครับ

เอา Code มาเฉย ๆ โดยไม่ปรับเลยนั้นไม่เข้าเงื่อนไขของการตอบปัญหา VBA หากเอา Code มาก็ต้องปรับเองเป็นบ้างไม่มากก็น้อยครับ
jinjin wrote:Process ที่ได้ คือ เมื่อเลือกประเภทใดประเภทหนึ่งแล้ว ผลลัพท์ที่ออกมาคือข้อมูลที่อยู่ในส่วนของ Column B จะแสดงผลออกมาทั้งหมดค่ะ
ต้องการให้แสดงที่ไหนครับ

Re: อธิบาย Code

Posted: Fri Oct 09, 2015 2:07 pm
by jinjin
เรียนถามอาจารย์คะว่า หากจะอ้างอิง ที่จัดเก็บ
Path workbook

Code: Select all

Workbooks.Open "D:\Work\Sep\test"

สามารถที่จะจัดเก็บรูปแบบ Folder ได้หรือไม่ค่ะ

Code: Select all

  Folder.Open "D:\"Work\Sep\111"

Re: อธิบาย Code

Posted: Fri Oct 09, 2015 2:20 pm
by jinjin

Code: Select all

Msgbox ThisWorkbook.Path

Re: อธิบาย Code

Posted: Fri Oct 09, 2015 6:28 pm
by snasui
:D จัดเก็บแบบ 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
:D ใน 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
:D ไม่เข้าใจบรรทัดใดครับ :?:

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