新規記事の投稿を行うことで、非表示にすることが可能です。
2020年01月27日
[Access vba] AccessからExcelファイルを開く。
AccessからExcelファイルを開く。
Dim Objxls As Object
Dim strFile As String
strFile = "\\Server\共有フォルダ\xxxxxxxxxx.xlsx"
Set Objxls = CreateObject("Excel.Application")
With Objxls
.Visible = True
.Workbooks.Open strFile
End With
strFileはExcelファイルのフルパスを指定。
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
2020年01月20日
[Access vba] 複数クエリの連続実行
複数クエリの連続実行
Public Function AutoExecProc()
On Error GoTo ErrProc
DoCmd.SetWarnings 0
With CurrentDb
.Execute "Ini1000_ToolUpdateLog_WK"
.Execute "Ini1700_UplogConsolidation"
.Execute "Ini2000_ToolUpdateLog"
.Execute "Ini2500_ToolUpdateLog_reset"
.Execute "Ini9000_unyoPC_del"
End With
With DoCmd
.OpenQuery "使用者状況", , acReadOnly
.OpenQuery "更新状況_U", , acReadOnly
.OpenQuery "起動回数", , acReadOnly
.OpenQuery "使用状況", , acReadOnly
End With
Proc_EXIT:
DoCmd.SetWarnings 1
Exit Function
ErrProc:
MsgBox Err.Number & " " & Err.Description
Resume Proc_EXIT
End Function
ここでWithステートメントを使っているのは、コーディングをスッキリさせるためです。
(このケースでWithステートメント使っても使わなくてもスピードに大差ありません。)
2020年01月15日
[Access vba] フォーム リボンとナビゲーションウインドウを非表示。
リボンとナビゲーションウインドウを非表示します。
Private Sub Form_Load()
On Error GoTo ErrProc
'リボンを非表示
DoCmd.ShowToolbar "Ribbon", acToolbarNo
'ナビゲーションウインドウを非表示
DoCmd.NavigateTo "acNavigationCategoryObjectType", ""
DoCmd.RunCommand acCmdWindowHide
Proc_EXIT:
Exit Sub
ErrProc:
MsgBox Err.Number & " " & Err.Description
Resume Proc_EXIT
End Sub
ユーザーが使用するフォームの場合などは非表示にしています。
2020年01月10日
[Access vba]レポート 明細行にシーケンスNOを振る。
レポートの明細行にシーケンスNOを振る。
Option Compare Database
Option Explicit
Dim lcount As Long
Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
On Error GoTo ErrProc
lcount = 0
Proc_EXIT:
Exit Sub
ErrProc:
MsgBox Err.Number & " <グループヘッダー0_Format> " & Err.Description
Resume Proc_EXIT
End Sub
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
On Error GoTo ErrProc
lcount = lcount + 1
Me.l_lcount = lcount
Proc_EXIT:
Exit Sub
ErrProc:
MsgBox Err.Number & " <詳細_Print> " & Err.Description
Resume Proc_EXIT
End Sub
[Me.l_lcount]がシーケンスNOとしてレポートの印字する項目。
カウンター[lcount]をグループヘッダー0で初期化。詳細_Printでカウントアップ。
2020年01月06日
[Access vba] フォーム 照会画面や一覧画面のヘッダー項目をクリアする。
フォームの照会画面や一覧画面のヘッダー項目(条件入力欄)をクリアする。
' フォームのヘッダー内の入力条件をクリアする。
' ◆対象コントロール
' ・テキストボックス
' ・コンボボックス
' ・リストボックス
' ・オプショングループ
'
Private Sub Clear_search_conditions()
Dim h_ctl As Control
On Error Resume Next
'フォーム内のヘッダーのコントロールを検索
For Each h_ctl In Me.Section(acHeader).Controls 'ヘッダー項目のみ
With h_ctl
Select Case .ControlType
Case acTextBox 'テキストボックス
If Not .Locked Then '編集ロックしていない項目
.Value = Null
End If
Case acComboBox, acCheckBox 'コンボボックス/リストボックス
.Value = Null
Case acOptionGroup
.Value = "1" 'オプショングループ
End Select
End With
Next h_ctl
Proc_EXIT:
DoCmd.SetWarnings 1
Exit Sub
ErrProc:
' Debug.Print h_ctl.Name
MsgBox Err.Number & " " & Err.Description
Resume Proc_EXIT
End Sub
2019年12月24日
[Access] フォーム上のデータ(レコードセット)を更新。
フォーム上のレコードセットを直接更新するモジュールです。
このケースではサブフォームのレコードセットを更新しています。
Private Sub taisyo_syurui_AfterUpdate()
Dim rs As DAO.Recordset
On Error GoTo Err_Proc
Set rs = Forms![f_メインフォーム]![f_サブフォーム].Form.Recordset.Clone
rs.MoveFirst
Do Until rs.EOF
rs.Edit
Select Case Me.taisyo_syurui
Case 1
rs![List_Taisyo] = True
Case 3
rs![List_Taisyo] = rs![Ship_Flg]
Case 9
rs![List_Taisyo] = False
End Select
rs.Update
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
Forms![f_メインフォーム]![f_サブフォーム].Form.Requery
Proc_Exit:
DoCmd.SetWarnings 1
Exit Sub
Err_Proc:
MsgBox Err.number & " " & Err.description
Resume Proc_Exit
End Sub
サブフォームのList_Taisyoをメインフォームに配置したMe.taisyo_syuruiの値や
サブフォームのShip_Flgの値により更新しています。
Case 1はすべてのデータを真にしています。
Case 3は[Ship_Flg] が真偽の値を[List_Taisyo]にセットしています。
Case 9はすべてのデータを偽にしています。
2019年12月18日
[Access] PCのユーザー名やコンピュータ名を取得する。
PCのユーザー名やコンピュータ名を参照設定を行わす取得します。
(「Windows Script Host Object Model」に参照設定をしない方法です)
Public p_UserName As String
Public p_UserDomain As String
Public p_ComputerName As String
Public Function UserNameGet()
Dim objNetWork As Object
'ネットワークオブジェクトの作成
Set objNetWork = CreateObject("WScript.Network")
'ユーザ名
p_UserName = objNetWork.UserName
'ドメイン名
p_UserDomain = objNetWork.UserDomain
'コンピュータ名
p_ComputerName = objNetWork.ComputerName
Set objNetWork = Nothing
End Function
ついでにドメイン名の取得しています。
この例ではどこでも使えるようにグローバル変数(Publicで宣言)にセットしています。
2019年12月13日
[Excel vba] VBAコードの追加と’変数の宣言を強制する ' CountOfLinesプロパティ
■VBEのツール/オプション/編集の「変数の宣言を強制する」をONにするとOption Explicitが自動で挿入されるので便利なのですが、VBAコードの追加で下記のようなコードを実行すると
With ActiveWorkbook.VBProject.VBComponents.Item("ThisWorkbook").CodeModule
.InsertLines 1,"Private Sub Workbook_SheetSelectionChange" & _
"(ByVal Sh As Object, ByVal Target As Range)"
.InsertLines 2, ""
.InsertLines 3, " Application.ScreenUpdating = True"
.InsertLines 4, ""
.InsertLines 5, "End Sub"
End With
下のようにOption Explicitが挿入文の下に入ってしまいエラーになります。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = True
End Sub
Option Explicit
■この様な時はCountOfLinesプロパティでモジュールの行数を取得し,
既存のコードの次の行に挿入するようにします。
With ActiveWorkbook.VBProject.VBComponents.Item("ThisWorkbook").CodeModule
.InsertLines (.CountOfLines + 1), _
"Private Sub Workbook_SheetSelectionChange" & _
"(ByVal Sh As Object, ByVal Target As Range)" & vbCrLf & _
vbCrLf & _
" Application.ScreenUpdating = True" & vbCrLf & _
vbCrLf & _
"End Sub" & vbCrLf
End With
もちろん、これはOption Explicitの自動挿入のケースだけでなく、
新規モジュールや既存のコードの最後に挿入するときにも使えます。
◇準備 VBAからVBAコードを追加変更するには、下記の設定が必要になります。
・参照設定にMicrosoft Visual Basic for Applications Extensibilityを追加する。
・「VBAプロジェクト オブジェクトモデルへのアクセスを信頼する」オプションを指定する。
(ファイル/オプション/トラストセンターもしくはセキュリティーセンター/トラストセンターの設定/開発者向けのマクロ設定)
2019年12月07日
[Access] 四捨五入、切り上げ、切り下げ
四捨五入、切り上げ、切り下げの手法は様々あると思いますが、
参考として記載します。
AccessではExcelのような四捨五入するROUND関数や
ROUNDUP,ROUNDODOWNなどの関数はありません。
AccessのROUND関数は「偶数丸め」という端数処理をするので
四捨五入には使用しません。
(「偶数丸め」を使用する場合もありますが、ここでは一般的なケースを紹介します)
四捨五入する場合
例として金額[kingaku]を出す計算で、単価[[tanka]]は通貨型、
数量[suryo]は長整数にしています。
負の数を考慮するのでintではなくFixで、Sgnを使います。
kingaku = Fix([suryo] * [tanka] + (0.5 * Sgn([suryo])))
切り上げは、0.9を足す方法です。
kingaku = Fix([suryo] * [tanka] + (0.9 * Sgn([suryo])))
切り捨ては
kingaku = Fix([suryo] * [tanka] * Sgn([suryo]))
100の位で四捨五入する場合
Fix(([フィールド名] / 100) + (0.5 * Sgn([フィールド名]))) * 100
小数点第一位で四捨五入する場合
Fix(([フィールド名] * 10) + (0.5 * Sgn([フィールド名]))) / 10
トラブル対応
2019年12月01日
[Access] 数字から日付の表示形式と日付型に変換
数字から日付の表示形式に変換するにはFormat関数を使用します。
Format([フィールド名],"0000/00/00")
このFormat関数の戻り値は文字列なので、
Variant型の変数にセットすると変数はString型に変わります。
また、日付型の変数やフィールドにセットすると日付とをして格納されます。
テーブル作成クエリーで、Format関数を使い数字を日付表示形式で出力すると、
やはりフィールドの型はStringになります。
選択クエリーなどからExcelに出力した時、見た目は日付ですが、
Excelの表示形式は文字列となるので注意が必要です。
日付型で出力したい時は次のDateSerialを使います。
数字から日付型に変換するにはDateSerial関数を使用します。
DateSerial(Mid([フィールド名], 1, 4), Mid([フィールド名], 5, 2), Mid([フィールド名], 7, 2))
DateSerial関数を使わずに日付型にしたいときは、
CDate関数とFormat関数を組み合わせて日付型に変換します。
CDate(Format([フィールド名],"0000/00/00"))