Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Hỏi cách đổi Font hàng loạt trên Form ?
#21
Giờ la lúc tự nghiên cứu tẹo Văn nhé. Thử xem sao...
Cứ chỗ nào có cái font name thì nghiên cứu.
Nếu Văn muốn textbox một font khác thì cần thêm một lệnh if nữa...
Thử đi xem nào. Tớ cũng từng học theo cách ý.
Ngọc

Bây giờ phân tích bài một chút nhé...
Form/Report có các điều khiển (control)
Nếu muốn truy cập vào các điều khiển của form/report thì dùng Forms([Tênform]).Controls/Reports([Tên report]).Controls
Nói khác hơn Form/Report là một đối tượng có các đối tượng con  - cái này người ta hay gọi là Collection (tập hợp) đối tượng không cùng kiểu.
Điều khiển thì có nhiều loại khác nhau. Muốn biết nói chung có các loại nào thì ta có thể dùng từ khóa TypeOf gõ thêm dấu cách trong màn hình soạn thảo VBA (cách củ chuối nhất).
(**) Toàn bộ kiểu các điều khiển của Access được định nghĩa trong Danh mục hàm AcControlType. Bạn chỉ cần nhấn F2 tại màn hình soạn thảo, gõ vào chữ AcControlType để tìm là thấy danh mục các kiểu điều khiển ở đó, nhấn vào một cái ví dụ acTextBox, bạm sẽ thấy nó hiện ở vùng định nghĩa cú pháp Const acTextBox = 109 (&H6D). Nói khác hơn, loại điều khiển TextBox trong Acess được quy định là hằng số có giá trị 109 (long)
Sơ sơ ta thấy danh sách một số như

Giờ tôi công khai vài điều khiển quan trọng như;
TextBox, CommandButton, Lable, ComboBox, ListBox, Frame, CheckBox, RadioButton ...vv
Có 2 cách kiểm tra loại điểu khiển
+ If TypeOf [Đối tượng] is TextBox = Nếu loại của đối tượng là TextBox.
Cách này chỉ dùng khi ta muốn trực tiếp truy cập đối tượng texbox
+ If [Đối tượng].Type=109 (xem chú thích ** ở trên).

Vậy túm lại, muốn biết quy định về điều khiển loại gì bạn có thể dùng cách như trong chú thích ở trên.
Còn nếu muốn biết ngay trong form của mình nó ra sao, bạn có thể dùng đoạn code sau.
Mã:
Sub PrintObjectType(frmObject as object)
   Dim myObj as control
   For each myObj in frmObject.Controls
      Debug.print myObj.Name + vbTab + "Type: " + myObj.Type
   Next
End Sub

Đặt cái này trong Module và bạn có thể gọi bất kỳ từ form hay report nào thông qua một nút bấm bằng cách gọi PrintObjectType Me

Hãy lưu ý, lệnh Debug.Print rất có giá trị đối với dân lập trình. Nó sẽ hiển thị kết quả trên Cửa sổ Inmmediate ngay dưới phần soạn thảo code. Nếu không hiển thị, nhấn Ctrl+G nhé.
Các bạn sẽ cần sử dụng màn hình Immediate Window này nhiều đấy. Ví dụ chỉ cần gõ Debug.print CurrentProject.Path nhấn Enter là bạn biết Ứng dụng của bạn ở thư mục nào.

Quay lại câu hỏi của bạn. Hãy coi là bài tập nhé - mai tớ giả nhời. Giờ đang viết trên ô tô nên không viết dài được...
Chúc bạn làm bài tập tốt.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn ledangvan , Minh Tiên
#22
(08-09-15, 08:00 PM)paulsteigel Đã viết: Giờ la lúc tự nghiên cứu tẹo Văn nhé. Thử xem sao...
Cứ chỗ nào có cái font name thì nghiên cứu.
Nếu Văn muốn textbox một font khác thì cần thêm một lệnh if nữa...
Thử đi xem nào. Tớ cũng từng học theo cách ý.
Ngọc

Bây giờ phân tích bài một chút nhé...
Form/Report có các điều khiển (control)
Nếu muốn truy cập vào các điều khiển của form/report thì dùng Forms([Tênform]).Controls/Reports([Tên report]).Controls
Nói khác hơn Form/Report là một đối tượng có các đối tượng con  - cái này người ta hay gọi là Collection (tập hợp) đối tượng không cùng kiểu.
Điều khiển thì có nhiều loại khác nhau. Muốn biết nói chung có các loại nào thì ta có thể dùng từ khóa TypeOf gõ thêm dấu cách trong màn hình soạn thảo VBA (cách củ chuối nhất).
(**) Toàn bộ kiểu các điều khiển của Access được định nghĩa trong Danh mục hàm AcControlType. Bạn chỉ cần nhấn F2 tại màn hình soạn thảo, gõ vào chữ AcControlType để tìm là thấy danh mục các kiểu điều khiển ở đó, nhấn vào một cái ví dụ acTextBox, bạm sẽ thấy nó hiện ở vùng định nghĩa cú pháp Const acTextBox = 109 (&H6D). Nói khác hơn, loại điều khiển TextBox trong Acess được quy định là hằng số có giá trị 109 (long)
Sơ sơ ta thấy danh sách một số như

Giờ tôi công khai vài điều khiển quan trọng như;
TextBox, CommandButton, Lable, ComboBox, ListBox, Frame, CheckBox, RadioButton ...vv
Có 2 cách kiểm tra loại điểu khiển
+ If TypeOf [Đối tượng] is TextBox = Nếu loại của đối tượng là TextBox.
Cách này chỉ dùng khi ta muốn trực tiếp truy cập đối tượng texbox
+ If [Đối tượng].Type=109 (xem chú thích ** ở trên).

Vậy túm lại, muốn biết quy định về điều khiển loại gì bạn có thể dùng cách như trong chú thích ở trên.
Còn nếu muốn biết ngay trong form của mình nó ra sao, bạn có thể dùng đoạn code sau.
Mã:
Sub PrintObjectType(frmObject as object)
   Dim myObj as control
   For each myObj in frmObject.Controls
      Debug.print myObj.Name + vbTab + "Type: " + myObj.Type
   Next
End Sub

Đặt cái này trong Module và bạn có thể gọi bất kỳ từ form hay report nào thông qua một nút bấm bằng cách gọi PrintObjectType Me

Hãy lưu ý, lệnh Debug.Print rất có giá trị đối với dân lập trình. Nó sẽ hiển thị kết quả trên Cửa sổ Inmmediate ngay dưới phần soạn thảo code. Nếu không hiển thị, nhấn Ctrl+G nhé.
Các bạn sẽ cần sử dụng màn hình Immediate Window này nhiều đấy. Ví dụ chỉ cần gõ Debug.print CurrentProject.Path nhấn Enter là bạn biết Ứng dụng của bạn ở thư mục nào.

Quay lại câu hỏi của bạn. Hãy coi là bài tập nhé - mai tớ giả nhời. Giờ đang viết trên ô tô nên không viết dài được...
Chúc bạn làm bài tập tốt.

Nó báo lỗi run-time error ... 
Nó báo lỗi ở dòng thứ 3 thế này bác ơi :
Mã PHP:
           If TypeOf CtrObj Is Label Or TypeOf CtrObj Is TextBox Then
               SqlStr 
"+I+NSERT I+N+TO tblCaption(ObjectID, MsgGroup, MsgID, MsgCapV) "
              [u][color=#ffcc66] SqlStr = SqlStr + "V+A+LUES('" + frmObj.Name + "',1,'" + CtrObj.Name + "','" + CtrObj.Caption + "');"[/color][/u]
               CurrentDb.Execute Replace(SqlStr"+""")
           End If 
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#23
(08-09-15, 10:37 PM)ledangvan Đã viết: ...

Văn phải đăng cả mã lỗi lên cơ.
Dưng mà quên. Các điều khiển có thuộc tính khác nhau vì thế không thể áp dụng chung được.
Ví như: Caption thì textbox không có mà chỉ Label, Button, Frame ... có.
Với textbox thì phải là text.

Với bài này thì Văn đọc kỹ bài của tớ rồi tự tìm hiểu thêm tí nữa - mai tớ giả nhời với một bài viết đầy đủ hơn.

Lỗi phát sinh là do bạn dùng sai Thuộc tính (property) hehe
Đoạn code sau để hiển thị các loại thuộc tính và giá trị của các đối tượng trên một form/Report chỉ cần gọi PrintProperty Me trong form là xong (nhớ thêm thủ tục PrintProperty và Module nhé)

Mã:
Sub PrintProperty(FrmObj As Object)
    Dim Ctrl As Control, prpBag As Property
    For Each Ctrl In FrmObj.Controls
        For Each prpBag In Ctrl.Properties
            Debug.Print prpBag.Name & vbTab & ": " & prpBag.Value
        Next
    Next
End Sub
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn maidinhdan , ledangvan , Minh Tiên
#24
(08-09-15, 10:56 PM)paulsteigel Đã viết:
(08-09-15, 10:37 PM)ledangvan Đã viết: ...

Văn phải đăng cả mã lỗi lên cơ.
Dưng mà quên. Các điều khiển có thuộc tính khác nhau vì thế không thể áp dụng chung được.
Ví như: Caption thì textbox không có mà chỉ Label, Button, Frame ... có.
Với textbox thì phải là text.

Với bài này thì Văn đọc kỹ bài của tớ rồi tự tìm hiểu thêm tí nữa - mai tớ giả nhời với một bài viết đầy đủ hơn.

Lỗi phát sinh là do bạn dùng sai Thuộc tính (property) hehe
Đoạn code sau để hiển thị các loại thuộc tính và giá trị của các đối tượng trên một form/Report chỉ cần gọi PrintProperty Me trong form là xong (nhớ thêm thủ tục PrintProperty và Module nhé)

Mã:
Sub PrintProperty(FrmObj As Object)
    Dim Ctrl As Control, prpBag As Property
    For Each Ctrl In FrmObj.Controls
        For Each prpBag In Ctrl.Properties
            Debug.Print prpBag.Name & vbTab & ": " & prpBag.Value
        Next
    Next
End Sub

Hì, học mót mà nghe paulsteigel nói nó mênh mông quá 015 , biết dư lày ngày xưa không học kinh tế nữa 018
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#25
Văn không nên hốt, tôi cũng học Ngoại thương ra mà. Có chăng có thể là do tôi đọc được tiếng Anh. Mà giờ cũng chả quan trọng, có công cụ google dịch thì cũng dễ hơn nhiều. Ngày trước, thày của tôi là phím F1.
Trở lại bài của Văn, tôi sửa thủ tục GetObjectCaption để nó đổi font chữ của textbox luôn nhé. Bạn nên theo dõi mã nguồn của thủ tục này và phân tích cấu trúc lệnh của nó. Đố bạn biết trong thủ tục này có một cái tôi nói là có tính năng đó mà Code lại không có?
Mã:
Option Compare Database
Option Explicit
Const AppLanguage = "V"
' Khai bao mot so thiet lap ve phong chu mac dinh cua Button va Textbox
Private Const DefaultFontTextbox = "Arial"
Private Const DefaultFontButton = "Tahoma"
Private Const DefaultFontSizeButton = 10

Sub GetObjectCaption()
    ' Thu tuc nay se lay caption cua cac dieu khien trong tat ca cac form/ report
    ' doi font chu cua textbox/ label, nut bam sang Tahoma hoac Arial hoac TimeNewRoman
    Dim FrmObj As Form, SqlStr As String, CtrObj As Control, i As Long
    ' Delete all current record at tblCaption form
    SqlStr = "+D+E+LETE * +F+ROM tblCaption Where ObjectId is not null;"
    CurrentDb.Execute Replace(SqlStr, "+", "")
    ' Mo tat ca cac Form/Report
    For i = 0 To CurrentProject.AllForms.Count - 1
        DoCmd.OpenForm CurrentProject.AllForms.Item(i).Name, acDesign, , , , acHidden
        Set FrmObj = Forms(CurrentProject.AllForms.Item(i).Name)
        For Each CtrObj In FrmObj.Controls
            If TypeOf CtrObj Is Label Or TypeOf CtrObj Is CommandButton Then
                SqlStr = "+I+NSERT I+N+TO tblCaption(ObjectID, MsgGroup, MsgID, MsgCapV) "
                SqlStr = SqlStr + "V+A+LUES('" + FrmObj.Name + "',1,'" + CtrObj.Name + "','" + CtrObj.Caption + "');"
                CurrentDb.Execute Replace(SqlStr, "+", "")
            ElseIf TypeOf CtrObj Is TextBox Then
                ' doi luon font chu cua textbox
                CtrObj.FontName = DefaultFontTextbox
            ElseIf TypeOf CtrObj Is ComboBox Or TypeOf CtrObj Is ListBox Then
                ' cua combo box hoac listbox nua nhe ... tat nhien con nhieu doi tuong khac nua
                CtrObj.FontName = DefaultFontButton
            End If
        Next
        ' Gio lay thiet lap tieu de cua form/ bao cao
        SqlStr = "I+N+SERT I+N+TO tblCaption(ObjectID, MsgGroup, MsgID, MsgCapV) "
        SqlStr = SqlStr + "V+A+LUES('" + FrmObj.Name + "',1,'FORM_OR_REPORT_NAME', '" + FrmObj.Caption + "')"
        CurrentDb.Execute Replace(SqlStr, "+", "")
        ' Luu lai ket qua acSaveYes= Luu lai, acSaveNo bang khong luu
        DoCmd.Close acForm, FrmObj.Name, acSaveYes
    Next
ExitMe:
End Sub
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn ledangvan
#26
(09-09-15, 02:48 PM)paulsteigel Đã viết: Văn không nên hốt, tôi cũng học Ngoại thương ra mà. Có chăng có thể là do tôi đọc được tiếng Anh. Mà giờ cũng chả quan trọng, có công cụ google dịch thì cũng dễ hơn nhiều. Ngày trước, thày của tôi là phím F1.
Trở lại bài của Văn, tôi sửa thủ tục GetObjectCaption để nó đổi font chữ của textbox luôn nhé. Bạn nên theo dõi mã nguồn của thủ tục này và phân tích cấu trúc lệnh của nó. Đố bạn biết trong thủ tục này có một cái tôi nói là có tính năng đó mà Code lại không có?
Mã:
Option Compare Database
Option Explicit
Const AppLanguage = "V"
' Khai bao mot so thiet lap ve phong chu mac dinh cua Button va Textbox
Private Const DefaultFontTextbox = "Arial"
Private Const DefaultFontButton = "Tahoma"
Private Const DefaultFontSizeButton = 10

Sub GetObjectCaption()
    ' Thu tuc nay se lay caption cua cac dieu khien trong tat ca cac form/ report
    ' doi font chu cua textbox/ label, nut bam sang Tahoma hoac Arial hoac TimeNewRoman
    Dim FrmObj As Form, SqlStr As String, CtrObj As Control, i As Long
    ' Delete all current record at tblCaption form
    SqlStr = "+D+E+LETE * +F+ROM tblCaption Where ObjectId is not null;"
    CurrentDb.Execute Replace(SqlStr, "+", "")
    ' Mo tat ca cac Form/Report
    For i = 0 To CurrentProject.AllForms.Count - 1
        DoCmd.OpenForm CurrentProject.AllForms.Item(i).Name, acDesign, , , , acHidden
        Set FrmObj = Forms(CurrentProject.AllForms.Item(i).Name)
        For Each CtrObj In FrmObj.Controls
            If TypeOf CtrObj Is Label Or TypeOf CtrObj Is CommandButton Then
                SqlStr = "+I+NSERT I+N+TO tblCaption(ObjectID, MsgGroup, MsgID, MsgCapV) "
                SqlStr = SqlStr + "V+A+LUES('" + FrmObj.Name + "',1,'" + CtrObj.Name + "','" + CtrObj.Caption + "');"
                CurrentDb.Execute Replace(SqlStr, "+", "")
            ElseIf TypeOf CtrObj Is TextBox Then
                ' doi luon font chu cua textbox
                CtrObj.FontName = DefaultFontTextbox
            ElseIf TypeOf CtrObj Is ComboBox Or TypeOf CtrObj Is ListBox Then
                ' cua combo box hoac listbox nua nhe ... tat nhien con nhieu doi tuong khac nua
                CtrObj.FontName = DefaultFontButton
            End If
        Next
        ' Gio lay thiet lap tieu de cua form/ bao cao
        SqlStr = "I+N+SERT I+N+TO tblCaption(ObjectID, MsgGroup, MsgID, MsgCapV) "
        SqlStr = SqlStr + "V+A+LUES('" + FrmObj.Name + "',1,'FORM_OR_REPORT_NAME', '" + FrmObj.Caption + "')"
        CurrentDb.Execute Replace(SqlStr, "+", "")
        ' Luu lai ket qua acSaveYes= Luu lai, acSaveNo bang khong luu
        DoCmd.Close acForm, FrmObj.Name, acSaveYes
    Next
ExitMe:
End Sub

Đoạn này hả bác : "nut bam sang Tahoma hoac Arial hoac TimeNewRoman" 021

Bác thêm cái đoạn này vào :      
                ElseIf TypeOf CtrObj Is TextBox Then
                CtrObj.FontName = DefaultFontTextbox
                ElseIf TypeOf CtrObj Is ComboBox Or TypeOf CtrObj Is ListBox Then
                CtrObj.FontName = DefaultFontButton
Em cũng hiểu nhưng đúng là không học nên biết là sẽ phải làm thế mà không biết phát biểu thế nào bằng ngôn ngữ lập trình 015 : Có thể dịch đoạn trên của bác :

Còn nếu nó là dạng textBox thì
Đổi font của nó = font mặc định Textbox
Còn nếu ...
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#27
(09-09-15, 04:00 PM)ledangvan Đã viết:
...Tớ bằng tuổi Văn mà (75 cả) nên
Đoạn code mình gửi cho Văn là hoàn thiện để:
1. Lấy thông nhãn và nút bấm (nó chưa đổi font của 2 cái đó đâu)
Khi gọi SetobjectInterface=me thì nó mới đổi font chữ của Label và Button.

2. Đồi font của Textbox sang font unicode

3. Đổi font của vài đối tượng khác nữa.

Lưu lại form.

Cái mà tôi nhắc đến là Report thì không được đả động gì ở đây.

Bây giờ quay lại cấu trúc chương trình một tẹo.
Một dự án (project)/ Chương trình trong Access thì có
+ Bảng
+ Form/Report
+ Query ...
...
+ Module
+ Class

Nguyên tắc chung trong viết code của form/report, module/ class như sau:
+ Từ khóa quy định cách hành xử của trình dịch mã khi thực thi
Option Explicit ' Quy định rằng tất cả các biến, đối tượng đều phải có khai báo, nếu không sẽ báo lỗi.
'Bỏ qua khai báo này thì không cần phải khai biến trước khi sử dụng. Nhưng trong lập trình, khuyến nghị là
' nên khai báo.
Option CompareDatabase ' quy định cách thức Msaccess xử lý các phương thức so sánh - cái này bạn chả cần quan tâm. Mà tôi cũng ít quan tâm.
Ngoài ra có nhiều loại khai báo khác nhưng ta không cần biết nhiều lúc này.

+ Khai báo các hàm API của hệ thống để sử dụng trong các phần sau
Ví dụ
Private Declare xyz lib "vb.dll" ....


+ Khai báo các kiểu số liệu, biến, hằng số, sự kiện để sử dụng trong/ngoài module, form.
* Khai báo kiểu số liệu
Private/Public Type ABC
Abc as string
cdf as long
End type
Đây là kiểu dữ liệu cấu trúc để lưu nhiều thông tin trong một biến
* Khai báo tham số hằng (enum)
Prive/Public Enum Abcd
Lop1=1
Lop2=2
Lop3=3
End enum
Sau này gọi tham số này chỉ cần gõ Abcd.Lop1 là nó sẽ hiểu giá trị tham số là 1
* Khai báo biến/ hằng số
Ví dụ
Private Const abc =10 ' khai báo hằng số
Private Xyz as String ' khai báo biến

Ngoài ra có các khai báo bổ sung khác nhưng tôi chưa nói đến
Từ khóa Public/Private quy định phạm vi sử dụng của biến/ tham số là trong 1 module hay cả đối với bên ngoài. Nếu không đặc tả private/public thì nó sẽ tự động được gán là public

Sau đó đến các hàm/ thủ tục người dùng với cú pháp Sub, Function, Property ...vv
Trong module tớ gửi cho bạn có cấu trúc rõ ràng như vậy.
Hãy phân biệt
Sub >> thủ tục, chỉ thực hiện nhóm việc nào đó mà không phải trả về kết quả tính toán nào;
Function >> Hàm, thực hiện nhóm việc sau đó trả về kết quả ở tên hàm.

Để chương trình thực hiện thì cần nắm vững một số khái niệm về
* Biến số
* Hằng số
* Kiểu số liệu

Câu lệnh xử lý
+ Điều kiện, rẽ nhánh (if a then b else c.... kết thúc bằng từ khóa end if)
Có các kiểu
If a then
(nếu a đúng thì làm)
else
(còn a không đúng thì làm)

end if
Loại tiếp theo là
Select Case a
case 1:
Case 2:
Case else
End select

+ Lặp
> Lặp có số vòng biết trước
For a =1 to b
thực hiện các lệnh
Next
nói khác hơn là vòng lặp này biết trước số lần lặp là b.

> Lặp có số vòng chưa biết trước
While a = true (hoặc chỉ cần viết While a)
' thực hiện các lệnh khi a còn đúng
Wend

Cái này có nghĩa là thực hiện chương trình chừng nào điều kiện a còn = true

Tương tự như vậy thì có Do While/Loop

Các lệnh khai báo bao gồm
Dim x as string (khai rằng biến x có kiểu chuỗi)

Giờ tớ về đã - tối viết tiếp - hơi bị lủng củng - xin lỗi Văn trước nhé
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn ledangvan , maidinhdan , Minh Tiên
#28
Oe, paulsteigel sinh ra vào giờ Thầy giáo thì phải , tham gia khóa học này, xong chắc mình thành lập trình viên thiên tài 014 , cảm ơn bạn đã chia sẻ kiến thức
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#29
Bài 2 - biến và tư duy quy trình
Về kiểu biến, có mấy nhóm thông dụng hay dùng là
* Nhóm liên quan đến đối tượng
Object - Đối tượng: đây là kiểu tham chiếu đến những thứ mà nó có thể bao gồm các đối tượng, thuộc tính con. Ví dụ Form/ Report, Ứng dụng ngoài...vv mà ta chẳng biết trước nó là gì. Nếu biết trước nó thì ta có thể khai báo trực tiếp bằng loại đối tượng đó.
Ví dụ: khi muốn khởi tạo phiên làm việc với Form thì ta khai báo dạng 
Dim myFrm as Object Hoặc Dim myFrm as Form
Tương tự, nếu muốn làm việc với điều khiển ta cũng có thể khai báo là Dim MyCtrl as Control (hoặc TextBox, ComboBox - nếu ta biết rõ và chỉ làm việc với nó) hoặc điều khiển chung chung hoặc cao hơn nữa là Dim MyCtrl as Object.

Nguyên tắc cơ bản trong làm việc với biến kiểu này là:
Khai báo > Khởi tạo (với từ khóa Set)
Ví dụ
Dim MyForm as Object
Set MyForm=Forms("ABC") (Với điều kiện Form này đã phải nằm trong bộ nhớ/ đã được nạp)
Hoặc
Set MyForm=New Form1 (khi khai báo thế này Access sẽ tự động tải Form1 có trong Dự án của ta lên và chạy các thủ tục để nạp form)

* Nhóm về kiểu số liệu đơn giản (gọi là đơn giản cho dễ)
String > Kiểu ký tự, bất kỳ ký hiệu nào trong bảng danh sách ký tự

Integer> kiểu số nguyên
Long (tương tự kiểu số nguyên nhưng giới hạn to hơn nhiều)>> tôi thường dùng kiểu này vì thường trình dịch cũng sẽ chuyển kiểu từ Integer sang Long.
Single/Double kiểu số thập phân

Boolean > kiểu lô gic đúng sai chỉ có 2 giá trị là False hoặc True
Variant > Kiểu không đặc tả (giống như Object, nó có thể đại diện chung cho số hoặc ký tự nếu ta không lường trước được số liệu sẽ thuộc kiểu gì).

Đấy là mấy kiểu cơ bản mà ta hay phải làm việc với.
(còn nhiều kiểu phức tạp khác nhưng nói chung chỉ cần biết đến thế là đủ xài rồi)

Bài tiếp ... Lập trình
Bây giờ, để tập lập trình thì chúng ta chỉ cần đưa những thứ như hàm chuẩn, lệnh, biến vào các thủ tục/ hàm là được (giới hạn trong phạm vi Sub-End Sub, Function - End Function)

Cao cấp hơn nữa là thao tác với các đối tượng và thuộc tính. Bây giờ tôi sẽ nói tí chú về Điều khiển để ta hiểu rõ nó là gì?
Các điều khiển được thiết kế nhằm giải quyết nhu cầu xử lý hoặc tương tác nào đó với người dùng và nó gắn liền với thao tác người dùng.
Mỗi điều khiển có nhóm các đặc tính riêng để thỏa mãn thị hiếu người dùng. 
Ví dụ
+ ông Văn thích gõ trực tiếp thì ông ta dùng Textbox, ComboBox
+ ông ấy lại lười chỉ thích nhấn chuột, chọn thì dùng ComboBox, Listbox
Có các nhóm đặc tính của điều khiển là
Thuộc tính (Property): Quy định cách hành xử của điều khiển như, chữ to, chữ nhỏ, màu xanh, màu đỏ, nhiều dòng ....vv
* Có nhóm thuộc tính Đọc/ghi (read/write): ta có thể thay đổi nó ngay khi ứng dụng đã vào chế độ chạy.
* Có nhóm thuộc tính chỉ đọc: ta chỉ thay đổi vào thời điểm thiết kế, vẽ form/ report nhưng khi chạy rồi thì không thay đổi được nữa hoặc không thể điều chỉnh dược trong bất kỳ chế độ nào mà chỉ gọi được nó ra để lấy thông số.

Sự kiện (Event): Quy định sẽ được kích hoạt khi người dùng thao tác gì đó với điều khiển
Ví dụ
Nhấn chuột = Click, Gõ phím = KeyPress, Nhấn phím = KeyDown, Nhả phím KeyUp ....

Thủ tục/Phương thức (Method): Chỉ thực hiện khi ta gọi đến nó để yêu cầu điều khiển làm cái gì đó.
Ví dụ với ComboBox muốn nó nạp lại dữ liệu sau khi có thay đổi nguồn dữ liệu, ta dùng phương thức ReQuery (truy vấn lại).

Để xem nó là thuộc tính/ thủ tục hay phương thức, trong màn hình soạn code, gõ tên đối tượng, gõ dấu chấm, thành Intelisense (gợi ý) sẽ hiển thị danh sách các đặc tính con của đối tượng. Nếu có dấu tia sét thì đó là sự kiện, Viên gạch bay là Phương thức, Hình ngón tay trỏ vào bảng thì đó là Thuộc tính.

Cơ bản như thế là đủ về những khái niệm cơ bản. Để lập trình tốt thì cần thêm một kiến thức khác nữa đó là tư duy thuật toán.
Tuy nhiên để làm cho tư duy này nôm na hóa cho dễ hiểu, tôi gọi đó là tư duy QUY TRÌNH. Khi hướng dẫn các bạn trẻ tôi đều dùng khái niệm này.
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn maidinhdan , ledangvan , Minh Tiên
#30
Hãy quan sát một cái xe máy, để nó vận động được nó phải có bánh xe, máy móc, xăng dầu, người lái. Để cái bánh quay được lâu phải có vòng bi chỗ tra dầu và chúng có quan hệ với nhau. Hướng dẫn khởi động xe là một ví dụ
Bước 1: Cắm chìa khóa, vặn vào nấc khởi động
Bước 2: Ngồi lên xe, chân chống để xe đứng vững
Bước 3: Đạp cần khởi động/ Nhấn đề
+ Nếu không nổ > Kiểm tra bước 1
+ Nếu nổ > sang bước 3
Bước 4: Vào số, vặn ga từ từ, chắc tay lái và đi...

Trong lập trình cũng vậy thôi.
Bước 1: Phân tích
Trước tiên phải trả lời câu hỏi: Yêu cầu đầu bài là gì? Ta có gì đầu vào? Đầu ra là gì?
Bước 2: Vẽ sơ đồ mối quan hệ giữa đầu vào, đầu ra
Bước 3: Hình thành các bước xử lý để có đầu ra từ đầu vào
Bước 4: Viết mã.

Nói khác hơn, bạn luôn cần 1 tờ giấy nháp và vẽ sơ đồ quan hệ.
Sau khi ra được sơ đồ quan hệ bắt đầu tưởng tượng để tìm ra giải pháp xử lý nhanh/ thông minh nhất.
Ví dụ có tên file là A:\doc1\Doc2\Doc3\Tenfile.doc, hãy lập thủ tục lấy được tên file từ đường dẫn và tên file đó.
Bước 1: Phân tích
Đầu vào: A:\doc1\Doc2\Doc3\Tenfile.doc
Đầu ra: Tenfile.doc

Bước 2: Vẽ sơ đồ
Lấy ra tên file từ đường dẫn bằng cách đọc toàn bộ đầu vào và tìm đến điểm bắt đầu tên file để trích lấy nó.

Bước 3: Hình thành các bước xử lý
+ Nạp đầu vào: Cần biến chứa chuỗi đầu vào
+ Tìm điểm bắt đầu tên file: tìm ký tự "\" cuối cùng trong chuỗi
+ Trích lấy chuỗi kể từ điểm bắt đầu của tên file: dùng hàm xử lý ký tự để lấy chuỗi
+ Ra kết quả

Đến đây bước sang giai đoạn nắm được các hàm cơ bản của VBA/VB. 
Bạn không có cách nào khác ngoài việc nhớ và trang này có thể tham khảo được này
http://www.techonthenet.com/excel/formul...ex_vba.php

Ở bài toán này có nhiều cách giải khác nhau và cần biết các hàm Instr, Mid, Left, Right xa hơn nữa là InstrRev, Split
1. Duyệt qua toàn chuỗi đầu vào từ đầu đến cuối, kiểm tra từng ký tự xem có phải là dấu \ không, lấy vị trí của nó và khi duyệt đến hết chuỗi, số thứ tự lớn nhất chính là vị trí của dấu \ cuối cùng. Hàm Mid và Instr. Cách này củ chuối, chạy chậm - cần vòng lặp.
2. Duyệt chuỗi từ cuối, thấy dấu \ đầu tiên thì đó chính là điểm bắt đầu tên file. Dùng hàm Mid là trích được tên file - cần vòng lặp
3. Dùng hàm InstrRev tìm vị trí ký tự \ bắt đầu từ cuối chuỗi. - không cần vòng lặp
4. Dùng hàm Split tách chuỗi đầu vào thành mảng với dấu phân cách phần tử mảng là \, phần tử cuối cùng của mảng chính là tên file.- không cần vòng lặp
5. Dùng các đối tượng ngoài (FileScriptingObject) và truy cập thuộc tính của nó >> Cách này khó - không giải thích.
 
Vậy đấy, các bước để viết chương trình để hình thành chương trình lớn là vậy.
Hy vọng không quá khó để chúng ta bước tiếp.
Chúc các bạn có buổi tối vui vẻ
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn ledangvan , Noname , Minh Tiên


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Refresh Form và tiếp tục hoạt động Godspear 1 17 1 Giờ trước
Bài mới nhất: ongke0711
  Cách đề tạo Combo Box và List Box Tương ứng Godspear 8 266 5 Giờ trước
Bài mới nhất: Godspear
  [Hỏi] Cách thêm dữ liệu vào form Main_Sub NganNguyen 1 38 06-12-16, 02:23 AM
Bài mới nhất: maidinhdan
  Tự động hiện Form khi loading hết thời gian ChiMai 1 49 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
Photo [Hỏi] Mở Form trên access 2007 báo lỗi jason 5 195 22-11-16, 09:23 AM
Bài mới nhất: jason

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ