PDA

View Full Version : วิธี ทำให้ กากบาท ที่ user form หายไป ทำอย่างไรครับ



zv735
1 Jun 2007, 21:33
1. วิธี ทำให้ กากบาท ที่ user form หายไป ทำอย่างไรครับ
2. และวิธีทำให้ Manu ทั้งหมด ใน Excell หายไปให้หมด หรือเหลือน้อยที่สุดควร Set อย่างไรครับผม คือผมอยากให้ user ใช้งานจาก Form ที่ผมทำขึ้นมาอย่างเดียวครับผม
ตอนนี้ผมใช้


Application.CommandBars(1).Enabled = False
Application.WindowState = xlMinimized
Application.ScreenUpdating = False
Application.WindowState = xlNormal


ขอบคุณมากมากครับ

zv735
5 Jun 2007, 00:52
ทำให้มันหายไปไม่ได้แต่ทำให้ กด แล้วไม่เกิดอะไรขึ้นได้ครับ
ใช้ Code นี้ครับ
ขอบคุณมากมากครับผม



Private Sub Userform_QueryClose(Cancel As Integer, closemode As Integer)

If closemode = vbFormControlMenu Then Cancel = True

End Sub

zv735
5 Jun 2007, 10:56
ทำให้มันหายไปไม่ได้แต่ทำให้ กด ไม่ได้ครับ( Disable)
ใช้ Code นี้ครับ
ผมไม่เข้าใจนะครับ ลอกมาจาก Api-Guide ที่อาจารย์อรวีร์แนะนำครับ
ผม ยกเลิก ไปหลายบรรทัด ก็ยังทำงานได้อยู่
เลยไม่รู้ว่าแต่ละบรรทัดหมายความว่าอะไร

รบกวนผู้รู้ แนะนำด้วยนะครับ
จะได้ประยุกต์ใช้ได้ในโอกาศต่อไปครับ
ขอบคุณมากมากครับผม



Private Declare Function GetSystemMenu Lib "user32" (ByVal Hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal Hwnd As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Const MF_BYPOSITION = &H400&
Const MF_REMOVE = &H1000&

Private Sub UserForm_Initialize()
Dim hSysMenu As Long, nCnt As Long
Dim Hwnd As Long
' Get handle to our form's system menu
' (Restore, Maximize, Move, close etc.)
Hwnd = FindWindow("ThunderDFrame", "UserForm2")
hSysMenu = GetSystemMenu(Hwnd, False)
'If hSysMenu Then
'Get System menu's menu count
nCnt = GetMenuItemCount(hSysMenu)
' If nCnt Then
' Menu count is based on 0 (0, 1, 2, 3...)
RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE
'RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE ' Remove the seperator
'DrawMenuBar lHwnd
' Force caption bar's refresh. Disabling X button
' Me.Caption = "Try to close me!"
' End If
'End If

อรวีร์
5 Jun 2007, 14:39
API-Guide ไม่ใช่ของอรวีร์ค่ะ

การใช้ Windows API ควรใช้ด้วยความระมัดระวัง เพราะเข้าไปเกี่ยวข้อง-ควบคุม ทรัพยากรของระบบ Windows
ค่อยๆศึกษาทดลองค่ะ

zv735
5 Jun 2007, 14:59
ขอบคุณอาจารย์อรวีร์มากครับ

มิตรภาพ
21 Jun 2007, 19:47
ผมทดลองหาวิธีต่างๆดู ในการที่จะไม่แสดง X ตรงมุมขวาของ Box ต่างๆ ปรากฏว่าหากใช้ของมาตรฐานที่มีมา จะทำไม่ได้ครับ
แต่ถ้าไม่ใช้ของมาตรฐาน แต่เราวาดขึ้นมาเอง จากบรรดาเส้น, กล่อง หรือรูปวาดต่างๆ หรืออาจจะ PrintScreen มาจาก MessageBox มาตรฐาน แล้วเลือกวางรูปภาพเข้าไป(เหมือนตัวอย่างที่ผมทำมา) ซึ่งเราสามารถทำเลียนแบบหน้าตาของ Message มาตรฐานได้ไม่ยาก โดยที่ไม่มี X ด้วยครับ

โค้ดที่สำคัญคือตรงนี้ครับ

ActiveSheet.Shapes("MessageNoX").Visible = True

"MessageNoX" ก็คือชื่อของ Object ที่เราวาดหรือสร้างขึ้นมา สามารถใช้ชื่อมาตรฐาน หรือตั้งชื่อใหม่ก็ได้ครับ

โค้ดที่ผมลองทำในไฟล์ตัวอย่างครับ

Sub ShowMessage()
ActiveSheet.Shapes("MessageNoX").Visible = True
ActiveSheet.Shapes("Group 1").Visible = False
ActiveSheet.Shapes("AutoShape 1").Visible = True
End Sub

Sub HideMessage()
ActiveSheet.Shapes("MessageNoX").Visible = False
ActiveSheet.Shapes("Group 1").Visible = True
ActiveSheet.Shapes("AutoShape 1").Visible = False
End Sub

Sub Macro01()
MsgBox "OK Clicked..."
End Sub

Sub Macro02()
MsgBox "Cancel Clicked..."
End Sub


http://upload.siamha.com/images/46902MessageNoX.jpg (http://upload.siamha.com/v.php?id=46902MessageNoX.jpg)

zv735
21 Jun 2007, 22:59
เป็นอีกวิธีที่น่าสนใจมากเลยครับ
ขอบคุณ คุณมิตรภาพ มากมากครับที่แนะนำวิธีดีดีให้ครับผม