Page 1 of 1
สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Mon Oct 21, 2019 1:28 pm
by yodpao.b
Code: Select all
ActiveWorkbook.Worksheets("Return_status").ListObjects("Table9").Sort. _
SortFields.Clear
"Return_status" คือชื่อหน้าครับ
ผมอยากเปลี่ยนมาใช้ Sheet3 แทน "Return_status"
สาเหตุเพราะ อาจมีคนเปลี่ยนชื่อหน้า จะได้ไม่ส่งผลกระทบต่อ code ครับ
เขียนอย่างไรดี
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Mon Oct 21, 2019 8:00 pm
by puriwutpokin
ลองปรับเป็น
Code: Select all
Sheet1.Activate.ListObjects("Table9").Sort. _
SortFields.Clear
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Mon Oct 21, 2019 9:27 pm
by yodpao.b

- 3.JPG (51.71 KiB) Viewed 104 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
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Mon Oct 21, 2019 9:31 pm
by snasui

ลบ Activate ทิ้งไปครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Mon Oct 21, 2019 11:42 pm
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
ขอบตุณครับใช้ได้แล้วครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Mon Oct 21, 2019 11:47 pm
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 แทนได้ไหมครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Tue Oct 22, 2019 6:53 am
by snasui

ผมเข้าใจว่าหมายถึงใช้แทนตัวแปร sht ถ้าใช่ คำตอบคือใช้แทนได้ แต่ sheet1 จะต้องมีอยู่จริง เมื่อเราต้องการทำกับชีตเดียวและทราบอยู่แล้วว่าชีตชื่ออะไร เราจะไม่เขียนให้ Loop ครอบ ไม่เขียน Select Case ครอบ เพราะไม่จำเป็นที่จะต้องทำเช่นนั้นครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Tue Oct 22, 2019 6:44 pm
by yodpao.b
มีหลาย sheet ครับ

- 1.JPG (28.6 KiB) Viewed 88 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 แต่ไม่ทำงานครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Tue Oct 22, 2019 6:44 pm
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 แต่ไม่ทำงานครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Tue Oct 22, 2019 7:03 pm
by puriwutpokin
ต้องการ Protect ทุกชีทหรือเปล่าครับ หรือแค่บาง ชีทที่ต้องการ เพราะดูจากชื่อ Sub เหมือนจะต้องการ ทั้งหมด
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Tue Oct 22, 2019 8:08 pm
by snasui

จาก Statement
Select Case sht.Name คือชื่อแถบชีตที่เราเห็นด้วยสายตาที่ด้านล่างหน้าจอ สามารถคีย์แก้ ปรับเปลี่ยนได้ ที่เขียนมานั้นเป็น Code Name ไม่ใช่ชื่อชีตครับ
ดังนั้น ตาม Code ที่เขียนมาควรจะเป็น
Select Case sht.CodeName ครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Tue Oct 22, 2019 9:20 pm
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]
ไฟล์แนบตรับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Tue Oct 22, 2019 9:31 pm
by snasui

ชื่อ CodeName ของแต่ละชีตขึ้นต้นด้วยตัวใหญ่ เช่น Sheet1, Sheet2 เป็นต้น
ควรเปลี่ยนเป็น
ครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Tue Oct 22, 2019 9:54 pm
by yodpao.b
ชอบคุณครับ
แย่จริงๆ ปกติผมจะไม่ค่อยพิมพ์จะใช้วิธี copy
พมพ์เองเลยผิดเลย
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Wed Oct 23, 2019 9:55 am
by yodpao.b
ขอถามหน่อยครับ
Dim sht As Worksheet
โตดตัวนี้ไฟล์เก่าๆรู้สึกว่าจะไม่มี (ไม่แนใจครับ)
แต่ที่จำได้น้องที่ทำงานเพื่มขึ้นมาเนีื่องจากมีปัญหาบางอย่างกับบางเครื่อง
โดยปกติไม่มีก็ได้ใช่ไหมครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Wed Oct 23, 2019 10:14 am
by snasui

อันนี้ต้องตรวจสอบด้วยตนเองครับ
หลักการของการทำงานกับ Code ที่มีประสิทธิภาพประการหนึ่งที่สำคัญคือเราจะต้องประกาศตัวแปรเสมอ ถ้าไม่ประกาศตัวแปรจะทำให้เปลือง Memory
ผมพบว่าคุณ yodpao.b เขียนคำผิดบ่อยครั้งมากไม่ได้พลาดแค่เฉพาะโพสต์นี้เท่านั้น เช่น คำว่า Code เขียนว่า โค้ด ไม่ใช่ โตด หากยังไม่ตรวจคำผิดด้วยตนเอง ต่อไปนี้ผมจะบายสีคำผิดแล้วให้แก้ไขมาทุกรอบจนกว่าจะแก้ไขถูก จึงจะให้คำตอบนะครับ
Re: สามถาม code ที่ใช้แทนชื่อหน้าครับ
Posted: Wed Oct 23, 2019 11:19 am
by yodpao.b
ขอโทษครับ