|
|
|
|
コードによるコピー操作 |
objFSO.CopyFile str元ファイル, str新ファイル, True
Set objFSO = Nothing
下記のエラーが発生時
コピー先の容量が少ない時にエラーが発生
|
|
ADOXで使用時、リンクテーブルは使用不可
|
ADOXで、動作する時は、非連結テーブルであること |
|
Accessで、SQLを組み立てるときに、取り扱う文字列に「'」(=シングルクオーテーション、アポストロフィー)が入っていると、エラーになる。 |
|
|
スピンボタンの書き方 |
スピンボタンとは、フォームのテキストボックスの値を上下させるボタンのことです。
通常のツールボックス (ラベルやリストボックスなどのコントロールのかたまり) には入っていません。
どうやってフォームに貼り付けるかというと、フォームをデザインで開いて、
メニューのツール →
ActiveXコントロール →
Microsoft Froms 2.0 SpinButton
を、ドラッグします。
スピンボタンのイベントにアクションを設定しても何にも動かないのですが、コードに無理矢理記述してやると動作するようになります。
Private Sub XXXXXXX_SpinUp()
End Sub
Private Sub XXXXXXX_SpinDown()
End Sub
・・・というように書きます。
(XXXXXXX がスピンボタンの名前です)
以下、サンプル。
'■■■■■■■■■■■
'日付の場合
'■■■■■■■■■■■
'----------------------
'上ボタンを押した時
'----------------------
Private Sub spnDate_SpinUp()
'上下範囲14日以内に制限
txtDate.Value = txtDate.Value + 1
If txtDate.Value > Now() + 14 Then
txtDate.Value = Now() + 14
End If
End Sub
'----------------------
'下ボタンを押した時
'----------------------
Private Sub spnDate_SpinDown()
'上下範囲14日以内に制限
txtDate.Value = txtDate.Value - 1
If txtDate.Value < Now() - 14 Then
txtDate.Value = Now() - 14
End If
End Sub
'■■■■■■■■■■■
'数値の場合
'■■■■■■■■■■■
'----------------------
'上ボタンを押した時
'----------------------
Private Sub spnData_SpinUp()
'上限値=100に設定
txtData.Value = txtData.Value + 1
If txtData.Value > 100 Then
txtData.Value = 100
End If
End Sub
'----------------------
'下ボタンを押した時
'----------------------
Private Sub spnDate_SpinDown()
'下限値=1に設定
txtData.Value = txtData.Value - 1
If txtData.Value < 1 Then
txtData.Value = 1
End If |
|
外部DBとの接続チエック |
Dim CN As New ADODB.Connection
Set CN = CurrentProject.Connection
Dim rsx As New ADODB.Recordset
Dim con2 As New ADODB.Connection
Dim z As String
Dim FileName As String
Dim p As Long
Set con2 = New ADODB.Connection
Set rsx = New ADODB.Recordset
rsx.Open "SELECT * from 対象 ", CN, , , adCmdText
z = rsx.Fields("対象")
FileName = z
p = InStrRev(FileName, "\")
If Mid(FileName, p + 1) <> "ボランテア管理DB.mdb" Then
MsgBox "接続するフアイル名が間違っています"
Exit Sub
End If
con2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & z
On Error GoTo Err
con2.Open
MsgBox "接続しました。"
Exit Sub
Err: MsgBox "ボランテア管理システムと接続設定が間違っています。"
|
|
アクセスよりエクセル出力で罫線 |
myXLS.Range(myXLS.Cells(tt, gg), myXLS.Cells(t, g - 1)).Borders.LineStyle = 1 |
|
アクセスで別ブックのエクセルにデータを出力後、
そのブックを上書きしないで、新ブックにコピーして終了する |
Dim a
Dim b
Dim rst As New ADODB.Recordset
Dim str新ファイル As String
Set rst = New ADODB.Recordset
rst.Open "SELECT * from EX保存", conn, , , adCmdText
If rst.EOF = True Then Exit Sub
a = rst.Fields("保存先")
b = Format(Now, "yyyymmdd")
str新ファイル = a & "\" & b & "一般支出結果" & ".xlsx"
myWKB.Worksheets("一般支出結果").Copy
myXLS.ActiveWorkbook.SaveAs filename:=str新ファイル
myXLS.ActiveWorkbook.Close
myXLS.ActiveWorkbook.Quit
myXLS.Workbooks.Active
myXLS.ActiveWorkbook.Close SaveChanges:=False
myXLS.Quit
MsgBox "出力しました。" |
|
メッセイジボックスにデータを入れる |
MsgBox " " & rs22.Fields("年月日") & "
の同じ日に同じ活動があります" |
|
クロス集計のクエリー作成時
列表示を固定する方法 |
クエリーのデザイン画面で
|
|
クロス集計の結果を新規テーブルに入力する |
SELECT T.* INTO T_cross
FROM [
TRANSFORM Max(個人) AS 個人の最大
SELECT 担当
FROM cross
GROUP BY 担当
PIVOT 時間 In ("1","2","3","4","5","6","7") ]. AS T;
[ ]の中がクエリーです。
外部クエリ-又はDAOで可能 ADOではエラーとなる |
|
UPDATE文でSETする項目を変数にする方法
|
Dim i As Long
Dim x As String
Dim R As Long
Dim S As Long
Dim ss As Long
R = Me.T_予定.Controls("人数")
S = Me.T_予定.Controls("追番E")
Set rs44 = New
ADODB.Recordset
rs44.Open "SELECT
* FROM 予約作業実施一時 WHERE 確認 = true ", cn, , , adCmdText
If Not rs44.EOF Then
For i =
rs44.Fields("追番") To S
Set rs45 =
New ADODB.Recordset
rs45.Open
"SELECT * FROM 時刻 WHERE 追番 = " & i & " ", cn, , , adCmdText
If Not
rs45.EOF Then
x =
rs45.Fields("時刻").Value
With cmd
.CommandText = "UPDATE 予約作業実施一時 SET " & x & " = " & R & " WHERE
GID = " & rs44.Fields("GID") & ""
.CommandType = adCmdText
.Execute
End
With
End If
Next i
End If |
|
フアンクション側に依頼して、西暦から和暦に変換 |
P側
Dim ysa
Dim ysb
Dim ysc
Dim x
' 元データは、2019年6月
ysa = Left(Me.年月, 4)
ysb = Right(Me.年月, 2)
ysc = "01"
aa = DateValue(ysa & "/" & ysb & "/" & ysc)
Call awareki(aa, ab, ac, ad)
x = ab & "年" & ac & "月"
Me.和年月 = x
F側
Public Function awareki(aa As Variant, ab As Variant, ac As Variant, ad As Variant) As Variant
Dim b
Dim c
Dim d
Dim x
Dim cc
Dim dd
Dim y
Dim yy
' Dim warekitosi
' Dim warekituki
' Dim warekihi
b = aa
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.LockType = adLockOptimistic
rs.Open "SELECT * from 元号 order by 始年月日", cn, , , adCmdText
If rs.EOF = True Then
End If
rs.MoveFirst
Do Until rs.EOF
d = rs.Fields("始年月日")
c = rs.Fields("元号")
rs.MoveNext
If rs.EOF Then
yy = c
Exit Do
End If
dd = rs.Fields("始年月日")
cc = rs.Fields("元号")
If b >= d And b < dd Then
yy = c
Exit Do
End If
Loop
x = Year(b) - Year(d) + 1
If x = "1" Then x = "元"
ab = yy & x
ac = Format(b, "mm")
ad = Format(b, "dd")
End Function
|
|
動的配列とRecordCountの例
RecordCountの場合、カーソルの設定が注意
|
Dim vA()
Dim k As Long
Dim xz As Long
Dim rz As Long
rs5.CursorType = adOpenStatic
rs5.Open "SELECT * FROM 商品M ORDER BY 区分,名前", conn, , , adCmdText
If rs5.EOF Then Exit Sub
rz = rs5.RecordCount - 1
ReDim vA(rz, 1)
rs5.MoveFirst
k = 0
Do Until rs5.EOF
vA(k, 0) = rs5.Fields(0)
vA(k, 1) = rs5.Fields(1)
rs5.MoveNext
k = k + 1
Loop
myXLS.Cells(3, 1).Value = "項"
myXLS.Cells(3, 2).Value = "名前"
xz = 4
For k = 0 To rz
myXLS.Cells(xz, 1).Value = vA(k, 0)
myXLS.Cells(xz, 2).Value = vA(k, 1)
xz = xz + 1
Next k
myXLS.Cells(rz + 5, 2).Value = "合計" |
|
|
|
|
|
|
|
|
|