VBA | ||||||||
*プロシージャー *ストアードプロシジャー |
||||||||
* フアンクション |
||||||||
*プライベート *パブリック |
||||||||
参照設定 *動作に必要な機能は、参照設定で、チエックを入れておくこと *使用環境に、合わせてActiveXコントロールの条件をあわす *EXCELのライブラリーは、使用環境に合うバージョンに設定しないで、レイトバイデングによりEXCELのバージョンに依存しない方法をとること |
||||||||
一般 | 変数 | * Dim ?? As で型を指定 As以後を指定しない場合はバリアント型 |
||||||
定数 | ||||||||
引数 | ||||||||
*実際の開発は各オブジェクトのプロパテイにイベントなどを設定して作る |
||||||||
*フオームとレポートのプロシジャ-は一般的にはプライベートプロシージャーにより機能させる | ||||||||
*テキストエデッタの活用 メモ帳でもよいが文字数、改行などの表示がないので、専用のテキストエデッタを使用すること |
||||||||
*NULLとスペース 見た目は違いが判らないにで、注意すること スペースも文字の一種 NULLはデータが無くからっぽ |
||||||||
*全角のスペース 特に、全角のスペースは、""の中以外では使用しないこと |
||||||||
*クエリ-のSQL文はVBAのSQL文には使用できない |
||||||||
一般 |
手形番号 = '" & Me.手形番号 & "' |
|||||||
日付 |
入金日 = #" & Me.選択日 & "# |
|||||||
数字 |
CD = " & Me.項 & " |
|||||||
true,falseは、数字扱いとする |
自治会会計 | |||||||
LIKE文(MDB) |
WHERE お客様名 like '" & a & "%" & "' | |||||||
NZ関数とIIF関数 |
A = Nz(Me.詳細子.Form.小計.Value, 0)
A = IIf(IsNull(Me.詳細子.Form.小計.Value), 0, Me.詳細子.Form.小計.Value) |
|||||||
例えば、伝票番号などのデータをテーブルに登録時、 データ格納後、見ると半角スペースが勝手にデータの先頭に入っていることがある ----trim で対応 |
rs4("伝票") = Trim(yy) rs4("買掛先CD") = Me.買掛先CD rs4("買掛会社") = Me.買掛先名 rs4.Update rs4.Close |
|||||||
日付が空白の場合の対応 |
a = Me.振出日.Value b = Me.入金期日.Value c = Me.裏書日.Value
If IsNull(Me.振出日) = True Then a = "Null" Else a = "#" & Me.振出日 & "#" If IsNull(Me.入金期日) = True Then b = "Null" Else b = "#" & Me.入金期日 & "#" If IsNull(Me.裏書日) = True Then c = "Null" Else c = "#" & Me.裏書日 & "#"
With cmd .CommandText = "UPDATE 受取手形 SET 種類 = '" & Me.種類 & "',売掛先CD = '" & Me.売掛先CD & "',売掛先名 = '" & Me.売掛先名 & "',裏書先 = '" & Me.裏書先 & "',振出日 = " & a & ",入金期日 = " & b & ",入金銀行 = '" & Me.入金銀行 & "',裏書日 = " & c & ",金額 = '" & Me.金額 & "' where 手形番号 = '" & Me.手形番号 & "'"
.CommandType = adCmdText .Execute End With |
|||||||
金額の計算--必ずCcurで囲むこと |
Dim a As Currency Dim b As Currency a = Me.入金支払金額 b = Me.補正
Me.実金額 = CCur(a + b) |
|||||||
コンポボックスの2列目の表示方法 |
Private Sub 得意先コード_AfterUpdate() '得意先コードコンボボックスの更新後処理 With Me!得意先コード 'コンボボックスの2列目を得意先名テキストボックスに代入 Me!得意先名 = .Column(1) 'コンボボックスの3列目を得意先名テキストボックスに代入 Me!担当者名 = .Column(2) End With |
|||||||
SQLsvrer接続時 データ登録などで、テーブル側の桁数を見てる場合がある |
Trim を使用しないと データ登録、更新ができない |
|||||||
自分のPCのID取得方法 |
標準モジュールにAPI関数を作成 Option Compare Database Declare Function GetComputerName Lib "kernel32" Alias _ "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Public Function GetMyComputerName() As String '自分のパソコンのコンピュータ名を返す Dim strCmptrNameBuff As String * 21 'API関数によってコンピューター名を取得します 'コンピュータ名は変数strCmptrNameBuffに返されます GetComputerName strCmptrNameBuff, Len(strCmptrNameBuff) '後続のNullを取り除いて返り値を設定します GetMyComputerName = Left$(strCmptrNameBuff, InStr(strCmptrNameBuff, vbNullChar) - 1) End Function 実際のフオームのプロシジャーに作成 Private Sub PC_Click() Dim A A = GetMyComputerName() Me.PC = A End Sub |
|||||||
ADOでの接続例----通常接続 |
Dim CN As ADODB.Connection Dim rs3 As New ADODB.Recordset Dim rs As New ADODB.Recordset Dim rs7 As New ADODB.Recordset Dim cmd As New ADODB.Command Set CN = CurrentProject.Connection Set cmd.ActiveConnection = CN |
|||||||
ADOでの接続例----接続時にオープンする |
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset conn.ConnectionString = CurrentProject.BaseConnectionString conn.Open Dim cmd As New ADODB.Command Set cmd.ActiveConnection = conn |
|||||||
レコードセット時、フオームに反映した後、データ修正が不可----すべてのデータを反映できる |
rs.Open "SELECT 伝票番号,お客様,受付日,品名,型番,メーカ,出荷日 from 受注オーダ WHERE 伝票番号= '" & a & "'", conn, , , adCmdText If rs.EOF Then Exit Sub Me![伝票番号].ControlSource = "伝票番号" Me![お客様].ControlSource = "お客様" Me![受付日].ControlSource = "受付日" Me![品名].ControlSource = "品名" Me![メーカ].ControlSource = "メーカ" Me![型番].ControlSource = "型番" Me![出荷日].ControlSource = "出荷日" Set Me.Recordset = rs Me.Requery |
|||||||
INSERT INTO文で、別な方法を列記 |
cur2.Execute "INSERT INTO 一時(伝票番号,連絡,お客様,品名,受付日,依頼番号,担当,仕事,会社) VALUES('" & rec(0) & "','" & rec(12) & "','" & rec(6) & "','" & rec(17) & "',#" & rec(23) & "#,'" & rec(64) & "','" & rec(38) & "','" & rec(65) & "','" & rec(66) & "')", adCmdText + adExecuteNoRecords (注意) cur2は、レコ-ドセットの変数、 rec(23) などは、配列を使用した場合のデータ変数 をあらわす。 |
|||||||
レコードセット時、フオームに反映した後、データ修正が可能 |
rs.Open "SELECT * from 受注オーダ where 受注番号 = '" & Me.受注番号A & "'", CN, , , adCmdText If rs.EOF = True Then Exit Sub Me.[受注番号].Value = rs.Fields("受注番号") Me.[不動産先コード].Value = rs.Fields("不動産先コード") Me.[顧客].Value = rs.Fields("顧客") Me.[契約日].Value = rs.Fields("契約日") Me.[着工日].Value = rs.Fields("着工日") Me.Requery バリューを使用する |
|||||||
更新、削除などをクエリーで、処理したい場合、ACCESSのメッセイジを出ないようにする |
DoCmd.SetWarnings False |
|||||||
条件なして、テーブルデータのデータ削除 |
With cmd .CommandText = "DELETE * FROM 仮オーダ" .CommandType = adCmdText .Execute End With |
|||||||
ADP
(SQLserver接続)で、ストア-ドプロシジャーを使用して、DoCmdを使用する場合 (ADP-専用) |
DoCmd.SetWarnings False DoCmd.OpenStoredProcedure "dbo.delete_一時売上_1" ストアードプロシジャーの前に、dbo. を追記すること |
|||||||
コンポボックスのデータで、クエリを使用しない場合、Loadイベントにセットする |
Private Sub Form_Load() Me.科目上.RowSourceType = "Value List" Me.科目上.RowSource = "費用;収益" Me.税区分.RowSourceType = "Value List" Me.税区分.RowSource = "外税;内税" Me.Calendar4.Value = Date End Sub |
|||||||
カレンダーコントロールの日付をフォームを開く時、セットする場合 Open()にDoCmd.Maximizeがあると、Me.Calendar5.Valueは無視される |
Private Sub Form_Open(Cancel As Integer) Dim hMenu As Long 'システムメニューのハンドルを取得 hMenu = GetSystemMenu(Application.hWndAccessApp, 0) '閉じるボタンを無効にする DeleteMenu hMenu, SC_CLOSE, MF_BYCOMMAND 'メニューを再描画 ' DrawMenuBar Application.hWndAccessApp DoCmd.Maximize ------------------------------------------------------ Private Sub Form_Load() Me.chk_B = False Me.Calendar5.Value = Date --------- 効かない End Sub |
|||||||
印刷のプレビューで、印刷をするかしないかを確認 |
DoCmd.OpenReport "入金一覧表", acPreview If MsgBox("印刷してもよいですか", vbYesNo) = vbNo Then
DoCmd.Close Else On Error Resume Next DoCmd.RunCommand acCmdPrint DoCmd.Close End If |
|||||||
非連結でレポートを作成する場合(MDB)----Set Me.Recordset = rs は使用できない |
Dim b Dim c Dim x As String Dim y c = Forms!支払手形支払期日予定表.[指定日].Value If IsNull(c) Then Exit Sub b = "and 完 = '" & 0 & "'"
y = DateAdd("d", 3, c)
Dim cn As ADODB.Connection Dim rs6 As New ADODB.Recordset Set cn = CurrentProject.Connection rs6.CursorLocation = adUseServer rs6.CursorType = adOpenStatic rs6.LockType = adLockOptimistic rs6.Open "SELECT * from 支払手形 WHERE 支払期日 >= #" & y & "# " & b & " ORDER BY 支払期日 DESC", cn, , , adCmdText If rs6.EOF Then Exit Sub
x = "SELECT * from 支払手形 WHERE 支払期日 >= #" & y & "# " & b & " ORDER BY 支払期日 DESC" Me![手形番号].ControlSource = "手形番号" Me![種類].ControlSource = "種類" Me![買掛先CD].ControlSource = "買掛先CD" Me![買掛先名].ControlSource = "買掛先名" Me![裏書先].ControlSource = "裏書先" Me![振出日].ControlSource = "振出日" Me![支払期日].ControlSource = "支払期日" Me![支払銀行].ControlSource = "支払銀行" Me![裏書日].ControlSource = "裏書日" Me![顛末日].ControlSource = "顛末日" Me![顛末区分].ControlSource = "顛末区分" Me![金額].ControlSource = "金額" Me![決済金額].ControlSource = "決済金額" Me![補正].ControlSource = "補正" Me![補正内訳].ControlSource = "補正内訳" Me![完].ControlSource = "完" Me![更新日].ControlSource = "更新日" Me.RecordSource = x |
|||||||
途中で、プリンタを切り替えて印刷する |
Dim prtDefault As Printer '現在のプリンタ設定を退避 Set prtDefault = Application.Printer '選択されたプリンタの情報を設定 Set Application.Printer = Printers.Item(DeviceName & "SHARP AR-C260S SPDL-c") 'レポートを開く DoCmd.OpenReport "日売上印刷" 'プリンタ設定を元に戻す Set Application.Printer = prtDefault DoCmd.Close |
|||||||