แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Mr. J (^J^)

หน้า: [1]
1
ใช้วิธีการซ่อน Control ต่างๆ ที่อยู่ในแต่ละ Area ของฟอร์มดูนะครับ  วิธีง่ายๆ ตามด้านล่างนี้ครับ
==================================================
เพิ่มปุ่ม Command เข้าไปในฟอร์ม 4 ปุ่ม
Name:    cmdShowAll  |  cmdShowA1 | cmdShowA2   |  cmdShowA3
Caption:  [Show All]    |   [Show #1]  |  [Show #2]    |   [Show #3]

และที่ Control แต่ตัว เฉพาะใน Area 1, 2 และ 3 ให้ระบายรวบ ทุกๆ Control ใน Area นั้นๆ
     แล้วเปลี่ยน Properties ที่ชื่อว่า tag เป็นตัวเลข 1, 2 และ 3 ตามแต่ละ Area
     ส่วน Control อื่นๆ ที่ต้องพิมพ์ทุกๆครั้ง ไม่ต้องระบุครับ
เมื่อคลิกปุ่มหนึ่งปุ่มใดใน 4 ปุ่ม นี้ จะทำการซ่อน/แสดง Control ตาม Area
หลังจากที่ซ่อนแล้ว สามารถสั่งพิมพ์ฟอร์มได้ต่างต้องการครับ
----------------------------------------------------------------------------------------

Option Compare Database
Option Explicit


Sub ShowForm(Optional ShowArea As Byte = 0)
   'ซ่อน/แสดง Control
   Dim ctl As Control
   Dim ShowMe As Boolean
   
   'ShowArea = 0 is Show All
   
   'ย้ายโฟกัสมาที่ Control ตัวอื่นก่อน กัน Error ขณะซ่อน Control ที่โฟกัสอยู่
   txtDATE.Tag = ""
   txtDATE.SetFocus
   'วนซ่อน Control
   For Each ctl In Me.Controls
        If ShowArea = 0 Or ctl.Tag = "" Or ctl.Tag = ShowArea Then
           'Show All | Show for No Tag | Show for Matching Area
           ctl.Visible = True
        Else
           ctl.Visible = Fase
        End If
       
   Next ctl
   
   'ซ่อนปุ่มคำสั่ง Show ต่างๆ
   cmdShowAll.Visible = False
   cmdShowA1.Visible = False
   cmdShowA2.Visible = False
   cmdShowA3.Visible = False
   '4 ปุ่มนี้ แสดงเมื่อ Form_load หรือ Detail_DblClick
End Sub

Private Sub cmdShowAll_Click()
   ShowForm
End Sub

Private Sub cmdShowA1_Click()
  Call ShowForm(1)
End Sub

Private Sub cmdShowA2_Click()
  Call ShowForm(2)
End Sub

Private Sub cmdShowA3_Click()
  Call ShowForm(3)
End Sub


Private Sub Detail_DblClick(Cancel As Integer)
   'คลิกๆ ที่ว่าง (Form Detail) เพื่อแสดงปุ่มที่ซ่อนไป
   cmdShowAll.Visible = True
   cmdShowA1.Visible = True
   cmdShowA2.Visible = True
   cmdShowA3.Visible = True
End Sub

----------------------------------------------------------------------------------------


ลองปรับใช้ดูนะครับ
ูู๋^J^
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

2
ลองดูครับ เขียนแบบลูกทุ่งและรวบรัดครับ

ที่ Sheet นั้นๆ
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$A$1" Then ' $A$1 ตำแหน่งที่ต้องการดัก
       If Len(Target) > 4 Then   'มากกว่า 4 ตัวอักษร
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       "ระบุได้แค่ 4 ตัวอักษร", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
           Exit Sub
       End If
       
       If Not isNumEN(Target.Value) Then
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       " ระบุได้แค่ ตัวเลข และตัวภาษาอังกฤษ(พิมพ์เล็กหรือพิมพ์ใหญ่ก็ได้)", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
       End If
   End If
End Sub


ที่ Module หรือในชิตนั้นๆ ถ้าใช้แค่ชีตเดียว
Function isNumEN(xTarget As String) As Boolean
   Dim i As Long
   Dim j As Long
   Dim x As String
   Dim isOk As Boolean
   
   isOk = True
   j = Len(xTarget)
   For i = 1 To j
        x = Mid(xTarget, i, 1)
        If (Asc(x) >= 48 And Asc(x) <= 57) Or _
           (Asc(x) >= 65 And Asc(x) <= 90) Or _
           (Asc(x) >= 97 And Asc(x) <= 122) Then
           '  48=0  57=9
           '  65=A  90=Z
           '  97=a  122=z
        Else
            isOk = False
            Exit For  'เจอไม่ใช่ ให้ออกมาเลย
        End If
   Next i
   isNumEN = isOk
End Function

โพสต์นี้ได้รับคำขอบคุณจาก: taeclubz

3
ขั้นตอนตามรูปครับ


^J^
โพสต์นี้ได้รับคำขอบคุณจาก: nithipan

หน้า: [1]