• Mở Form bằng cách dùng Option Group như thế nào cho đúng
  • Mở Form bằng cách dùng Option Group như thế nào cho đúng

    Đình Phán > 11-06-21, 07:15 PM

    https://drive.google.com/file/d/1Xih4aiv...sp=sharing

    Chỗ này không liên quan đến chủ đề SQL lắm, em xin phép gửi vào đây để tiện theo dõi

    Như trong file mẫu này của em.
    Phần Group Options của Access em không thấy giống của Excel.
    Em muốn với mỗi lựa chọn, sau đó bấm Start thì hiện lên 1 form

    Mã:
    Sub ShowFormReport()
    'Chon cac Option de len bao cao
    Select Case MyFrame
        Case optBalanceSheet
            DoCmd.OpenForm "tblMappingAccount", acFormDS
        Case optCashFlow
            DoCmd.OpenForm "tblMappingAccount", acFormDS
        Case optProfitAndLoss
            DoCmd.OpenForm "F_Q_CashFlow", acFormDS
        Case optProfitAndLoss
            DoCmd.OpenForm "F_Q_CashFlow", acFormDS
        Case optProfitAndLoss
            DoCmd.OpenForm "F_Q_CashFlow", acFormDS
        Case optOther
            DoCmd.OpenForm "F_Q_CashFlow", acFormDS
    End Select

    End Sub

    Em đã thay tên Fram thành MyFarm rồi ạ
    Em đã dùng code này, và sự kiện Button_Click để gọi thủ tục này lên nhưng Access chỉ lên được form đầu tiên.

    Cảm ơn các anh.
  • RE: Mở Form bằng cách dùng Option Group như thế nào cho đúng

    Xuân Thanh > 11-06-21, 07:48 PM

    Tôi chuyển bài viết này về mục mới để chủ thớt và mọi người theo dõi giúp đỡ tránh chồng chéo lên chủ đề cũ
  • RE: Mở Form bằng cách dùng Option Group như thế nào cho đúng

    Xuân Thanh > 11-06-21, 07:56 PM

    1/ Excel và Access là hai cái hoàn toàn khác nhau, nếu không ông Microsof tách ra làm gì
    2/ Sử dụng Option Group trong Access phải căn cứ vào giá trị định danh của mỗi Option mà gán lệnh

    Case 1
    ....Lệnh
    Caser 2
    ...Lệnh

    ....

    3/ Nếu đặt tên cho Option thì phải gọi đích danh Tên của Option đó. Code của bạn chỉ gọi tên một Option thì bảo sao Acces chỉ thực thi một lệnh
  • RE: Mở Form bằng cách dùng Option Group như thế nào cho đúng

    tranthanhan1962 > 11-06-21, 11:02 PM

    Lệnh mở form trên access là DoCmd.OpenForm ..., còn mở bằng cái gì (control), hay mở khi nào (event) thì đưa event của control đó. Lệnh DoCmd.OpenForm trên access tương đương lệnh Form.Show của excel, nhưng nó có nhiều option hơn. Số lượng loại control của access cũng nhiều hơn excel. Nhưng nói chung về phương thức cũng không khác nhau.
    Có điều làm việc với access đụng chạm nhiều với VBA nên bạn cần nắm vững và xử dụng thuần thục cấu trúc if...then, select case..., for...next..., do...loop. Cũng như thiết đặt biến Dim, hằng Const.
    Ví vụ trong cái FormControl của CSDL Phannd của bạn thì cái Group Options của bạn có tên là Frame39, trong đó nó có các Option Button: optBalanceSheet, Cash Flow... Mỗi Option Button có 1 giá trị optBalanceSheet-Option Value = 1, optCashFlow-Option Value = 2... Khi option button nào được check thì Frame39 có giá trị bằng Option Value của option button đó
    Muốn ở mỗi giá trị thì khi btRunReport click mở 1 form có thể sử dụng nhiều cách:
    1/Dùng If thần thánh của excel
    Private Sub btRunReport_Click()
        If Frame39.Value = 1 Then
            DoCmd.OpenForm "Form1"
        Else
            If Frame39.Value = 2 Then
                DoCmd.OpenForm "Form2"
            Else
                If Frame39.Value = 3 Then
                    DoCmd.OpenForm "Form3"
                Else
                    ...
                End If
            End If
        End If
    End Sub

    2/ Do ở đây chỉ có duy nhất một dòng lệnh nên có thể xử lý đơn giàn hơn:
    Private Sub btRunReport_Click()
        If Frame39.Value = 1 Then DoCmd.OpenForm "Form1"
        If Frame39.Value = 2 Then DoCmd.OpenForm "Form2"
        If Frame39.Value = 3 Then DoCmd.OpenForm "Form3"
    End Sub

    3/Trường hợp nhiều dòng lệnh phương thức Select Case dễ quản lý hơn phương thức lồng nhiều cấu trúc if...then:
    Private Sub btRunReport_Click()
        Select Case Frame39
            Case 1
                DoCmd.OpenForm "Form1"
            Case 2
                DoCmd.OpenForm "Form2"
            Case 3
                ...
        End Select
    End Sub

    Đặt biệt trong VBA khi viết công thức thì If => IIf (2 chữ I), đoạn mã trên cũng có thể viết như sau:
    Private Sub btRunReport_Click()
    Dim TenForm As String
        Form.Name = IIf(Frame39.Value = 1, "Form1", IIf(Frame39.Value = 2, "Form2", "Form3"))
        DoCmd.OpenForm TenForm
    End Sub


    Nói chung khá nhiều cách để xử lý code VBA. Khi đã quen với nó rồi, có khi làm việc với nó có khi ít nhứt đầu hơn với excel  007
  • RE: Mở Form bằng cách dùng Option Group như thế nào cho đúng

    Đình Phán > 12-06-21, 09:15 AM

    (11-06-21, 11:02 PM)tranthanhan1962 Đã viết: Lệnh mở form trên access là DoCmd.OpenForm ..., còn mở bằng cái gì (control), hay mở khi nào (event) thì đưa event của control đó. Lệnh DoCmd.OpenForm trên access tương đương lệnh Form.Show của excel, nhưng nó có nhiều option hơn. Số lượng loại control của access cũng nhiều hơn excel. Nhưng nói chung về phương thức cũng không khác nhau.

    Có điều làm việc với access đụng chạm nhiều với VBA nên bạn cần nắm vững và xử dụng thuần thục cấu trúc if...then, select case..., for...next..., do...loop. Cũng như thiết đặt biến Dim, hằng Const.

    Ví vụ trong cái FormControl của CSDL Phannd của bạn thì cái Group Options của bạn có tên là Frame39, trong đó nó có các Option Button: optBalanceSheet, Cash Flow... Mỗi Option Button có 1 giá trị optBalanceSheet-Option Value = 1, optCashFlow-Option Value = 2... Khi option button nào được check thì Frame39 có giá trị bằng Option Value của option button đó

    Muốn ở mỗi giá trị thì khi btRunReport click mở 1 form có thể sử dụng nhiều cách:

    1/Dùng If thần thánh của excel

    Private Sub btRunReport_Click()

        If Frame39.Value = 1 Then

            DoCmd.OpenForm "Form1"

        Else

            If Frame39.Value = 2 Then

                DoCmd.OpenForm "Form2"

            Else

                If Frame39.Value = 3 Then

                    DoCmd.OpenForm "Form3"

                Else

                    ...

                End If

            End If

        End If

    End Sub



    2/ Do ở đây chỉ có duy nhất một dòng lệnh nên có thể xử lý đơn giàn hơn:

    Private Sub btRunReport_Click()

        If Frame39.Value = 1 Then DoCmd.OpenForm "Form1"

        If Frame39.Value = 2 Then DoCmd.OpenForm "Form2"

        If Frame39.Value = 3 Then DoCmd.OpenForm "Form3"

    End Sub



    3/Trường hợp nhiều dòng lệnh phương thức Select Case dễ quản lý hơn phương thức lồng nhiều cấu trúc if...then:

    Private Sub btRunReport_Click()

        Select Case Frame39

            Case 1

                DoCmd.OpenForm "Form1"

            Case 2

                DoCmd.OpenForm "Form2"

            Case 3

                ...

        End Select

    End Sub



    Đặt biệt trong VBA khi viết công thức thì If => IIf (2 chữ I), đoạn mã trên cũng có thể viết như sau:

    Private Sub btRunReport_Click()

    Dim TenForm As String

        Form.Name = IIf(Frame39.Value = 1, "Form1", IIf(Frame39.Value = 2, "Form2", "Form3"))

        DoCmd.OpenForm TenForm

    End Sub




    Nói chung khá nhiều cách để xử lý code VBA. Khi đã quen với nó rồi, có khi làm việc với nó có khi ít nhứt đầu hơn với excel  007


    Cháu đã hiểu ra vấn đề rồi ạ. Cả 3 cách mà Chú hướng dẫn cháu đã thử. Cái sai của cháu là để Sub ShowFormReport tại module, sau đó Sub btRunReport_Click() để gọi Sub ShowFormReport() lên, vì vậy không được. Cháu đã copy luôn đoạn code vào Sub btRunReport_Click() thì đã được rồi. Cháu cảm ơn Chú rất nhiều!