-
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 -
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
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!