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

สามถาม code ที่ใช้แทนชื่อหน้าครับ

#1

Post by yodpao.b »

Code: Select all

    ActiveWorkbook.Worksheets("Return_status").ListObjects("Table9").Sort. _
        SortFields.Clear
"Return_status" คือชื่อหน้าครับ
ผมอยากเปลี่ยนมาใช้ Sheet3 แทน "Return_status"
สาเหตุเพราะ อาจมีคนเปลี่ยนชื่อหน้า จะได้ไม่ส่งผลกระทบต่อ code ครับ
เขียนอย่างไรดี
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#2

Post by puriwutpokin »

ลองปรับเป็น

Code: Select all

Sheet1.Activate.ListObjects("Table9").Sort. _
        SortFields.Clear
:shock: :roll: :D
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#3

Post by yodpao.b »

3.JPG
3.JPG (51.71 KiB) Viewed 93 times
ติดตรง Activate
เปลี่ยนเป็น ActiveWorkbook หรือ Active ก็ยัง eeror ครับ

Code: Select all

    Range("C6").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    'ActiveWorkbook.Worksheets("Return_status").ListObjects("Table9").Sort.SortFields.Clear
    Sheet3.Activate.ListObjects("Table9").Sort.SortFields.Clear 'แทนบรรทัดบนความหมายเหมือนกัน
    ActiveWorkbook.Worksheets("Return_status").ListObjects("Table9").Sort. _
        SortFields.Add Key:=Range("C6"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#4

Post by snasui »

:D ลบ Activate ทิ้งไปครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#5

Post by yodpao.b »

Code: Select all

    Range("C6").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
'    ActiveWorkbook.Worksheets("Return_status").ListObjects("Table9").Sort.SortFields.Clear
    Sheet3.ListObjects("Table9").Sort.SortFields.Clear  'á·¹ºÃ÷Ѵº¹¤ÇÒÁËÁÒÂàËÁ×͹¡Ñ¹
'    ActiveWorkbook.Worksheets("Return_status").ListObjects("Table9").Sort.SortFields.Add Key:=Range("C6"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    Sheet3.ListObjects("Table9").Sort.SortFields.Add Key:=Range("C6"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal   'á·¹ºÃ÷Ѵº¹¤ÇÒÁËÁÒÂàËÁ×͹¡Ñ¹
'    With ActiveWorkbook.Worksheets("Return_status").ListObjects("Table9").Sort
    With Sheet3.ListObjects("Table9").Sort    'á·¹ºÃ÷Ѵº¹¤ÇÒÁËÁÒÂàËÁ×͹¡Ñ¹
        .Header = xlYes
ขอบตุณครับใช้ได้แล้วครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#6

Post by yodpao.b »

Code: Select all

Sub ProtectAllsheets0()
    Dim sht As Worksheet
    For Each sht In Worksheets
          Select Case sht.Name
          
                Case "Form_ของบ", "Form_ตัดงบ"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                        AllowFormattingRows:=True
                        
                Case "table_ของบ", "table_ตัดงบ", "PV_1", "PV_2", "Chart_1", "cal_1"   ', "FormTable_โอนเงิน", "FormTable_ยืมเงิน", "Formtable_ชดใช้เงินยืม"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                        AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
                         
                Case "conclude1", "conclude2", "conclude3", "conclude4", "conclude5", "conclude11", "conclude12", "conclude13", "conclude14"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True
                        
                Case "Return_status"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
                        
        End Select
    Next sht
End Sub
และ code นี้ ครับใช้คำว่า sheet1 แทนได้ไหมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#7

Post by snasui »

:D ผมเข้าใจว่าหมายถึงใช้แทนตัวแปร sht ถ้าใช่ คำตอบคือใช้แทนได้ แต่ sheet1 จะต้องมีอยู่จริง เมื่อเราต้องการทำกับชีตเดียวและทราบอยู่แล้วว่าชีตชื่ออะไร เราจะไม่เขียนให้ Loop ครอบ ไม่เขียน Select Case ครอบ เพราะไม่จำเป็นที่จะต้องทำเช่นนั้นครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#8

Post by yodpao.b »

มีหลาย sheet ครับ
1.JPG
1.JPG (28.6 KiB) Viewed 77 times

Code: Select all

[code]Sub ProtectAllsheets011()
    Dim sht As Worksheet
    For Each sht In Worksheets
          Select Case sht.Name
          
                Case "sheet1", "sheet2"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                        AllowFormattingRows:=True
                        
                Case "sheet3", "sheet4", "sheet5", "sheet6", "sheet7"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                        AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
                         
                Case "sheet8", "sheet9", "sheet10", "sheet11", "sheet12"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True
                                                
        End Select
    Next sht
End Sub
[/code]
แก้แล้วครับ
ไม่ error แต่ไม่ทำงานครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#9

Post by yodpao.b »

มีหลาย sheet ครับ
1.JPG

Code: Select all

[code]Sub ProtectAllsheets011()
    Dim sht As Worksheet
    For Each sht In Worksheets
          Select Case sht.Name
          
                Case "sheet1", "sheet2"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                        AllowFormattingRows:=True
                        
                Case "sheet3", "sheet4", "sheet5", "sheet6", "sheet7"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                        AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
                         
                Case "sheet8", "sheet9", "sheet10", "sheet11", "sheet12"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True
                                                
        End Select
    Next sht
End Sub
[/code]
แก้แล้วครับ
ไม่ error แต่ไม่ทำงานครับ
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#10

Post by puriwutpokin »

ต้องการ Protect ทุกชีทหรือเปล่าครับ หรือแค่บาง ชีทที่ต้องการ เพราะดูจากชื่อ Sub เหมือนจะต้องการ ทั้งหมด
:shock: :roll: :D
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#11

Post by snasui »

:D จาก Statement Select Case sht.Name คือชื่อแถบชีตที่เราเห็นด้วยสายตาที่ด้านล่างหน้าจอ สามารถคีย์แก้ ปรับเปลี่ยนได้ ที่เขียนมานั้นเป็น Code Name ไม่ใช่ชื่อชีตครับ

ดังนั้น ตาม Code ที่เขียนมาควรจะเป็น Select Case sht.CodeName ครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#12

Post by yodpao.b »

แก้แล้วครับ Select Case sht.CodeName
ผลไม่มีอะไรเกิดขึ้น

Code: Select all

[code]Sub ProtectAllsheets011()
    Dim sht As Worksheet
    For Each sht In Worksheets
          'Select Case sht.Name
          Select Case sht.CodeName
          
                Case "sheet1", "sheet2"
                        sht.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True _
                        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                        AllowFormattingRows:=True
                        
        End Select
    Next sht
End Sub
[/code]
ไฟล์แนบตรับ
Attachments
test2.xlsm
(20.07 KiB) Downloaded 10 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#13

Post by snasui »

:D ชื่อ CodeName ของแต่ละชีตขึ้นต้นด้วยตัวใหญ่ เช่น Sheet1, Sheet2 เป็นต้น

Code: Select all

Case "sheet1", "sheet2"
ควรเปลี่ยนเป็น

Code: Select all

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

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#14

Post by yodpao.b »

ชอบคุณครับ
แย่จริงๆ ปกติผมจะไม่ค่อยพิมพ์จะใช้วิธี copy
พมพ์เองเลยผิดเลย
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#15

Post by yodpao.b »

ขอถามหน่อยครับ
Dim sht As Worksheet
โตดตัวนี้ไฟล์เก่าๆรู้สึกว่าจะไม่มี (ไม่แนใจครับ)
แต่ที่จำได้น้องที่ทำงานเพื่มขึ้นมาเนีื่องจากมีปัญหาบางอย่างกับบางเครื่อง

โดยปกติไม่มีก็ได้ใช่ไหมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#16

Post by snasui »

:D อันนี้ต้องตรวจสอบด้วยตนเองครับ

หลักการของการทำงานกับ Code ที่มีประสิทธิภาพประการหนึ่งที่สำคัญคือเราจะต้องประกาศตัวแปรเสมอ ถ้าไม่ประกาศตัวแปรจะทำให้เปลือง Memory

ผมพบว่าคุณ yodpao.b เขียนคำผิดบ่อยครั้งมากไม่ได้พลาดแค่เฉพาะโพสต์นี้เท่านั้น เช่น คำว่า Code เขียนว่า โค้ด ไม่ใช่ โตด หากยังไม่ตรวจคำผิดด้วยตนเอง ต่อไปนี้ผมจะบายสีคำผิดแล้วให้แก้ไขมาทุกรอบจนกว่าจะแก้ไขถูก จึงจะให้คำตอบนะครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ

#17

Post by yodpao.b »

ขอโทษครับ
Post Reply