Đình Phán > 11-06-21, 07:15 PM
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
Xuân Thanh > 11-06-21, 07:48 PM
Xuân Thanh > 11-06-21, 07:56 PM
tranthanhan1962 > 11-06-21, 11:02 PM
Đì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