snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
snasui
Site Admin
Posts: 31205 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#21
Post
by snasui » Wed May 20, 2020 8:18 pm
ลบวงเล็บก่อนเครื่องหมาย <> ออกไป 1 ตัวครับ
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#22
Post
by aroydee » Thu May 21, 2020 7:56 am
มันฟ้องแบบนี้ครับ
Attachments
Untitled -01.png (153.25 KiB) Viewed 77 times
snasui
Site Admin
Posts: 31205 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#23
Post
by snasui » Thu May 21, 2020 8:10 am
แก้เป็นแบบนี้ครับ
If UCase(VBA.Left(Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value, 1)) <> "T" Then
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#24
Post
by aroydee » Thu May 21, 2020 8:25 am
ได้ละครับ
ขอบคุณครับอาจารย์
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#25
Post
by aroydee » Thu May 21, 2020 12:56 pm
ที่ผ่านมา Code ทำงานได้ปกติครับ แต่ปัญหาต่อมา คือ
สูตรที่ผมใช้ในการดึงค่าไปสร้างตาราง
LOOKUP(2,1/(AN3:AN79<>""),AN3:AN79) ดึงตัวสุดท้ายก่อนค่าว่างไปแสดง
พอเกิด Action ในตาใหม่ มันก็เลยดึงค่าที่อยู่ก่อนหน้ามาแสดงซ้ำอีกรอบครับ
snasui
Site Admin
Posts: 31205 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#26
Post
by snasui » Thu May 21, 2020 8:04 pm
แนบไฟล์ล่าสุดมาด้วยจะได้สะดวกในการตอบครับ
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#27
Post
by aroydee » Mon May 25, 2020 6:54 pm
อันเก่าโอเคละครับ
แต่เหมือนจะหลายขั้นตอน ดูยุ่งยากครับ
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#28
Post
by aroydee » Mon May 25, 2020 7:03 pm
เลยอยากแก้ไขใหม่ครับ
1.การป้อนสกอร์ ไม่ต้องใช้ตัวเลขแยกสี ใช้ชุดเดียวเลยครับ
2.โดยป้อนให้ตัวเลขเรียงต่อกันในสี่เหลี่ยมสีน้ำเงิน - แดง (ด้านบน ขวามือ) ไปทีละตัวจากซ้ามือครับ
3.แล้วค่อยกดแป้น "บันทึกแต้ม" ตัวเลขจึงถูกคัดลอกไปอยู่ใน C19:H19 ....
โดยชุดนี้ใช้ Module4 เขียน VBA ครับ
Attachments
2020-05-25 เกมไพ่ มหาสนุก.xlsm
(219.87 KiB) Downloaded 3 times
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#29
Post
by aroydee » Mon May 25, 2020 7:10 pm
ส่วนนี้ครับ
Attachments
Untitled.png (150.79 KiB) Viewed 56 times
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#30
Post
by aroydee » Mon May 25, 2020 7:20 pm
ลำดับต่อมาครับ
Attachments
Untitled -01.png (69.38 KiB) Viewed 55 times
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#31
Post
by aroydee » Mon May 25, 2020 7:23 pm
VBA ใน Module4 ครับ
Code: Select all
Sub Card0()
Application.ScreenUpdating = False
With Sheets("Trics")
If .Range("Pla" & Rows.Count).End(xlUp).Row = 10 Then Exit Sub
[TargetPla] = 0
[TargetBnk] = 0
End With
Application.ScreenUpdating = True
End Sub
Sub Card1()
Application.ScreenUpdating = False
[TargetPla] = 1
[TargetBnk] = 1
Application.ScreenUpdating = True
End Sub
Sub Card2()
Application.ScreenUpdating = False
[TargetPla] = 2
[TargetBnk] = 2
Application.ScreenUpdating = True
End Sub
Sub Card3()
Application.ScreenUpdating = False
[TargetPla] = 3
[TargetBnk] = 3
Application.ScreenUpdating = True
End Sub
Sub Card4()
Application.ScreenUpdating = False
[TargetPla] = 4
[TargetBnk] = 4
Application.ScreenUpdating = True
End Sub
Sub Card5()
Application.ScreenUpdating = False
[TargetPla] = 5
[TargetBnk] = 5
Application.ScreenUpdating = True
End Sub
Sub Card6()
Application.ScreenUpdating = False
[TargetPla] = 6
[TargetBnk] = 6
Application.ScreenUpdating = True
End Sub
Sub Card7()
Application.ScreenUpdating = False
[TargetPla] = 7
[TargetBnk] = 7
Application.ScreenUpdating = True
End Sub
Sub Card8()
Application.ScreenUpdating = False
[TargetPla] = 8
[TargetBnk] = 8
Application.ScreenUpdating = True
End Sub
Sub Card9()
Application.ScreenUpdating = False
[TargetPla] = 9
[TargetBnk] = 9
Application.ScreenUpdating = True
End Sub
Sub NoCard()
Application.ScreenUpdating = False
[TargetPla] = "-"
[TargetBnk] = "-"
Application.ScreenUpdating = True
End Sub
Sub Back()
Application.ScreenUpdating = False
[TargetUPla] = ""
[TargetUBnk] = ""
Application.ScreenUpdating = True
End Sub
Sub Reset()
Application.ScreenUpdating = False
Range("Pla").ClearContents
Range("Bnk").ClearContents
Application.ScreenUpdating = True
End Sub
Sub NewGame()
Application.ScreenUpdating = False
Range("Pla").ClearContents
Range("Bnk").ClearContents
Range("PCard").ClearContents
Range("BCard").ClearContents
Application.ScreenUpdating = True
End Sub
Sub AddScore()
Application.ScreenUpdating = False
With Sheets("Trics")
Range("D3:D5").Copy
Range("C" & Rows.Count).End(xlUp).Offset(1, 0) _
.PasteSpecial xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True
Range("G3:G5").Copy
Range("F" & Rows.Count).End(xlUp).Offset(1, 0) _
.PasteSpecial xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True
'Other code ... คัดลอก [K] ไป [AN]
' Range("an" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
' Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value
'Other code ... ไม่คัดลอกตัวเสมอ
If UCase(VBA.Left(Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value, 1)) <> "T" Then
Range("an" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value
End If
'Other code
Range("PS").ClearContents
Range("BS").ClearContents
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Sub UndoScore()
Application.ScreenUpdating = False
With Sheets("Trics")
If .Range("C" & Rows.Count).End(xlUp).Row = 18 Then Exit Sub
.Range("C" & Rows.Count).End(xlUp).Resize(1, 6).ClearContents
End With
Application.ScreenUpdating = True
End Sub
snasui
Site Admin
Posts: 31205 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#32
Post
by snasui » Mon May 25, 2020 10:53 pm
ทั้งหมดนี้คือแก้ไขเรียบร้อยแล้วเอามาแบ่งปันเพื่อนสมาชิกหรือว่ามีปัญหาใดที่ต้องการคำตอบหรือไม่ครับ
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#33
Post
by aroydee » Mon May 25, 2020 10:59 pm
กรอกสกอร์แบบเก่าใช้ได้แล้ว ใครจะเอาไปเล่นสนุก ก็ได้ครับ
แบบใหม่ที่จะจดสกอร์จากเลขชุดเดียว ยังทำไม่ได้เลยครับ
snasui
Site Admin
Posts: 31205 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#34
Post
by snasui » Mon May 25, 2020 11:17 pm
ติดตรงไหนกรุณาระบุมาด้วย ผมอ่านแล้วไม่พบว่าเป็นการถามสิ่งที่เป็นปัญหาครับ
ควรถามให้ผ่านไปทีละประเด็นครับ
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#35
Post
by aroydee » Tue May 26, 2020 12:10 am
ใส่ได้ตัวแรกตัวเดียวครับ ตัว 2-6 ไม่รู้จะไปยังไง
Code: Select all
Sub Card0()
Application.ScreenUpdating = False
With Sheets("Trics")
'If .Range("Pla" & Rows.Count).End(xlUp).Row = 10 Then Exit Sub
Dim i As Integer
Dim sel As Range
Set sel = [AQ2,AU2,AY2,BC2,BG2,BK2]
For i = 1 To 6
If i = 1 Then sel.Columns(i) = 0
Next i
End With
'Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#36
Post
by aroydee » Tue May 26, 2020 12:12 am
แบบนี้ครับ
Attachments
Untitled -02.png (114.73 KiB) Viewed 36 times
snasui
Site Admin
Posts: 31205 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#37
Post
by snasui » Tue May 26, 2020 7:38 am
ผมลองคีย์ตัวเลขในช่องสีน้ำเงินและสีแดงครบทุกช่องแล้วคลิกปุ่ม บันทึกแต้ม พบว่าไม่มีการ Assign Macro ให้กับปุ่มนี้
ไม่ทราบว่าได้เขียน Code เกี่ยวกับการบันทึกแต้มแล้วหรือไม่ เขียนไว้อย่างไร อยู่ที่ Module ไหน ติดขัดบรรทัดใดครับ
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#38
Post
by aroydee » Tue May 26, 2020 1:24 pm
ที่อาจารย์ลองคีย์ ชุดนี้ใช่ไหม...ชุดนี้ ใช้ได้ปกตินะครับ
ตัวเลขชุดน้ำเงิน อยู่ใน Module1
ตัวเลขชุดแดง อยู่ใน Module2 ครับ
เพียงแต่ต้องคีย์ตัวเลขแยกสี เลยดูหลายขั้นตอนเลยจะไม่ใช้ครับ
Attachments
Untitled -05.png (163.85 KiB) Viewed 25 times
Last edited by
aroydee on Tue May 26, 2020 1:49 pm, edited 2 times in total.
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#39
Post
by aroydee » Tue May 26, 2020 1:42 pm
แต่จะมาใช้ชุดนี้แทนครับ
1.ใช้เลขชุดเดียว (แป้นสีส้ม 0-9) คีย์ให้แสดงเรียงลำดับในช่อง น้ำเงิน-แดง 6 ช่องด้านบน
2.Code ที่เขียนอยู่ใน Module4 หัวข้อ Sub Card0() ครับ
เพิ่ง Assign macro แค่ตัวเลข 0 มันก็ไม่ไปเรียงลำดับซะแล้ว มันค้างอยู่แค่ช่องน้ำเงินช่องแรกช่องเดียวเองครับ
Attachments
Untitled -04.png (180.3 KiB) Viewed 26 times
Last edited by
aroydee on Tue May 26, 2020 2:33 pm, edited 1 time in total.
aroydee
Member
Posts: 75 Joined: Thu Dec 12, 2019 4:49 pm
#40
Post
by aroydee » Tue May 26, 2020 2:30 pm
ไฟล์ กับ Code ล่าสุดครับ
คีย์เลขใหม่ (ลองเลข 0 แค่ตัวเดียว) มันแสดงใน Card น้ำเงินซ้ำแค่ช่องแรกช่องเดียว
ไม่ยอมไปช่อง 2...6 ครับ
Code: Select all
Sub Card0()
Application.ScreenUpdating = False
With Sheets("Trics")
Range("AA2") = 0
Dim i As Integer
Dim sel As Range
Set sel = [B2,E2,H2,K2,N2,Q2]
If UCase(VBA.Left(Range("AA2").Value, 1)) <> "" Then
For i = 1 To 6
If i = 1 Then sel.Columns(i).Value = [AA2]
Next i
End If
Range("AA2").ClearContents
End With
Application.ScreenUpdating = True
End Sub
Attachments
2020-05-26 เกมไพ่ มหาสนุก v.2.xlsm
(218.19 KiB) Downloaded 1 time