Page 1 of 1

VBA ซ่อนปุ่มตามลำดับเหตุการณ์

Posted: Thu Jan 27, 2022 6:35 pm
by sakajohn
รบกวนสอบถามครับ ผมใช้ office 2010 ครับ
1.ต้องการให้ตอนเริ่มแรก แสดงแต่ปุ่ม รับงานเข้า ปุ่มเดียว
2. เมื่อใส่ค่า ในช่อง B3 ปุ่มรับงานเข้า หายไป แต่ปุ่ม เริ่มตรวจงานแสดงขึ้นมา
3. เมื่อใส่ค่า ในช่อง B4 ให้ปุ่มเริ่มตรวจงาน หายไป ปุ่มตรวจงานเสร็จ แสดงขึ้นมา
4. เมื่อใส่ค่า ในช่อง B5 ให้ปุ่มตรวจงานเสร็จ หายไป ปุ่มส่งงาน แสดงขึ้นมา
5. เมื่อใส่ค่า ในช่อง B6 ให้ปุ่มทุกปุ่ม หายไปครับ
6. เมื่อลบค่าทุกช่อง ให้ ปุ่มรับงานเข้า แสดงขึ้นมาครับ
ผมใช้ Code นี้ แต่ปุ่มมันไม่หายครับ ต้องปรับอย่างไรครับ

Code: Select all

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Set Target = Range("B2")

'รับงานเข้า
If Range("B3").Value = "" Then
Sheets("Sheet1").Shapes("rectangle 1").Visible = msoTrue
Else
  Sheets("Sheet1").Shapes("rectangle 1").Visible = msoFalse
End If


'เริ่มตรวจงาน
If Range("B3").Value <> "" Then
Sheets("Sheet1").Shapes("rectangle 2").Visible = msoTrue
Else
  Sheets("Sheet1").Shapes("rectangle 2").Visible = msoFalse
End If

'เสร็จงาน
If Range("B4").Value <> "" Then
Sheets("Sheet1").Shapes("rectangle 3").Visible = msoTrue
Else
  Sheets("Sheet1").Shapes("rectangle 3").Visible = msoFalse
End If

'ส่งงาน
If Range("B5").Value <> "" Then
Sheets("Sheet1").Shapes("rectangle 4").Visible = msoTrue
Else
  Sheets("Sheet1").Shapes("rectangle 4").Visible = msoFalse
End If
End Sub

Re: VBA ซ่อนปุ่มตามลำดับเหตุการณ์

Posted: Thu Jan 27, 2022 7:13 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Private Sub Workbook_Open()
    With Worksheets("Sheet1")
        .Shapes("Rectangle 1").Visible = True
        .Shapes("Rectangle 2").Visible = False
        .Shapes("Rectangle 3").Visible = False
        .Shapes("Rectangle 4").Visible = False
    End With
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Not Intersect(Target, Range("b3:b6")) Is Nothing Then
        
        If Application.CountIfs(Range("b3:b6"), "") = 4 Then
            With Worksheets("Sheet1")
                .Shapes("Rectangle 1").Visible = True
                .Shapes("Rectangle 2").Visible = False
                .Shapes("Rectangle 3").Visible = False
                .Shapes("Rectangle 4").Visible = False
            End With
            Exit Sub
        End If
        
        Select Case Target.Address(0, 0)
            Case "B3"
                'เริ่มตรวจงาน
                If Range("b3").Value <> "" Then
                    Sheets("Sheet1").Shapes("rectangle 2").Visible = True
                    Sheets("Sheet1").Shapes("rectangle 1").Visible = False
                End If
            Case "B4"
                'เสร็จงาน
                If Range("b4").Value <> "" Then
                    Sheets("Sheet1").Shapes("rectangle 3").Visible = True
                    Sheets("Sheet1").Shapes("rectangle 2").Visible = False
                End If
            Case "B5"
                'ส่งงาน
                If Range("b5").Value <> "" Then
                    Sheets("Sheet1").Shapes("rectangle 4").Visible = True
                    Sheets("Sheet1").Shapes("rectangle 3").Visible = False
                End If
            Case "B6"
                With Worksheets("Sheet1")
                    .Shapes("Rectangle 1").Visible = False
                    .Shapes("Rectangle 2").Visible = False
                    .Shapes("Rectangle 3").Visible = False
                    .Shapes("Rectangle 4").Visible = False
                End With
        End Select
    End If
End Sub

Re: VBA ซ่อนปุ่มตามลำดับเหตุการณ์

Posted: Fri Jan 28, 2022 9:46 am
by sakajohn
สอบถามเพิ่มเติมครับ
ถ้าที่ช่อง B3 ใส่เป็นสูตร เพื่อรับค่า จากช่อง I3 เช่น

B3 = if(I3="","",I3) เวลาใส่ค่าที่ I3 ปุ่มไม่หายไปครับ ต้องปรับสูตรตรงไหนครับ

Re: VBA ซ่อนปุ่มตามลำดับเหตุการณ์

Posted: Fri Jan 28, 2022 12:27 pm
by snasui
:D สามารถปรับ Code ที่อ้างอิงจากคอลัมน์ B เปลี่ยนไปอ้างอิงจากคอลัมน์ I แทนครับ