免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
ACCESS-VBA編程(1)

program 2007-07-20 10:28:30 閱讀49 評(píng)論0   字號(hào): 訂閱

 

http://www.kaikei.cn/jsj/VBA/JV0000.htm

 

在VB中對(duì)窗體控件的引用

鍵入包含控件的窗體或報(bào)表的標(biāo)識(shí)符,后面緊接 ! 運(yùn)算符和控件的名稱。例如,下列標(biāo)識(shí)符將引用“訂單”窗體上“訂單ID”控件值:

Forms![訂單]![訂單ID]

引用子窗體或子報(bào)表上的控件,不必使用“窗體”或“報(bào)表”屬性為窗體或報(bào)表指定完整的標(biāo)識(shí)符。例如,可以使用下列標(biāo)識(shí)符來引用“訂單”子窗體上的“數(shù)量”控件:

Forms![訂單]![訂單子窗體]![數(shù)量]

 

 

判斷窗體或報(bào)表中控件的數(shù)目,然后將該數(shù)目賦給一個(gè)變量。

Dim intFormControls As Integer

Dim intReportControls As Integer

intFormControls = Forms!Employees.Count

intReportControls = Reports!FreightCharges.Count

設(shè)置控件可見性

Dim i, ii As Integer

For ii = 3 To 10

     Me.Controls.Item(ii).Visible = True

Next

For i = 11 To 22

 

     Me.Controls.Item(i).Visible = False

Next

按特殊名在VBA中設(shè)置控件的可見性:

For i = 27 To 47

  If Me.Controls.Item(i).Name Like "A*" Then

     Me.Controls.Item(i).Visible = False

  End If

   

Next

 

 

指定一個(gè)控件能否接受焦點(diǎn)

Enabled屬性:

me.控件.Enabled = true'能

                =false'不能

 

指定一個(gè)控件能否被編輯:

locked

如:

me.控件.Locked = true

me.控件.Locked = false

設(shè)置控件標(biāo)題顯示的文字

Me.控件.Caption = "顯示窗體"

 

設(shè)置標(biāo)簽顏色:

Me.LabelColor =200

獲得焦點(diǎn)及失去焦點(diǎn)時(shí)字段變更顏色。

如果你的控件是文本框,名稱為“txt字段”,寫如下代碼:

 

Private Sub txt字段_GotFocus()

  Me.txt字段.BackColor = 12632256

End Sub

 

當(dāng)中“12632256”是灰色,你可以自己選擇希望的顏色,如果想在失去焦點(diǎn)時(shí)改為原來的顏色,寫如下代碼:

 

Private Sub txt字段_LostFocus()

  Me.txt字段.BackColor = 16777215

End Sub

使標(biāo)簽閃爍以引人注意

設(shè)置窗體的TimerInterval 值為1000 (1秒).

 

forms OnTimer 加入代碼:

 

Sub Form_Timer()

YourTextLabel.Visible = Not YourTextLabel.Visible

End_Sub

設(shè)置標(biāo)簽字體顏色:

Me.Label1.ForeColor =

設(shè)置文本框顏色:

Me.TextColor = 300

設(shè)置文本框字體顏色:

Me.TextFontColor = 500

標(biāo)簽等左邊距離:

Me.Label2.Left = 2200

 

 

定位控件

Me.控件.Top = 8290

Me. 控件.Left = 100

標(biāo)簽等字體粗細(xì):

Me.Label2.FontWeight = 20000

控件邊框顏色:

Me.Label2.BorderColor = 0

控件邊框線條

BorderStyle 屬性使用以下設(shè)置:

透明 0 (僅對(duì)于標(biāo)簽、圖表和子報(bào)表而言是默認(rèn)值)透明的

實(shí)線 1 (默認(rèn)值)實(shí)線

虛線 2 虛線

短虛線 3 短虛線

點(diǎn)線 4 點(diǎn)線

稀疏點(diǎn)線 5 點(diǎn)距較寬的點(diǎn)線

點(diǎn)劃線 6 虛線與點(diǎn)線組合的點(diǎn)劃線

點(diǎn)點(diǎn)劃線 7 虛線-點(diǎn)線-點(diǎn)線組合的點(diǎn)點(diǎn)劃線

雙實(shí)線 8 雙實(shí)線

指定控件的邊框?qū)挾?/p>

使用 BorderWidth 屬性可以指定控件的邊框?qū)挾?/p>

取值:0或1-6

指定控件是否透明

使BackStyle 屬性可以指定控件是否透明。

True 、False

解除子窗體鎖定

Me.進(jìn)_子窗體.Locked = False   '解除子窗體鎖定

將窗體上所有控件的輸入法關(guān)掉!

來源:不祥

Private Sub Form_Open(Cancel As Integer)

Dim ctl As Access.Control

For Each ctl In Me.Controls

Debug.Print ctl.Name & ctl.ControlType

If ctl.ControlType = acTextBox Then

ctl.IMEMode = 2

End If

Next

End Sub

上述代碼控制文本框,你還可以控制其他的,只要copy進(jìn)窗體就可以了

列表框的值的引用

如果是單選的列表框,用 me.[列表框名] 來引用;如果要引用不是結(jié)合型列的值,可以用 me.[列表框名].column(n) (第一列n=0,第二列n=1…)

 

引用多列組合框或列表框中特定的列或列與行的組合

用 0 引用第一列,用 1 引用第二列,依此類推。用 0 引用第一行,用 1 引用第二行,依此類推。例如在含有一列客戶 ID

和一列客戶名稱的列表框中,可以使用如下方式引用第二列、第五行的客戶名稱:

Forms!Contacts!Customers.Column(1, 4)

 

可以使用 Column 屬性將組合框或列表框的內(nèi)容指定給另一控件,如文本框。例如,若要將文本框的 ControlSource

屬性設(shè)為列表框第二列中的值,可以使用以下表達(dá)式:

=Forms!Customers!CompanyName.Column(1)

 

如果引用了組合框或列表框中的列,但用戶未做選擇,則 Column 屬性設(shè)置將為 Null??梢允褂?IsNull 函數(shù)來確定是否進(jìn)行了選擇,示例如下:

If IsNull(Forms!Customers!Country)

    Then MsgBox "No selection."

End If

顯示獲得焦點(diǎn)的控件的 Name:

    ctl As Control

    Set ctl = Screen.ActiveControl

    MsgBox ctl.Name

 

 

 

 

 

 

窗體:

指定當(dāng)窗體上的命令按鈕保持按下狀態(tài)時(shí),是否重復(fù)執(zhí)行事件過程或宏

使用 AutoRepeat 屬性可以指定當(dāng)窗體上的命令按鈕保持按下狀態(tài)時(shí),是否重復(fù)執(zhí)行事件過程或宏

True 、False

 

 '允許添加

me.AllowAdditions= True  

 '記錄不鎖定

me.RecordLocks = 1

  是否自動(dòng)居中

AutoCenter=          True,False           

是否自動(dòng)調(diào)整

AutoResize =          True,False             

 

窗體邊框樣式

 me.BorderStyle=1 中譯:無

其它

1   無

2   細(xì)邊框

3   可調(diào)邊框

4   對(duì)話框邊框

 

設(shè)置窗體、頁眉、頁腳顏色:

Me.Section(0).BackColor = 200

Me.Section(1).BackColor = 200

Me.Section(2).BackColor = 200

 

窗體標(biāo)題

me.Caption="中國ACCESS軟件網(wǎng)" 中譯:窗體標(biāo)題為"中國ACCESS軟件網(wǎng)"(不含引號(hào))

關(guān)閉按鈕

me.CloseButton =True  中譯 允許關(guān)閉按鈕

其它:true:允許 False:不允許

 

控制框

me.ControlBox =True  允許

其它:true:允許 False:不允許

 

默認(rèn)視圖

me.DefaultView =0 為單一窗口

其它:0:單一窗口1:連續(xù)窗體2:數(shù)據(jù)表

允許分隔線

me.DividingLines =True  中譯 允許分隔線

其它:true:允許 False:不允許

允許打印版式

英文:me.LayoutForPrint =True  中譯 允許打印版式

其它:true:允許 False:不允許

無最大最小化按鈕

英文:me.MinMaxButtons =0 中譯 無最大最小化按鈕

其它:0:無 1:最大化 2:最小化 3:兩者都有

允許瀏覽按鈕

英文:me.NavigationButtons =True  中譯 允許瀏覽按鈕

其它:true:允許 False:不允許

 

滾動(dòng)條

me.ScrollBars =0二者均無

其它:0:二者均無 1:只垂直 2:只水平3:二者都有

 

允許/不允許添加

me.AllowAdditions=True/False 

允許/不允許刪除

me.AllowDeletions=True/False 

允許/不允許編輯

me.AllowEdits=True/False 

 

指定是否允許打開綁定窗體進(jìn)行數(shù)據(jù)輸入

使用 DataEntry 屬性可以指定是否允許打開綁定窗體進(jìn)行數(shù)據(jù)輸入。DataEntry 屬性不決定是否可以添加記錄,只決定是否顯示已有的記錄。Boolean

型,可讀/寫。

True 、False

 

允許/不允許篩選

 me.AllowFilters=True/False

Filter="篩選內(nèi)容"篩選

應(yīng)用與/否篩選

FilterOn=True/False 

將 MyForm 窗體的 BackColor 屬性,改成 ColorCode 參數(shù)指定的色彩。

使用 QBColor 函數(shù)將 MyForm 窗體的 BackColor 屬性,改成 ColorCode 參數(shù)指定的色彩。QBColor 可接受 0 到 15

的整型值。

Sub ChangeBackColor (ColorCode As Integer, MyForm As Form)    MyForm.BackColor = QBColor(ColorCode)End Sub窗體真正居中顯示

如下代碼可以做到真正居中顯示

 

Private Sub Form_Load()

DoCmd.Echo False

Dim x, y As Integer

DoCmd.Maximize

x = Me.WindowWidth

y = Me.WindowHeight

DoCmd.Restore

DoCmd.Echo True

Move (x - Me.WindowWidth) / 2, (y - Me.WindowHeight) / 2

End Sub

隱藏窗體[學(xué)生名冊(cè)]數(shù)據(jù)表視圖中的性別字段

Table!學(xué)生名冊(cè)!性別.ColumnHidden = -1

 

顯示獲得焦點(diǎn)窗體的 Name 屬性設(shè)置:

使用 ActiveForm 屬性(和 Screen 對(duì)象一起)可以標(biāo)識(shí)或引用獲得焦點(diǎn)的窗體。

Dim dqhdct As Form

Set dqhdct = Screen.ActiveForm

MsgBox dqhdct.Name

判斷窗體是否打開的方法

 

Function IsLoaded(strName As String, Optional intObjectType As Integer =

acForm)

IsLoaded = (SysCmd(acSysCmdGetObjectState, intObjectType, strName) <> 0)

End Function

 

使用 IsLoaded 屬性可以確定當(dāng)前是否加載了 AccessObject。Boolean 型,只讀。

以下是一個(gè)示例:

If CurrentProject.AllForms("frmMain").IsLoaded = True Then

Forms!frmMain.Form.Visible = False

End If

窗體中組合框不在列表中示例

不在列表中事件代碼:

Private Sub 名稱_NotInList(NewData As String, Response As Integer)

    Response = acDataErrContinue

    If MsgBox("您輸入的名稱不在列表中,在列表中添加新記錄嗎?", 68, "銀河酒業(yè)") = 6 Then

   

    Me![名稱] = Null

    DoCmd.GoToControl "單價(jià)"

   

    DoCmd.OpenForm "酒名列表", , , , acAdd, acNormal

    Else

    Me![名稱] = Null

    Me![名稱].Dropdown

    End If

End Sub

獲得焦點(diǎn)事件代碼:

Private Sub 名稱_GotFocus()

Me![名稱].Requery

End Sub

如何讓窗體總在最前面?

*API函數(shù)聲明

Declare Function SetWindowPos Lib "user32" ( ByVal hwnd As Long, ByVal

hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long,

ByVal cy As Long, ByVal wFlags As Long) As Long

注釋:常量聲明

Private Const SWP_NOSIZE = &H1

Private Const SWP_NOMOVE = &H2

Private Const HWND_TOPMOST = -1

Private Const HWND_NOTOPMOST = -2

注釋: 在某個(gè)form里寫:

SetWindowPos me.hWnd,WND_TOPMOST,0,0,0,0, SWP_NOMOVE 注釋:或下面

SetWindowPos me.hWnd,WND_TOPMOST,0,0,0,0, SWP_NOSIZE

 

Me.graphnow.Object.ChartType = xlBarClustered

移動(dòng)無邊框窗體例子

模塊:

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As

Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Declare Function ReleaseCapture Lib "user32" () As Long

Public Const WM_NCLBUTTONDOWN = &HA1

Public Const HTCAPTION = 2

 

應(yīng)用:

Private Sub Form_Close()

DoCmd.RunCommand acCmdAppMaximize

End Sub

 

Private Sub Form_Load()

DoCmd.RunCommand acCmdAppMinimize

End Sub

 

Private Sub XPForm_MouseDown(Button As Integer, Shift As Integer, X As Single, Y

As Single)

  If Button = 1 Then

    ReleaseCapture

    SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&

  End If

End Sub

 

Private Sub 命令20_Click()

DoCmd.Close

End Sub

 

日期、時(shí)間函數(shù)

如何將文本型:2003.08.04 轉(zhuǎn)換為日期型:2003-08-04

cdate(replace("2003.08.04",".","-"))

顯示當(dāng)前日期在該年中所處的星期號(hào)

=Format(Now(), "ww")

ww 為 1 到 53。

顯示日期字段值的四位年份值。

=DatePart("yyyy", [訂購日期])

 

顯示日期字段值前 10 天的日期值。

=DateAdd("y", -10, [應(yīng)付日期])

顯示日期字段值前一個(gè)月的日期值。

=DateAdd("m",-1,Date())

顯示日期1和日期2之間相差的天數(shù)。

=DateDiff("d", [訂購日期], [發(fā)貨日期])

 

從今天算起到三個(gè)月后的日期之間的記錄。

Betweeb date() and adddate(3,date())

根據(jù)出生日期計(jì)算年齡(周歲)

=IIf(Month(Date())-Month([出生年月日])>-1,Year(Date())-Year([出生年月日]),Year(Date())-Year([出生年月日])-1)

自定義日期/時(shí)間格式 (Format 函數(shù))

(:)  時(shí)間分隔符。在一些區(qū)域,可能用其他符號(hào)來當(dāng)時(shí)間分隔符。格式化時(shí)間值時(shí),時(shí)間分隔符可以分隔時(shí)、分、秒。時(shí)間分隔符的真正字符在格式輸出時(shí)取決于系統(tǒng)的設(shè)置。

(/) 日期分隔符。在一些區(qū)域,可能用其他符號(hào)來當(dāng)日期分隔符。格式化日期數(shù)值時(shí),日期分隔符可以分隔年、月、日。日期分隔符的真正字符在格式輸出時(shí)取決于系統(tǒng)設(shè)置。

C  以 ddddd 來顯示日期并且以 ttttt 來顯示時(shí)間。如果想顯示的數(shù)值無小數(shù)部分,則只顯示日期部分,如果想顯示的數(shù)值無整數(shù)部分,則只顯示時(shí)間部分。

D

以沒有前導(dǎo)零的數(shù)字來顯示日 (1 – 31)。

Dd

以有前導(dǎo)零的數(shù)字來顯示日 (01 – 31)。

ddd

以簡寫來表示日 (Sun –Sat)。

dddd

以全稱來表示日 (Sunday –Saturday)。

ddddd

以完整日期表示法顯示(包括年、月、日),日期的顯示要依系統(tǒng)的短日期格式設(shè)置而定。缺省的短日期格式為 m/d/yy。

dddddd

以完整日期表示法顯示日期系列數(shù)(包括年、月、日),日期的顯示要依系統(tǒng)識(shí)別的長日期格式而定。缺省的長日期格式為 mmmm dd, yyyy。

aaaa

與dddd 一樣,它只是該字符串的本地化版本。

W

將一周中的日期以數(shù)值表示(1 表星期日~ 7表星期六)。

ww

將一年中的星期以數(shù)值表示 (1 – 54)。

M

以沒有前導(dǎo)零的數(shù)字來顯示月 (1 – 12)。如果 m 是直接跟在 h 或 hh 之后,那么顯示的將是分而不是月。

mm

以有前導(dǎo)零的數(shù)字來顯示月 (01 – 12)。如果m是直接跟在h或hh之后,那么顯示的將是分而不是月。

mmm

以簡寫來表示月 (Jan –Dec)。

mmmm

以全稱來表示月 (January –December)。

oooo

與mmmm一樣,它只是該字符串的本地化版本。

Q

將一年中的季以數(shù)值表示 (1 – 4)。

Y

將一年中的日以數(shù)值表示 (1 – 366)。

Yy

以兩位數(shù)來表示年 (00 – 99)。

yyyy

以四位數(shù)來表示年 (00 – 99)。

H

以沒有前導(dǎo)零的數(shù)字來顯示小時(shí) (0 – 23)。

Hh

以有前導(dǎo)零的數(shù)字來顯示小時(shí) (00– 23)。

N

以沒有前導(dǎo)零的數(shù)字來顯示分 (0 – 59)。

Nn

以有前導(dǎo)零的數(shù)字來顯示分 (00 – 59)。

S

以沒有前導(dǎo)零的數(shù)字來顯示秒 (0 – 59)。

Ss

以有前導(dǎo)零的數(shù)字來顯示秒 (00 – 59)。

t t t t t

以完整時(shí)間表示法顯示(包括時(shí)、分、秒),用系統(tǒng)識(shí)別的時(shí)間格式定義的時(shí)間分隔符進(jìn)行格式化。如果選擇有前導(dǎo)零并且時(shí)間是在 10:00 A.M. 或

P.M.之前,那么將顯示有前導(dǎo)零的時(shí)間。缺省的時(shí)間格式為 h:mm:ss。

AM/PM

在中午前以 12 小時(shí)配合大寫 AM 符號(hào)來使用;在中午和 11:59 P.M.間以 12 小時(shí)配合大寫 PM 來使用。

Am/pm

在中午前以 12 小時(shí)配合小寫 am 符號(hào)來使用;在中午和 11:59 P.M.間以 12 小時(shí)配合小寫 pm 來使用。

A/P

在中午前以 12 小時(shí)配合大寫A符號(hào)來使用;在中午和 11:59 P.M.間以12 小時(shí)配合大寫P來使用。

a/p

在中午前以 12 小時(shí)配合小寫a符號(hào)來使用;在中午和 11:59 P.M.間以 12 小時(shí)配合小寫p來使用。

AMPM

在中午前以 12 小時(shí)配合系統(tǒng)設(shè)置的 AM字符串文字來使用;在中午和 11:59 P.M. 間以 12 小時(shí)配合系統(tǒng)設(shè)置的 PM 字符串文字來使用。AMPM

可以是大寫或小寫,但必須和您的系統(tǒng)設(shè)置相配。其缺省格式為 AM/PM。

日期函數(shù)示例

當(dāng)天日期:=Date()

當(dāng)日:=Day(date)

當(dāng)月:=Month(date())

當(dāng)年:=Year(date())

當(dāng)季:=DatePart("q",Date())

把日期大寫

Function Date2Chinese(iDate)

      Dim num(10)

      Dim iYear

      Dim iMonth

      Dim iDay

 

      num(0) = "〇"

      num(1) = "一"

      num(2) = "二"

      num(3) = "三"

      num(4) = "四"

      num(5) = "五"

      num(6) = "六"

      num(7) = "七"

      num(8) = "八"

      num(9) = "九"

 

      iYear = Year(iDate)

      iMonth = Month(iDate)

      iDay = Day(iDate)

      Date2Chinese = num(iYear \ 1000) + _

            num((iYear \ 100) Mod 10) + num((iYear _

            \ 10) Mod 10) + num(iYear Mod _

            10) + "年"

      If iMonth >= 10 Then

            If iMonth = 10 Then

                  Date2Chinese = Date2Chinese + _

                  "十" + "月"

            Else

                  Date2Chinese = Date2Chinese + _

                  "十" + num(iMonth Mod 10) + "月"

            End If

      Else

            Date2Chinese = Date2Chinese + _

                  num(iMonth Mod 10) + "月"

      End If

      If iDay >= 10 Then

            If iDay = 10 Then

                  Date2Chinese = Date2Chinese + _

                  "十" + "日"

            ElseIf iDay = 20 Or iDay = 30 Then

                  Date2Chinese = Date2Chinese + _

                  num(iDay \ 10) + "十" + "日"

            ElseIf iDay > 20 Then

                  Date2Chinese = Date2Chinese + _

                  num(iDay \ 10) + "十" + _

                  num(iDay Mod 10) + "日"

            Else

                 Date2Chinese = Date2Chinese + _

                 "十" + num(iDay Mod 10) + "日"

            End If

      Else

            Date2Chinese = Date2Chinese + _

            num(iDay Mod 10) + "日"

      End If

End Function

算出每個(gè)月的天數(shù)

一法:

 Dim a, b, c

a = Year(Now())

b = Month(Now())

c = Format((a & "/" & b + 1 & "/1"), "######") - Format((a & "/" & b & "/1"),

"######")

二法:

 DateDiff("d", Format(Date, "yyyy-mm-01"), Format(DateAdd("m", -1, Date),

"yyyy-mm-01"))

DateDiff可以算出兩個(gè)日期之間相差幾天!

三法:

Day(DateAdd("d", -1, Format(Date, "yyyy-mm-01")))

day函數(shù)可以知道某個(gè)日期是這個(gè)月的第幾天,我們把這個(gè)月的最后一天拿出來DAY一下!

應(yīng)該還有更好的方法!

比如說可以定義一個(gè)數(shù)組,把每個(gè)月的日子放進(jìn)去,或者說寫一個(gè)函數(shù)算每一個(gè)月的天數(shù)

只要考慮一下閨年的問題就可以了!

 

 

如何得到某年每個(gè)月的第一天是星期幾

Private Sub Command1_Click()

Dim i As Integer, A As Integer, B As Integer, C As String

A = InputBox("請(qǐng)輸入年份", "某年每個(gè)月的第一天是星期幾")

Form1.Cls

For i = 1 To 12

C = A & "-" & i & "-1"

B = Weekday(C)

Select Case B

Case vbSunday

Print A & "年" & i & "月1日是星期日"

Case vbMonday

Print A & "年" & i & "月1日是星期一"

Case vbTuesday

Print A & "年" & i & "月1日是星期二"

Case vbWednesday

Print A & "年" & i & "月1日是星期三"

Case vbThursday

Print A & "年" & i & "月1日是星期四"

Case vbFriday

Print A & "年" & i & "月1日是星期五"

Case vbSaturday

Print A & "年" & i & "月1日是星期六"

End Select

Next i

End Sub

 

計(jì)算天數(shù)及月初月末日期

Function 本月天數(shù)(日期 As Date) As Byte

本月天數(shù) = DateSerial(Year(日期), Month(日期) + 1, Day(日期)) - 日期

End Function

 

Function 月末(日期 As Date) As Date

月末 = DateSerial(Year(日期), Month(日期) + 1, 1) - 1

End Function

 

 

Function 月初(日期 As Date) As Date

月初 = 日期 - Day(日期) + 1

End Function

 

本月最后一日是周幾

SELECT

 Weekday(DateAdd("m",1,DateSerial(Year(Date()),Month(Date()),1)-1)) AS

本月最后一日是周幾,

下月最后一日是周幾

SELECT

Weekday(DateAdd("m",2,DateSerial(Year(Date()),Month(Date()),1)-1)) AS 下月最后一日是周幾,

本月最后一個(gè)周5到月底的天數(shù)

SELECT

(Weekday(DateAdd("m",1,DateSerial(Year(Date()),Month(Date()),1)-1))+1) Mod 7 AS

本月最后一個(gè)周5到月底的天數(shù);

下月最后一個(gè)周5到月底的天數(shù)

SELECT

(Weekday(DateAdd("m",2,DateSerial(Year(Date()),Month(Date()),1)-1))+1) Mod 7 AS

下月最后一個(gè)周5到月底的天數(shù);

本月最后一個(gè)周5的日期

SELECT

DateAdd("m",1,DateSerial(Year(Date()),Month(Date()),1))-1-(Weekday(DateAdd("m",1,DateSerial(Year(Date()),Month(Date()),1)-1))+1)

Mod 7 AS 本月最后一個(gè)周5的日期;

下月最后一個(gè)周5的日期

SELECT

DateAdd("m",2,DateSerial(Year(Date()),Month(Date()),1))-1-(Weekday(DateAdd("m",2,DateSerial(Year(Date()),Month(Date()),1)-1))+1)

Mod 7 AS 下月最后一個(gè)周5的日期;

 

 

數(shù)據(jù)輸入、查詢、計(jì)算、連接:

通過英特網(wǎng)的ACCESS聯(lián)接

在ACCESS中使用ADO:

Private Sub ABC_Click()

Dim cn As New ADODB.Connection

Dim rs As New ADODB.Recordset

cn.OPEN "DSN=alwin;UID=;PWD=;"

rs.OPEN "Select * from tbTABLE", cn, adOpenDynamic, adLockReadOnly’

rs.ABC App.Path & "\testdata.dat", adPersistADTG

rs.Close

cn.Close

MsgBox ("OPERATION OK")

End Sub

Private Sub OPEN_Click()

Dim strConnect As String

strConnect = "Provider=MSPersist"

Dim rs As New ADODB.Recordset

rs.OPEN "http://遠(yuǎn)程服務(wù)器的IP/test/testdata.dat", strConnect

Do While Not rs.EOF

Debug.Print rs("USERID").value

rs.MoveNext

Loop

End Sub

 

將用戶輸入的身份證號(hào)15位數(shù)據(jù)轉(zhuǎn)化為18位。

Function IDCode15to18(sCode15 As String) As String

  '* 功能:將15的身份證號(hào)升為18位(根據(jù)GB 11643-1999)

  '* 參數(shù):原來的號(hào)碼

  '* 返回:升位后的18位號(hào)碼

  Dim i As Integer

  Dim num As Integer

  Dim code As String

  num = 0

  IDCode15to18 = Left(sCode15, 6) + "19" + Right(sCode15, 9)

  ' 計(jì)算校驗(yàn)位

  For i = 18 To 2 Step -1

   num = num + (2 ^ (i - 1) Mod 11) * (Mid(IDCode15to18, 19 - i, 1))

  Next i

  num = num Mod 11

  Select Case num

  Case 0

   code = "1"

  Case 1

   code = "0"

  Case 2

   code = "X"

  Case Else

   code = Trim(Str(12 - num))

  End Select

  IDCode15to18 = IDCode15to18 + code

End Function

據(jù)身份證號(hào)自動(dòng)輸入出生日期

Dim Length As Integer

 

Length = Len(Me.[身份證號(hào)])

 

If Not IsNull(Length) Then

 

 If Length = 15 Then

   Me.[性別] = IIf(Val(Mid(Me.身份證號(hào), 15, 1)) / 2 = Int(Val(Mid(Me.身份證號(hào), 15, 1)) /

2), "女", "男")

   Me.[出生日期] = "19" & Mid([身份證號(hào)], 7, 2) & "-" & Mid([身份證號(hào)], 9, 2) & "-" &

Mid([身份證號(hào)], 11, 2)

  

   ElseIf Length = 18 Then

      Me.[性別] = IIf(Val(Mid(Me.身份證號(hào), 17, 1)) / 2 = Int(Val(Mid(Me.身份證號(hào), 17, 1))

/ 2), "女", "男")

      Me.[出生日期] = Mid([身份證號(hào)], 7, 4) & "-" & Mid([身份證號(hào)], 11, 2) & "-" &

Mid([身份證號(hào)], 13, 2)

   Else

      MsgBox "身份證號(hào)錯(cuò)誤!"

  

   End If

 

End If

兩行代碼打開另一數(shù)據(jù)庫

Private Sub 命令4_Click()

On Error GoTo Err_命令4_Click

Dim strDb As String

strDb = "C:\db1.mdb"

SendKeys "{F11}%FO" & strDb & "{enter}"

Exit_命令4_Click:

    Exit Sub

Err_命令4_Click:

    MsgBox Err.Description

    Resume Exit_命令4_Click

   

End Sub

 

實(shí)現(xiàn)打開外部數(shù)據(jù)庫中的報(bào)表。

Private Declare Function apiSetForegroundWindow Lib "user32" _

            Alias "SetForegroundWindow" _

            (ByVal hwnd As Long) _

            As Long

 

Private Declare Function apiShowWindow Lib "user32" _

            Alias "ShowWindow" _

            (ByVal hwnd As Long, _

            ByVal nCmdShow As Long) _

            As Long

 

Private Const SW_MAXIMIZE = 3

Private Const SW_NORMAL = 1

 

Function fOpenRemoteReport(strMDB As String, strReport As String, _

            Optional intView As Variant) _

            As Boolean

' strMDB: 外部數(shù)據(jù)庫名稱(含路徑)

' strReport: 報(bào)表名稱

' intView: 報(bào)表的打開方式

 

    Dim objAccess As Access.Application

    Dim lngRet As Long

 

    On Error GoTo fOpenRemoteReport_Err

 

    If IsMissing(intView) Then intView = acViewPreview

 

    If Len(Dir(strMDB)) > 0 Then

        Set objAccess = New Access.Application

        With objAccess

            lngRet = apiSetForegroundWindow(.hWndAccessApp)

            lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)

            ' 第一次調(diào)用ShowWindow似乎不做任何事情

            lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)

            .OpenCurrentDatabase strMDB

            .DoCmd.OpenReport strReport, intView

            Do While Len(.CurrentDb.Name) > 0

                DoEvents

            Loop

        End With

    End If

 

fOpenRemoteReport_Exit:

    On Error Resume Next

    objAccess.Quit

    Set objAccess = Nothing

    Exit Function

 

fOpenRemoteReport_Err:

    fOpenRemoteReport = False

    Select Case Err.Number

        Case 7866:

            ' mdb 已經(jīng)被用獨(dú)占方式打開

            MsgBox "該數(shù)據(jù)庫:" & strMDB & _

                vbCrLf & "已經(jīng)被用獨(dú)占方式打開!" & vbCrLf _

                & vbCrLf & "請(qǐng)重新用共享方式打開,再試一次!", _

                vbExclamation + vbOKOnly, "不能打開數(shù)據(jù)庫"

        Case 2103:

            ' 報(bào)表不存在

            MsgBox "在這個(gè)" & strMDB & "數(shù)據(jù)庫中不存在該報(bào)表:" & strReport & _

                        vbCrLf & vbCrLf , _

                        vbExclamation + vbOKOnly, "報(bào)表不存在"

        Case 7952:

            ' 用戶關(guān)閉了這個(gè) mdb

            fOpenRemoteReport = True

        Case Else:

            MsgBox "錯(cuò)誤#: " & Err.Number & vbCrLf & Err.Description, _

                    vbCritical + vbOKOnly, "運(yùn)行時(shí)錯(cuò)誤"

    End Select

    Resume fOpenRemoteReport_Exit

End Function

為列表框定數(shù)據(jù)源

  Dim str3 As String

  str3 = "SELECT jhd_mx_jiage.wp_leibie AS 類別, jhd_mx_jiage.wp_migceg AS 名稱,

jhd_mx_jiage.wp_xighao AS 型號(hào), jhd_mx_jiage.jhmx_danwei AS 單位,

jhd_mx_jiage.jhmx_danjia AS 單價(jià) FROM jhd_mx_jiage " & " where

jhd_mx_jiage.wp_leibie='" & Listjhlb & "'"

  Me.Listjhwp.RowSource = str3

  Me.Listjhwp.Requery

 

為組合框、子窗體設(shè)置數(shù)據(jù)源

下面的示例將組合框的 RowSourceType 屬性設(shè)為“Table/Query”,然后將 RowSource 屬性設(shè)為“雇員列表”查詢。

Forms!Employees!cmboNames.RowSourceType = "Table/Query"

Forms!Employees!cmboNames.RowSource = "EmployeeList"

 

一:

Dim str1 As String

  str1 = "SELECT ziyuag.zy_daihao,

ziyuag.zy_mima,ziyuag.zy_ziwu,ziyuag.zy_xigmig FROM ziyuag " & " where

zy_daihao='" & Text8dldh & "'and zy_mima='" & Text10dlmm & "'"

  Me.Child6zy.Form.RecordSource = str1

  Me.Child6zy.Requery

二:

子窗體.FORM.recordsourse="SELECT ziyuag.zy_daihao,

ziyuag.zy_mima,ziyuag.zy_ziwu,ziyuag.zy_xigmig FROM ziyuag " & " where

zy_daihao='" & Text8dldh & "'and zy_mima='" & Text10dlmm & "'"

 

三:

Private Sub Command38_Click()

Dim sjy As String

Dim pd As Integer

pd = True

sjy = "SELECT 病歷明細(xì)表.* FROM 病歷明細(xì)表"

If Not IsNull(Text0) Then

     If pd Then

        sjy = sjy & " where 姓名 like '" & Text0 & "'"

        pd = False

     Else

        sjy = sjy & " and 姓名 like '" & Text0 & "'"

     End If

End If

If Not IsNull(Text1) And Not IsNull(Text2) Then

    sjy = sjy & " where 時(shí)間  between #" & Text1 & "# and #" & Text2 & "#"

    pd = False

    Else

    str2 = str2 & " and 時(shí)間  between #" & Text1 & "# and #" & Text2 & "#"

End If

If Not IsNull(Text3) Then

     If pd Then

        sjy = sjy & " where 姓名 like '" & Text3 & "'"

        pd = False

     Else

        sjy = sjy & " and 姓名 like '" & Text3 & "'"

     End If

End If

Me.子窗體.RowSource = sjy

Me.Requery

End Sub

 

為主窗體、報(bào)表設(shè)數(shù)據(jù)源

使用 RecordSource 屬性可以指定窗體或報(bào)表的數(shù)據(jù)源。String 型,可讀寫。

一:

Dim sjy As String

sjy = "SELECT 名單.* FROM 名單" & " where 姓名 like '*" & List101 & "*'"

Me.RecordSource = sjy

Requery

二:

me.RecordSource = "名單"

 

用其他ACCESS的表作為本ACCESS 窗體的數(shù)據(jù)源

來源:ACCESS中國 Trynew

在Sql語句中的表名前加上數(shù)據(jù)庫名就行了,下面語句動(dòng)態(tài)引用當(dāng)前目錄的另一MDB文件的表做數(shù)據(jù)源:

Private Sub Form_Load()

    Me.RecordSource = "SELECT 表1.* FROM [" & CurrentProject.Path & "\db1.mdb" &

"].表1;"

End Sub

 

 

 

用VBA編程把Excel表中數(shù)據(jù)追加到Access表中

Private Sub Command0_Click()

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "temp",

"c:\temp.xls", yes

End Sub

 

 

VB語句刪除記錄:

 For I = 1 To 20

SQL = "DELETE 訂單明細(xì)ID FROM 訂單明細(xì) WHERE 訂單明細(xì)ID=" & I

DoCmd.RunSQL SQL

Next

或:

CurrentProject.Connection.Execute "DELETE * FROM要?jiǎng)h除記錄的表"

插入/刪除一條記錄

 新建:DoCmd.RunCommand acCmdRecordsGoToNew

 

刪除:DoCmd.RunCommand acCmdDeleteRecord

 

清空表記錄的方法

1、CurrentDb().Execute "delete * from 表名"

2、docmd.runsql "SQL語句"

3,RunSQL "Delete * From 表名"

 

用代碼實(shí)現(xiàn)對(duì)數(shù)據(jù)修改或增加的取消

在窗體中修改數(shù)據(jù)時(shí),關(guān)閉窗體,數(shù)據(jù)已經(jīng)修改,這樣很容易產(chǎn)生錯(cuò)誤數(shù)據(jù).

可采用如下方法解決:

在窗體更新前判斷:

Private Sub FORM_BeforeUpdate(Cancel As Integer)

    If MsgBox("保存嗎?", vbYesNo, Me.Caption) <> vbYes Then

      Cancel = True    

           End If 

End Sub   

' 去除系統(tǒng)的報(bào)錯(cuò)信息: 

 Private Sub FORM_Error(DataErr As Integer, Response As Integer)

    Response = acDataErrContinue

 End Sub 

 

檢查數(shù)據(jù)是否被修改,無則退出,有則詢問是否保存

'在窗體的字段的“屬性”“事件”“更新后”的右邊輸入“=NoAllowSave()”,

'在窗體的“打開”事件中代碼“allowSave = False”

'定義模塊

Option Compare Database

Option Explicit

Public allowSave As Boolean

Public Function NoAllowSave()

    allowSave = True

End Function

“退出”按鈕的單擊事件代碼

If allowSave = True Then

   If MsgBox("當(dāng)前數(shù)據(jù)已經(jīng)被修改,是否保存?", vbYesNo + vbQuestion, "請(qǐng)選擇...") = vbYes Then

   Else

      Me.Undo

   End If

End If

DoCmd.Close

定義記錄集

Dim rst As New ADODB.Recordset

打開記錄集

rst.Open "SELECT 語句, 關(guān)鍵字 FROM 結(jié)果語句表", CurrentProject.Connection, adOpenKeyset,

adLockOptimistic

兩子窗體之間字段賦值:

    Forms!aaa!bbb.Form!bb = Forms!aaa!ccc.Form!cc

 

確定所顯示的當(dāng)前記錄的記錄編號(hào)。

下面的示例顯示如何使用 Currentrecord 屬性來確定所顯示的當(dāng)前記錄的記錄編號(hào)。在通用過程 Currentformrecord

中將當(dāng)前記錄的編號(hào)值賦給變量 Lngrecordnum。

 

Sub CurrentFormRecord(frm As Form)

    Dim lngrecordnum As Long

 

    lngrecordnum = frm.CurrentRecord  'CurrentRecord是當(dāng)前記錄號(hào)

End Sub

讀取最后一條記錄

dlast("字段名","表名")

在字段默認(rèn)值中用此函數(shù)能使該字段的新紀(jì)錄顯示上一條記錄該字段的值

怎樣使窗體一打開就定位到指定記錄上

定義了一個(gè)變量lngbh,要窗體打開時(shí)顯示ID=Lngbh的這條記錄。

DoCmd.OpenForm "formname", acNormal, , "ID =" & LNGBH, acFormEdit,

acWindowNormal

使用API函數(shù)sendmessage,獲得光標(biāo)所在行和列。

Sub getcaretpos(byval  TextHwnd&,LineNo&,ColNo&)

 注釋:TextHwnd為TextBox的hWnd屬性值,  LineNo為所在行數(shù),ColNo為列數(shù)

  dim I&,j&,k& 注釋:獲取起始位置到光標(biāo)所在位置字節(jié)數(shù)         I=SendMessage(TextHwnd,&HB0&,0,0)

j=I/2^16 注釋:確定所在行      LineNo=SendMessage(TextHwnd,&HC9&,j,0)+1

  注釋:確定所在列

  k=SendMessage(TextHwnd,&HBB&,-1,0)

  ColNo=j-k+1

End sub

 

如何在打開窗體時(shí)自動(dòng)到相應(yīng)記錄

用法:DoCmd.RunCommand acCmdRecordsGoToNew

acCmdRecordsGoToFirst 移到第一條記錄

acCmdRecordsGoToLast 移到最后一條記錄

acCmdRecordsGoToNew 新增一條記錄

acCmdRecordsGoToNext 移到下一條記錄

acCmdRecordsGoToPrevious 移到上一條記錄

 

判斷記錄的位置

來自:ACCESS中國  ysf

me.Recordset.AbsolutePosition = 0  '第一條記錄

me.Recordset.AbsolutePosition = me.Recordset.RecordCount -1    '最后一條記錄

me.Recordset.AbsolutePosition=-1  '第一條記錄前 me.Recordset.bof=true

me.Recordset.AbsolutePosition=me.Recordset.RecordCount    '最后一條記錄后

me.Recordset.eof=true

me.Recordset.AbsolutePosition=n    '第n+1條記錄

判斷為是否新增記錄

me.newrecord=true

me.newrecord=false

 

自動(dòng)編號(hào)

一:

=IIf(Left(Nz(DMax("[jhd_id]","jinhuodan",""),0),6)<>Format(Date(),"yyyymm"),Format(Date(),"yyyymm")

& "001",Format(Date(),"yyyymm") &

Format(Val(Right(Nz(DMax("[jhd_id]","jinhuodan",""),0),3))+1,"000"))

二:

=nz(DLookUp("編號(hào)","登記表","[id]=DMax('id','登記表')"))+1

自動(dòng)編號(hào)

方法一按時(shí)間自動(dòng)編號(hào):

dim a,b

a=dmax("[自動(dòng)編號(hào)]","編號(hào)表")+1

b=format(date(),"yyyymm") & 00

if a>b then

me.自動(dòng)編號(hào)=a

else:

me.自動(dòng)編號(hào)=b+1

end if

 

方法二,按時(shí)間自動(dòng)編號(hào):

Dim a As String 

    a = Nz(DMax("銷售單號(hào)", "銷售帳單", ""), 0)

If Left(a, 6) <> Format(Date, "yyyymm") Then

    銷售單號(hào) = Format(Date, "yyyymm") & "01"

  Else

    銷售單號(hào) = Format(Date, "yyyymm") & Format(Val(Right(a, 2)) + 1, "00")

End If

 

方法三,按月分類自動(dòng)編號(hào):

Dim id, date2 As String 

   date2 = "GF" & [部門代碼] & Format([入庫日期], "YYYYMM")

   id = DMax("[rk編號(hào)]", "[入庫單]", "[rk編號(hào)] Like '" & date2 & "???'")

   If IsNull(id) Then

      Me.RK編號(hào) = date2 & "001"

   Else

      Me.RK編號(hào) = date2 & Format(CStr(CInt(Right(id, 3)) + 1), "000")

   End If

按任意輸入的日期值的年月自動(dòng)編號(hào)

Dim a, b, c

c = Format(Me.憑證日期, "yyyymm")

b = Nz(c, 0) * 1000

a = Nz(DMax("[憑證號(hào)碼]", "憑證",

"format(憑證.憑證日期,'yyyymm')=format([forms]![憑證錄入].[憑證日期],'yyyymm')"), 0) + 1

If a > b Then

 Me.憑證號(hào)碼 = a

Else:

 Me.憑證號(hào)碼 = b + 1

End If

新增一條記錄時(shí)使用Right及DMax函數(shù)讓字段的數(shù)字部分自動(dòng)加1

 

答:使用Right及DMax函數(shù)返回字段“FOO”的數(shù)字部分的最大值,然后加1

表達(dá)式為:

="REC-" & right(DMax("FOO", "FOOTable"), _

Len(DMax("FOO", "FOOTable")) - _

InStr(1, DMax("FOO", "FOOTable"), "-")) + 1

 

注意:但如果很多用戶或多個(gè)程序都使用DMax去實(shí)現(xiàn)這個(gè)結(jié)果的話,特別在一個(gè)很大的表中這個(gè)過程會(huì)很慢,所以建議使用DefaultValue,它僅僅使用DMax一次

程序如下,寫在更新事件中

Private Sub SomeField_AfterUpdate()

Dim strMax as string

strMax =DMax("FOO", "FOOTable")

me!HiddenFooCtl = "REC-" & right(strMax, len(strMax) - Instr(1,strMax, "-")) +1

End Sub

用按鈕在窗體中添加新記錄

Private Sub 添加新記錄_Click()

    DoCmd.GoToRecord , , acNewRec

 

End Sub

 

從文本框里輸入新的數(shù)據(jù)庫路徑,然后更新鏈接。

Private Sub Command0_Click()

Dim cat As ADOX.Catalog

Dim tdf As ADOX.Table

Me.txtDBnewNAME.SetFocus

Set cat = New ADOX.Catalog

Set cat.ActiveConnection = CurrentProject.Connection

Set tdf = cat.Tables("mytable")

tdf.Properties("jet oledb:link datasource")=Me.txtDBnewNAME.Text

End Sub

查看當(dāng)前庫的路徑

方法1.

= CurrentProject.Path

方法2.

Dim DBLongname, DBName, DBDir As String

DBLongname = CodeDb.Name

DBName = Dir(DBLongname)

DBDir = Left(DBLongname, Len(DBLongname) - Len(DBName))

MsgBox "數(shù)據(jù)庫所在目錄:" & DBDir

用ADO打開鏈接表

這是我以前十分頭痛的問題,不知道那一堆一串的是什么意思現(xiàn)在知道了,這個(gè)是打開ACCESS的,打開別的表不在此討論之內(nèi)。

    Dim appAccess As ADODB.Connection

    Dim strCn, temp As String

    Dim cat As ADOX.Catalog

    Dim rstEmployees As ADODB.Recordset

    Dim intloop As Integer

    Dim tbl1, tblEmp As ADOX.Table

    Dim idx As ADOX.Index

   

    strCn = "provider=microsoft.jet.oledb.4.0;password=;user id=admin; data

source=" _

          & "C:\Program Files\zhanyexing\123.mdb;Jet OLEDB:Database Password=;"

Set appAccess = New ADODB.Connection

    appAccess.Open strCn

    Set cat = New ADOX.Catalog

    cat.ActiveConnection = appAccess

路徑改成自己的,如果有密碼則在紅色的Password=后面寫上正確的密碼,別的照抄就行了

 

如何更該鏈接表的設(shè)置

來源:ALEX 

例如,數(shù)據(jù)庫當(dāng)前的路徑可以用application.CurrentProject.Path得到,然后用

application.CurrentProject.Path + "\link\abc.mdb"就可以指向數(shù)據(jù)庫安裝目錄下面

link子目錄下的ABC.MDB。

如何在ADP啟動(dòng)時(shí),判斷數(shù)據(jù)庫連接是否有效并重新連接

這是微軟MSDN中,在ADP項(xiàng)目中創(chuàng)建ADP的數(shù)據(jù)庫的默認(rèn)連接的代碼

Public Function sCreateConnection(sSvrName As String, sUID As String, sPWD As

String, sDatabase As String) As String

'********************************************************************

'該函數(shù)在ADP中檢查連接,如果沒有,它將通過輸入?yún)?shù)創(chuàng)建一個(gè)連接

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
vb制作的屏保系統(tǒng),由多張圖片循環(huán)播放,如何在圖片播放時(shí)加上一定的特效,比如百葉窗等等,就像PPT制作的
《數(shù)據(jù)庫基礎(chǔ)及應(yīng)用》期末綜合練習(xí)題
access學(xué)習(xí)過程中收集的一些常用的代碼,一起分享學(xué)習(xí)!
Access:在窗體間傳遞數(shù)據(jù)的OpenForm的第7參數(shù)OpenArgs
如何任意記錄上進(jìn)行編輯,然后保存成一條新的記錄,同時(shí)原記錄沒有發(fā)生改變
excel vba編程 典型實(shí)例.docx
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服