: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

อธิบาย Code

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

อธิบาย Code

#1

Post 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
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: อธิบาย Code

#2

Post 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 ครับ
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#3

Post 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

รบกวนอีกคร้ังนะคะ
ขอบคุณค่ะ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: อธิบาย Code

#4

Post by DhitiBank »

คุณ jinjin ควรแนบไฟล์ตัวอย่างมาด้วยจะดีมากครับ และบอกว่าต้องการจะทำอะไร ปัญหาคืออะไร เพื่ออาจารย์และเพื่อนๆ จะได้ช่วยทดสอบและแนะนำได้สะดวกขึ้น บอกตามตรงว่าผมเพิ่งจะหัด VBA หากไม่มีไฟล์ตัวอย่างให้ทดลองก็ตอบยากครับ :)
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#5

Post by jinjin »

ต้องขอโทษด้วยคะ แนบไฟล์ให้แล้วคะ
1.ขออธิบายในส่วนของโปรแกรมนะคะ ดิฉันใช้ ComboBox ในการค้นหา ID (Sheet1 column 1) เพื่อให้ข้อมูลID และรายละเอียดข้อมูล (Sheet1 column 2) Show ในส่วนของ ListBox2 ค่ะ รบกวน run ดูได้ค่ะ
Attachments
test.xls
(77 KiB) Downloaded 17 times
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#6

Post by jinjin »

jinjin wrote:ต้องขอโทษด้วยคะ แนบไฟล์ให้แล้วคะ
1.ขออธิบายในส่วนของโปรแกรมนะคะ ดิฉันใช้ ComboBox ในการค้นหา ID (Sheet1 column A) เพื่อให้ข้อมูลID และรายละเอียดข้อมูล (Sheet1 column B) Show ในส่วนของ ListBox2 ค่ะ รบกวน run ดูได้ค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อธิบาย Code

#7

Post by snasui »

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

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

การโพสต์ Code ควรให้แสดงเป็น Code ดูตัวอย่างที่ Link นี้ครับ viewtopic.php?f=6&t=1187
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#8

Post by jinjin »

ต้องขอโทษด้วยค่ะ ดิฉันเองพึ่งศึกษา VBA ด้วยคะ
โดยนำ Code ตามเว็บที่ศึกษามาทดลองใช้ค่ะ
แต่เกิดปัญหาตามไฟล์ที่แนบมาคะ Code อยู่ Module 1 Formsชื่อว่า IMTGT โดยดิฉันต้องการ Code เลือกประเภทจากรหัส 3 ตัวแรก
ใน Column A
Process ที่ได้ คือ เมื่อเลือกประเภทใดประเภทหนึ่งแล้ว ผลลัพท์ที่ออกมาคือข้อมูลที่อยู่ในส่วนของ Column B จะแสดงผลออกมาทั้งหมดค่ะ
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#9

Post by jinjin »

ดิฉันเองไม่แน่ใจค่ะว่าจัดวาง Excell ถูกหรือไม่ เพราะเมื่อ run แล้วข้อมูลไม่แสดงผลค่ะ และก็ไม่เกิด error ด้วย รบกวนอาจารย์ช่วยแนะนำด้วยค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อธิบาย Code

#10

Post by snasui »

jinjin wrote:โดยดิฉันต้องการ Code เลือกประเภทจากรหัส 3 ตัวแรก
ใน Column A
:D ได้เขียน Code นั้นไว้แล้วหรือไม่ เขียนไว้ที่บรรทัดใดครับ

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

Re: อธิบาย Code

#11

Post by jinjin »

เรียนถามอาจารย์คะว่า หากจะอ้างอิง ที่จัดเก็บ
Path workbook

Code: Select all

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

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

Code: Select all

  Folder.Open "D:\"Work\Sep\111"
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#12

Post by jinjin »

Code: Select all

Msgbox ThisWorkbook.Path
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อธิบาย Code

#13

Post by snasui »

:D จัดเก็บแบบ Folder ที่ว่านั้นต้องการจะจัดเก็บอย่างไรครับ

สำหรับการเปิด Folder ไม่มี Code Folder.Open การเปิด Folder ด้วยวิธีต่าง ๆ ดูที่นี่ครับ http://stackoverflow.com/questions/1120 ... r-from-vba
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#14

Post by jinjin »

ขอบคุณค่ะ ทำได้แล้วค่ะ
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#15

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อธิบาย Code

#16

Post by snasui »

:D ใน Code มีคำอธิบายไว้เรียบร้อยแล้วลองแปลดูก่อน ติดตรงไหนแล้วค่อยถามกันต่อครับ
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#17

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อธิบาย Code

#18

Post by snasui »

:D ไม่เข้าใจบรรทัดใดครับ :?:

การใช้ Code จำเป็นต้องศึกษามาตามลำดับ หากไม่เข้าใจเลยแม้แต่บรรทัดเดียวยังไม่ควรใช้ VBA ควรหาหนังสือมาอ่านและลองทำตามก่อนครับ
jinjin
Member
Member
Posts: 15
Joined: Mon Oct 05, 2015 11:26 am

Re: อธิบาย Code

#19

Post 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 อะไรเพิ่มเติมคะ ขอคำแนะนำด้วยค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อธิบาย Code

#20

Post by snasui »

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