Page 2 of 3

Re: เมนูบาร์

Posted: Tue Oct 11, 2011 5:40 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Application.CommandBars("Worksheet Menu Bar").Enabled= False

Re: เมนูบาร์

Posted: Wed Oct 12, 2011 12:13 pm
by yodpao.b

Code: Select all

Private Sub Workbook_Open()
    Application.CommandBars("Standard").Visible = False
    Application.CommandBars("Formatting").Visible = False
    Application.DisplayFormulaBar = False
    Application.CommandBars("àÁ¹Ù¹Õéãªé¡Ñºâ»Ãá¡ÃÁ¨Ñ´¡Òðҹ¢éÍÁÙŤèÒÅèǧàÇÅÒ").Visible = True
    Application.CommandBars("Worksheet Menu Bar").Enabled = False
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Worksheet Menu Bar").Enabled = True
    Application.CommandBars("Standard").Visible = True
    Application.CommandBars("Formatting").Visible = True
    Application.DisplayFormulaBar = True
    Application.CommandBars("àÁ¹Ù¹Õéãªé¡Ñºâ»Ãá¡ÃÁ¨Ñ´¡Òðҹ¢éÍÁÙŤèÒÅèǧàÇÅÒ").Visible = False
End Sub
จาก Code ด้านบน ลองทำไฟล์ตัวอย่างดู เมื่อสั่งปิดไฟล์ โปรแกรมจะคืนค่าเดิม
หลังจากนั้นลองเปิด Excel new book จะเห็นว่าทุกอย่างขึ้นเป็นปกติเหมือนเดิม

:?: แต่เมื่อลองนำไปใช้กับไฟล์จริงมีปัญหาตรงที่
เมื่อเปิด ปิด โปรแกรม ก็เป็นปกติ แต่พอ
เปิด Excel new book จะเห็นว่า code ด้านล่างไม่ทำงาน

Code: Select all

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Worksheet Menu Bar").Enabled = True
    Application.CommandBars("Standard").Visible = True
    Application.CommandBars("Formatting").Visible = True
    Application.DisplayFormulaBar = True
    Application.CommandBars("àÁ¹Ù¹Õéãªé¡Ñºâ»Ãá¡ÃÁ¨Ñ´¡Òðҹ¢éÍÁÙŤèÒÅèǧàÇÅÒ").Visible = False
End Sub
:flw: มันแปลกที่ไฟลตัวอย่างทำงานได้ตรงเป้าหมาย
แต่ไฟล์จริงกับเกิดปัญหา
ทั้งนี้ได้แนบไฟล์มาให้อาจารย์ช่วยดู

Re: เมนูบาร์

Posted: Wed Oct 12, 2011 12:25 pm
by snasui
yodpao.b wrote: แต่เมื่อลองนำไปใช้กับไฟล์จริงมีปัญหาตรงที่
เมื่อเปิด ปิด โปรแกรม ก็เป็นปกติ แต่พอ
เปิด Excel new book จะเห็นว่า code ด้านล่างไม่ทำงาน

โค้ด: เลือกทั้งหมด
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Worksheet Menu Bar").Enabled = True
    Application.CommandBars("Standard").Visible = True
    Application.CommandBars("Formatting").Visible = True
    Application.DisplayFormulaBar = True
    Application.CommandBars("àÁ¹Ù¹Õéãªé¡Ñºâ»Ãá¡ÃÁ¨Ñ´¡Òðҹ¢éÍÁÙŤèÒÅèǧàÇÅÒ").Visible = False
End Sub
:shock: Code ไม่ทำงานก็เป็นสิ่งที่ถูกต้องแล้วครับ เพราะ Code ด้านบนเราสั่งให้ทำงานตอนปิดไฟล์ ไม่ได้สั่งให้ทำงานเมื่อเปิดไฟล์

Re: เมนูบาร์

Posted: Wed Oct 12, 2011 1:35 pm
by yodpao.b
ไม่เข้าใจครับอาจารย์
จุดประสงค์คือ
-เมื่อเปิดไฟล์ OT_New เมนูจะหายไปหมดจะเหลือแต่เมนูที่เขียนขึ้นเมนูเดียว OK
-เมื่อปิดไฟล์ OT_New เมนูที่เคยลบจะต้องแสดงออกมา ไม่เห็นผลลัพธ์เนื่องจากโปรแกรมปิด
แต่สามารถตรวจเช็คได้จาก การเปิดโปรแกรม Excle แล้ว new file ขึ้นมาใหม่
ถ้าถูกต้องเมนูต้องอยู่ครบ แต่ที่ผมทำเมนูมันไม่ครบ

แต่ถ้าเป็นไฟลชื่อ เมนู หลังจากเปิดและปิดไฟล์เมนู ผลลัพธ์ที่ได้ Ok
กล่าวคือเมื่อ New file ขึ้นมาใหม่เมนูก็จะขึ้นมาครบครับ

Re: เมนูบาร์

Posted: Wed Oct 12, 2011 2:00 pm
by snasui
:D สิ่งที่อธิบายมานั้นผมพอเข้าใจครับ

Clear กันทีละเรื่องถ้าอธิบายมาผิดก็อธิบายมาใหม่นะครับ

คำสั่งด้านบน
snasui wrote:แต่พอ
เปิด Excel new book จะเห็นว่า code ด้านล่างไม่ทำงาน
และ Code ที่ต้องการให้ทำงานคือ :ard:
yodpao.b wrote:โค้ด: เลือกทั้งหมด
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Worksheet Menu Bar").Enabled = True
    Application.CommandBars("Standard").Visible = True
    Application.CommandBars("Formatting").Visible = True
    Application.DisplayFormulaBar = True
    Application.CommandBars("àÁ¹Ù¹Õéãªé¡Ñºâ»Ãá¡ÃÁ¨Ñ´¡Òðҹ¢éÍÁÙŤèÒÅèǧàÇÅÒ").Visible = False
End Sub
:shock: ผมจึงบอกว่า Code ไม่ทำงานก็ถูกต้องแล้ว เพราะเป็น Code ที่สั่งให้ทำงานเมื่อปิดไฟล์ ไม่ใช่สั่งให้ทำงานตอนเปิดไฟล์ ตรงนี้ไม่ทราบเข้าใจว่าอย่างไรครับ :?:

Re: เมนูบาร์

Posted: Wed Oct 12, 2011 3:35 pm
by yodpao.b
ที่ผมเข้าใจนะครับคือ
ก่อนที่จะปิดไฟล์ให้โชว์ Worksheet Menu Bar , CommandBars Standard , CommandBars Formatting , DisplayFormulaBar
และไม่โชว์ CommandBars ที่เขียนขึ้นเอง แล้วจึงปิดไฟล์ได้

สิ่งที่สงสัย
-หลังจากปิดไฟล์แล้ว ผมลองคลิ๊ก " icon โปรแกรม Excle " มันควรจะขึ้น Worksheet Menu Bar , CommandBars Standard , CommandBars Formatting , DisplayFormulaBar
โชว์ ด้วย เพราะเราสั่งให้มันทำแล้วตอนปิดไฟล์
- " icon โปรแกรม Excle " หมายถึงไปที่ปุ่ม star แล้วไปที่ ไมโครซอร์ออฟฟิต เพื่อเรียกสมุดงานใหม่ขึ้นมา เมนูบาร์มาตราฐานควรจะขึ้นมาแสดงให้เห็น

Re: เมนูบาร์

Posted: Wed Oct 12, 2011 5:18 pm
by snasui
:lol: เท่าที่ดู Code ไม่ทำงานในตอนสั่งปิดไฟล์ครับ ส่วนสาเหตุยังไม่เจอเช่นกันครับ

การอธิบายช่วยไล่ลำดับมาให้ชัดด้วยนะครับจะได้ไม่เสียเวลา ไม่เช่นนั้นผมก็เข้าใจว่าทำผิดขั้นตอน เมื่อผิดขั้นตอนก็ต้องบอกให้ทำให้ถูกขั้นตอนเสียก่อน

Code ที่เขียนควรจะคืนเมนูให้ตอนปิดไฟล์ แล้วค่อยปิดไฟล์ แม้จะเห็นว่ามันเกิดขึ้นพร้อมกันแต่มันมีลำดับการคืนเมนูมาให้ก่อน ปัญหานี้คือไม่คืนเมนูมาให้แต่ปิดไฟล์ไปเลย

Re: เมนูบาร์

Posted: Thu Oct 13, 2011 10:18 am
by yodpao.b
อาจารย์ช่วยลองทดสอบไฟล์นี้นะครับ
ผมได้ทดลองแล้วใช้ได้ หลังจากลองเปิด ปิด ไฟล์เมนูแล้ว
ผมลองเปิด icon โปรแกรม Excle ที่ปุ่ม star แล้วไปที่ ไมโครซอร์ออฟฟิต เพื่อเรียกสมุดงานใหม่ขึ้นมา เมนูบาร์มาตราฐานขึ้นมาแสดงให้เห็นตามปกติ
ที่คืนลัษณะที่ถูกต้อง ส่วนลัษณะที่ผิดจะส่งให้ฟภายหลัง

Code: Select all

Application.CommandBars("Worksheet Menu Bar").Enabled = True
และอีกคำถาม Code ตัวนี้ไว้สำหรับเรียกเมนูที่อยู่ด้านบนสุดใช่หรือไม่ครับ

Re: เมนูบาร์

Posted: Thu Oct 13, 2011 10:39 am
by snasui
yodpao.b wrote:โค้ด: เลือกทั้งหมดApplication.CommandBars("Worksheet Menu Bar").Enabled = Trueและอีกคำถาม Code ตัวนี้ไว้สำหรับเรียกเมนูที่อยู่ด้านบนสุดใช่หรือไม่ครับ
:D ใช่แล้วครับ เป็นการทำให้ Toolbar ที่เป็นเมนูแสดงขึ้นมาให้ใช้งานได้ครับ จะอยู่บนสุดหรือไม่แล้วแต่การจัดเรียง (เมนูสามารถย้ายได้ตามต้องการ) แต่ปกติจะอยู่ด้านบนสุด

Re: เมนูบาร์

Posted: Thu Oct 13, 2011 3:34 pm
by yodpao.b
อาจาร์ยได้แล้วครับผม
มันผิดที่ Code นี้
ความหมายของโค้ดนี้ คือ เมื่อเปิดโปรแกรมมา ให้ Run ตามคำสั่ง
code นี้จะทำงานใน ThisWorkbook

Private Sub UserForm_Initialize()
Application.EnableEvents = False
Application.ScreenUpdating = False

ComboBox1 = Format(Date, "mmmm")
ComboBox3 = Format(Date, "yyyy") + 543

With ComboBox2
.AddItem 30
.AddItem 45
.AddItem 60
.AddItem 90
.AddItem 120
End With

Sheets("cal_1").Select
ComboBox2.Text = Range("B5").Text

End Sub
แต่ที่ผิดคือตัวอักษรสีแดง พอเอาออกก็ใช้ได้ อยากให้อาจารย์ช่วยอธิบายหน่อยครับว่าถ้ามี code ด้านล่างนี้มันผิดเพราะอะไร

Code: Select all

Application.EnableEvents = Fals

Re: เมนูบาร์

Posted: Thu Oct 13, 2011 4:59 pm
by snasui
:lol: ยินดีด้วยครับ
yodpao.b wrote:แต่ที่ผิดคือตัวอักษรสีแดง พอเอาออกก็ใช้ได้ อยากให้อาจารย์ช่วยอธิบายหน่อยครับว่าถ้ามี code ด้านล่างนี้มันผิดเพราะอะไรโค้ด Application.EnableEvents = False
:D จาก Code ด้านบนไม่ได้ผิดครับ แต่ไปกำหนดว่าเมื่อ Run Code ไม่ให้ Event ทำงาน ซึ่ง Code ที่เราสั่งให้คืนเมนูมาให้นั้นต้องใช้ผ่าน Event BeforeClose

ปกติแล้วเมื่อเราใช้

Code: Select all

Application.EnableEvents = False
ก่อน End Sub จะต้องกำหนดตามด้านล่างกลับเข้ามาด้วยครับ

Code: Select all

Application.EnableEvents = True

Re: เมนูบาร์

Posted: Wed Oct 19, 2011 9:51 am
by yodpao.b
untitled.GIF
จากรูปด้านบนอยากถามอาจาร์ยว่าสามารถทำให้ Save As เป็น Enable=Fase
เกือบลืมสำหรับคำตอบด้านบนที่ผ่านมาตรงกับความต้องการครับ

Re: เมนูบาร์

Posted: Wed Oct 19, 2011 9:57 am
by yodpao.b
ขอโพสถามอีกข้อนะครับ
ยกตัวอย่างเช่นคำสั่ง Copy เราสามารถเข้าไปดู Vba ที่อยู่ในโปรแกรมexcelได้ไหมครับ

Re: เมนูบาร์

Posted: Wed Oct 19, 2011 11:36 am
by snasui
:D การ Disable เมนู Save As ลองตามนี้ครับ

Code: Select all

Sub DisableSaveAs()
    Application.CommandBars("File") _
        .Controls(5).Enabled = True
End Sub
yodpao.b wrote:ขอโพสถามอีกข้อนะครับ
ยกตัวอย่างเช่นคำสั่ง Copy เราสามารถเข้าไปดู Vba ที่อยู่ในโปรแกรมexcelได้ไหมครับ
ปกติผมหาด้วยการ Loop ตามตัวอย่างด้านล่าง ลองประยุกต์ใช้ดูครับ

Code: Select all

Sub ControlFileItemNo()
    Dim i As Integer
    With Application.CommandBars("File")
        For i = 1 To .Controls.Count
             Cells(i, 1) = i
             Cells(i, 2) = .Controls(i).Caption
         Next i
     End With
End Sub

Re: เมนูบาร์

Posted: Wed Oct 19, 2011 12:35 pm
by yodpao.b
ขอบคุณครับ แจ๋วเลยครับ

Re: เมนูบาร์

Posted: Fri Oct 21, 2011 7:34 am
by yodpao.b

Code: Select all

Sub DisableSaveAs()
    Application.CommandBars("File") _
        .Controls(5).Enabled = True
End Sub
จากด้านบนตอนนี้ผมรู้ที่มาทีไปของโคดด้านบนแล้วขอบคูณมากครับแต่อยาก
จะถามอาจารย์ว่าถ้าเราต้องการทราบว่าโคดที่เขียน " file " เขียนอย่างไร เราสามารถแอบเปิดดูโคดของ Excle ได้ไหม

Re: เมนูบาร์

Posted: Fri Oct 21, 2011 8:18 am
by snasui
:D ไม่เข้าใจครับ จะเปิดดู Code ที่ไหน โปรแกรม Excel ไม่ได้เปิดเผย Source Code จึงไม่สามารถดู Source Code ได้ ถ้าต้องการดู Object, Properties, Method ให้เข้าหน้าต่าง VBE แล้วกดแป้น F2 หากอยากทราบว่าแต่ละตัวทำงานอย่างไรให้คลิกที่ Code นั้นแล้วกดแป้น F1 เพื่อเปิด Help ครับ

Re: เมนูบาร์

Posted: Fri Oct 21, 2011 8:56 am
by yodpao.b
เข้าใจแล้วครับ

Re: เมนูบาร์

Posted: Fri Oct 21, 2011 11:22 am
by bank9597

Code: Select all

ไม่มีตัวอย่างครับและไม่เคยเห็นใครทำเช่นนั้นด้วยครับ
อาจารย์ครับ ถึงไม่มีใครทำแต่มันทำได้ใช่ไหมครับ

Re: เมนูบาร์

Posted: Fri Oct 21, 2011 11:41 am
by snasui
:D ผมคิดว่าทำได้ครับ ปกติ Excel จะมี Object ต่าง ๆ มาให้เรียบร้อยแล้ว เราไม่จำเป็นต้องสร้าง Object ตามหน้าตาที่เราต้องการขึ้นมาเองแต่อย่างใด นอกจากนี้เครื่องมือต่าง ๆ มี Properties, Method มาให้ใช้งานได้เลยไม่ต้องเสียเวลามาสร้างใหม่

นอกเหนือการเรียกใช้ Object ของ Excel เองซึ่งมีจำนวนมหาศาลมาใช้ได้แล้ว สามารถเขียนให้เรียกใช้ Object ของ Microsoft Office อื่น ๆ ขึ้นมาได้ด้วย ทั้งยังจะสามารถเรียกใช้ฟังก์ชั่นของ Windows (API Function หรือ Application Programming Interface Function) เป็นการเรียกใช้ Function, User Interface ฯลฯ ของ Windows มาใช้งานก็ย่อมทำได้

ดูตัวอย่างเพิ่มเติมที่นี่ครับ

:arrow: http://en.wikipedia.org/wiki/Windows_API
:arrow: http://www.ex-designz.net/api.asp