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

การเขียน VBA ทั่วไป

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

การเขียน VBA ทั่วไป

#1

Post by yodpao.b »

ขออนุญาติขึ้นหัวข้อใหม่ หมวดนี้ไว้ถามเรื่องทั่วไป
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: การเขียน VBA ทั่วไป

#2

Post by yodpao.b »

Code: Select all

MsgBox "เพิ่มข้อมูลเรียบร้อยแล้ว", vbExclamation, "ฐานข้อมูลบุคคล"
จากโคด้ด้านบน 1.ถ้าเราต้องการให้ Textbox มาต่อท้าย "เพิ่มข้อมูลเรียบร้อยแล้ว" ต้องเขียนอย่างไร
2.ถ้าเราต้องการให้ ข้อความใน excle มาต่อท้าย "เพิ่มข้อมูลเรียบร้อยแล้ว" ต้องเขียนอย่างไร
ที่ต้องการทำแบบนี้เพราะว่า ข้อความนั้นเปลี่ยนไปเรื่อย
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน VBA ทั่วไป

#3

Post by snasui »

yodpao.b wrote:

Code: Select all

MsgBox "เพิ่มข้อมูลเรียบร้อยแล้ว", vbExclamation, "ฐานข้อมูลบุคคล"
ปรับ Code เป็น

Code: Select all

MsgBox "เพิ่มข้อมูลเรียบร้อยแล้ว " & Range("A1"), vbExclamation, "ฐานข้อมูลบุคคล"
เมื่อ A1 เป็นข้อความใด ๆ ที่ต้องการนำมาแสดงใน MsgBox
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: การเขียน VBA ทั่วไป

#4

Post by yodpao.b »

และต้องบอกหน้าไหม ถ้าบอกต้องเขียนอย่างไร
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน VBA ทั่วไป

#5

Post by snasui »

yodpao.b wrote:และต้องบอกหน้าไหม ถ้าบอกต้องเขียนอย่างไร
:aru: :?: :?: :?:
คืออะไรครับ ช่วยขยายความด้วยครับ :roll:
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: การเขียน VBA ทั่วไป

#6

Post by yodpao.b »

Range("A1") อยู่ Sheet1
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน VBA ทั่วไป

#7

Post by snasui »

:twisted: ช่วยเขียนให้เพื่อน ๆ เข้าใจด้วยครับ

ยกตัวอย่างการตั้งคำถามเช่น หากต้องการการแสดงข้อความใน Sheet1 เซลล์ A1 มาต่อท้ายข้อความใน MsgBox จะต้องเขียน code อย่างไรครับ

อันนี้ผมเข้าใจว่าเพื่อน ๆ อ่านแล้วเข้าใจได้เลยไม่ต้องแปล ในกล่องข้อความเขียนได้ถึง 60,000 อักขระ ไม่ต้องกลัวว่าจะไม่พอที่จะอธิบายครับ :evil:

สำหรับคำถามนี้สามารถเขียน Code ได้ตามด้านล่างครับ

Code: Select all

MsgBox "เพิ่มข้อมูลเรียบร้อยแล้ว " & Sheets("Sheet1").Range("A1"), vbExclamation, "ฐานข้อมูลบุคคล"
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: การเขียน VBA ทั่วไป

#8

Post by yodpao.b »

Code: Select all

Sub MacroRefresh()
    Sheets("สรุปชั่วโมงล่วงเวลาประจำปี (1)").Select
    Call UnprotectSheets
    Sheets("สรุปชั่วโมงล่วงเวลาประจำปี (2)").Select
    Call UnprotectSheets
    
    Range("B10").Select
    ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
    Range("A2").Select
    
    Sheets("สรุปชั่วโมงล่วงเวลาประจำปี (1)").Select
    Call ProtectAllSheets
    Sheets("สรุปชั่วโมงล่วงเวลาประจำปี (2)").Select
    Call ProtectAllSheets
End Sub
จากโคดด้านบน
อาจาร์ยครับ ช่วยแก้โดคให้สั้นกว่านี้ได้ใหม่ครับ เช่นใช้ and
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน VBA ทั่วไป

#9

Post by snasui »

:lol: การทำงานกับชีทจำนวนมากไม่ควรที่จะทำไป Unprotect ไปแล้ว Protect กลับไปเรื่อย ๆ ลักษณะนี้ ควรจะ Loop เพื่อ Unprotect ทั้งหมดรวดเดียวและเมื่อทำงานเสร็จค่อย Loop เพื่อ Protect กลับเข้ามาใหม่

Code ที่ส่งมาถามก็ไม่ได้ยาวอะไรมากมาย ถ้าจะลบออกสามารถลบ Code ด้านล่างออกไปได้ครับ

Code: Select all

Range("B10").Select
Range("A2").Select
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: การเขียน VBA ทั่วไป

#10

Post by yodpao.b »

ครับผม
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: การเขียน VBA ทั่วไป

#11

Post by yodpao.b »

Untitled12.gif
Untitled12.gif (34.09 KiB) Viewed 69 times
เรียนถามอาจารย์ จากรูปด้านบน
ต้องการใส่ Password และจัดรูปแบบโดย ใช้รายงาน Pivot table
ผมได้ทดลองทำโดยใช้มาโครเขียนได้ code ดังด้านล่าง

Code: Select all

    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowUsingPivotTables:=True
ผลที่ได้คือ เวลายกเลิกการป้องกันมันสั่งยกเลิกทันที โดยไม่ต้องใส่ Password

ผมได้ทดลองทำใหม่โดยใช้ Code ดังนี้

Code: Select all

    ActiveSheet.Protect PassWord:="123"
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowUsingPivotTables:=True
ผลที่ได้เหมือนเดิม คือ เวลายกเลิกการป้องกันมันสั่งยกเลิกทันที โดยไม่ต้องใส่ Password

คำถามต้องการให้ ใส่ Password และจัดรูปแบบโดย ใช้รายงาน Pivot table
รบกวนอาจารยช่วยแก้ไขให้ด้วยครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การเขียน VBA ทั่วไป

#12

Post by snasui »

:D จาก Code
yodpao.b wrote:

Code: Select all

ActiveSheet.Protect PassWord:="123"
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowUsingPivotTables:=True
ลองปรับเป็นตามด้านล่างครับ

Code: Select all

ActiveSheet.Protect PassWord:="123", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowUsingPivotTables:=True
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: การเขียน VBA ทั่วไป

#13

Post by yodpao.b »

ขอบคุณครับ
Post Reply