アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

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ファイルのフルパスを指定。



posted by naka at 12:57 | TrackBack(0) | Access vba

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ステートメント使っても使わなくてもスピードに大差ありません。)




posted by naka at 17:05 | TrackBack(0) | Access vba

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


ユーザーが使用するフォームの場合などは非表示にしています。



posted by naka at 08:10 | TrackBack(0) | Access vba

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でカウントアップ。



posted by naka at 11:45 | TrackBack(0) | Access vba

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




posted by naka at 08:11 | TrackBack(0) | Access vba

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はすべてのデータを偽にしています。





posted by naka at 10:46 | TrackBack(0) | Access vba

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で宣言)にセットしています。



posted by naka at 08:16 | TrackBack(0) | Access vba

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プロジェクト オブジェクトモデルへのアクセスを信頼する」オプションを指定する。
(ファイル/オプション/トラストセンターもしくはセキュリティーセンター/トラストセンターの設定/開発者向けのマクロ設定)




posted by naka at 14:07 | TrackBack(0) | Excel 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





トラブル対応
posted by naka at 07:49 | TrackBack(0) | Access VBA 関数

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"))




posted by naka at 14:00 | TrackBack(0) | Access VBA 関数
カテゴリーアーカイブ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。