个人博客 用于记载日常收集的一些技术文章 ...
Access : 选中行 Access : 选中行 Dim aSelTop As Long, aSelCount As Long


Private Sub 子窗体_Exit(Cancel As Integer)

aSelTop = Me.子窗体.Form.SelTop '从第n行 开始选中
aSelCount = Me.子窗体.Form.SelHeight '共选中x行

End Sub

Private Sub 追加_Click()

Dim i As Long, aControls As Controls, aControl As Control

Set aControls = Me.临时表子窗体.Form.Controls

Me.临时表子窗体.SetFocus


For i = 0 To aSelCount - 1 '逐行读取

Me.子窗体.Form.SelTop = aSelTop + i

If Me.临时表子窗体.Form.NewRecord <> True Then

DoCmd.RunCommand acCmdRecordsGoToNew '定位到 新增行
End If

For Each aControl In aControls

If aControl.ControlType <> acLabel Then

aControl.Value = Me.子窗体.Form.Controls(aControl.Name).Value '逐个字段赋值
End If

Next aControl

Me.临时表子窗体.Form.Recalc
Next

End Sub

郭少锋 创建 2025-01-08 15:42:05 Access
Access : For 循环 遍历数组 Access : For 循环 遍历数组 在VBA中,你可以使用For循环来遍历数组。以下是一个简单的例子,展示了如何在Access VBA中创建一个数组,并使用For循环来遍历它。

Sub LoopThroughArray()

Dim arr() As Variant
Dim i As Integer

arr = Array("Apple", "Banana", "Cherry") ' 初始化数组

For i = LBound(arr) To UBound(arr) ' 使用For循环遍历数组

Debug.Print arr(i) ' 输出数组元素到立即窗口
Next i
End Sub

在这个例子中,LBound函数用于获取数组的最小索引(即0,除非数组是以非零为起始的下标),而UBound函数用于获取数组的最大索引。For循环会在这个范围内迭代,并且Debug.Print语句用于将数组的当前元素打印到VBA编辑器的Immediate窗口(可以通过按Ctrl + G在VBA编辑器中打开)。
郭少锋 创建 2025-01-07 17:36:18 Access
Access : 取得 筛选条件 Access : 取得 筛选条件 '子窗体的筛选条件 发生变化,填写到 主窗体的【筛选条件】文本框

Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)

Me.Parent!筛选条件.Value = Me.Form.Filter
End Sub
郭少锋 创建 2025-01-06 18:07:13 Access
Access : 代码分行录入 Access : 代码分行录入 Public Function ReportSheet(rpt As Report, _
ByVal RowsOfPage As Integer, _
Optional ByVal Style As Integer = 0, _
Optional ByVal HasColumnHeader As Boolean = True)
郭少锋 编辑 2025-01-03 17:19:16 创建 2025-01-03 15:48:09 Access
Access : 报表:显示隐藏 分页符 Access : 报表:显示隐藏 分页符 Option Compare Database
Option Explicit

Dim 当前行号 As Long
Dim 每页行数 As Integer

Private Sub Report_Open(Cancel As Integer)
DoCmd.Maximize
End Sub


Private Sub 主体_Format(Cancel As Integer, FormatCount As Integer)

每页行数 = 3
当前行号 = 当前行号 + 1

If 当前行号 > 每页行数 Then

Me.分页符1.Visible = True: 当前行号 = 0
Else
Me.分页符1.Visible = False
End If

End Sub

郭少锋 创建 2025-01-03 17:18:55 Access
Access : ForceNewPage 强制分页 Access : ForceNewPage 强制分页 Section.ForceNewPage【强制分页】

使用 ForceNewPage 属性可以指定窗体节 (详细信息、页脚) 还是报表节 (页眉、详细信息、页脚) 打印在单独的页面上,而不是在当前页上打印。 可读/写 Byte 类型。


例如,可能将报表的最后一页定义为订单。 如果报表页脚的 ForceNewPage 属性设置为“节前”,则订单总打印在新的一页。

ForceNewPage 属性不适用于页面页眉或页面页脚。

ForceNewPage 属性使用下列设置:

0:无,(默认) 当前部分 (要为其设置属性) 部分打印在当前页上。
1:节前,当前节在新页的顶部打印。
2:节后,紧跟当前节的下一节在新页的顶部打印。
3:节前和节后,当前节在新页的顶部打印,下一个节也将在另一新页的顶部打印。


以下示例返回“按日期销售额”报表的详细信息部分的 ForceNewPage 属性设置,并将其分配给 变量intGetVal。

Dim intGetVal As Integer
intGetVal = Reports![Sales By Date].Section(acDetail).ForceNewPage

----------

Access中的ForceNewPage属性‌用于控制报表或窗体节的分页行为。该属性可以指定窗体节(如主体节、页脚)是否在新的一页中打印,而不是在当前页继续打印。ForceNewPage属性适用于报表的主体节,但不适用于页面页眉或页面页脚‌12。
使用方法

1. 在报表设计中使用ForceNewPage属性‌:
打开报表设计视图。
选择需要设置分页的节(如主体节)。
在属性的设置中,找到ForceNewPage属性并设置为True或False,以控制是否在新的一页打印。

2. 在代码中动态设置ForceNewPage属性‌:
在报表的代码界面中,可以通过编写VBA代码来动态控制分页行为。例如,可以在报表的Format事件中编写如下代码:

这段代码会在每打印完指定行数后【强制分页】。

Private Sub 主体_Format(Cancel As Integer, FormatCount As Integer)

If 序号 Mod 每页行数 = 0 Then

Me.主体.ForceNewPage = True
Else
Me.主体.ForceNewPage = False
End If

End Sub


以下是一个简单的示例代码,演示如何在报表的Format事件中设置ForceNewPage属性:
这段代码会在每打印完指定行数后强制分页,否则在当前页继续打印。

Private Sub 主体_Format(Cancel As Integer, FormatCount As Integer)

If Me.Section(acDetail).ForceNewPage = 1 Then

Me.Section(acDetail).ForceNewPage = 0 '在当前页继续打印

ElseIf row Mod 每页行数 = 0 Then '每打印完指定行数后强制分页

Me.Section(acDetail).ForceNewPage = 1 '新一页打印
End If

End Sub

郭少锋 创建 2025-01-03 15:46:28 Access
Access : Access 包含文字 Access : Access 包含文字 在 Microsoft Access VBA 中,通常你会使用字符串函数来判断文本是否包含某些文字或字符。常用的函数有 InStr,它可以帮助你判断一个字符串中是否包含另一个子字符串。
使用 InStr 函数

InStr 是 VBA 中用来查找子字符串的一个函数。如果在一个字符串中找到了另一个子字符串,它会返回该子字符串的起始位置;如果没有找到,则返回 0。
语法:

InStr([start], string1, string2, [compare])

start:可选,指定搜索开始的位置,默认为 1。
string1:要搜索的字符串。
string2:要查找的子字符串。
compare:可选,指定比较方式(默认是二进制比较)。可以是 vbTextCompare(忽略大小写)或 vbBinaryCompare(区分大小写)。

示例代码

以下是一些常见的示例,展示如何使用 InStr 来判断一个字符串是否包含另一个字符串。
示例 1:判断字符串是否包含某个单词

假设你有一个字符串 "Hello, welcome to Access VBA",你想判断是否包含 "Access" 这个词。

Dim str As String
Dim searchTerm As String

str = "Hello, welcome to Access VBA"
searchTerm = "Access"

If InStr(1, str, searchTerm, vbTextCompare) > 0 Then
MsgBox "包含文字: " & searchTerm
Else
MsgBox "不包含文字: " & searchTerm
End If

解释:

InStr(1, str, searchTerm, vbTextCompare) 返回 "Access" 在字符串 str 中的位置。如果返回值大于 0,说明包含该文字。
vbTextCompare 参数表示忽略大小写进行比较。

示例 2:查找不区分大小写

如果你希望查找字符串时不区分大小写,可以使用 vbTextCompare:

Dim str As String
Dim searchTerm As String

str = "This is an Example of VBA"
searchTerm = "example"

If InStr(1, str, searchTerm, vbTextCompare) > 0 Then
MsgBox "找到匹配项!"
Else
MsgBox "没有找到匹配项"
End If

这里,InStr 将不区分大小写查找 "example"。
示例 3:查找子字符串的位置

如果你只想获取子字符串在字符串中的位置,可以直接使用 InStr 并处理其返回值。例如,找出 "Access" 在字符串中的位置:

Dim str As String
Dim position As Integer

str = "Hello, welcome to Access VBA"
position = InStr(1, str, "Access", vbTextCompare)

If position > 0 Then
MsgBox "Access 位置: " & position
Else
MsgBox "未找到 Access"
End If

解释:

InStr(1, str, "Access") 返回 "Access" 在 str 中的起始位置。如果返回 0,则表示没有找到。

小结

使用 InStr 函数可以方便地检查一个字符串中是否包含另一个字符串。
InStr 返回的是子字符串的起始位置,如果返回 0,则表示未找到子字符串。
可以通过设置 compare 参数来控制是否忽略大小写。
郭少锋 创建 2024-12-30 17:53:31 Access
Access : Access 设置子窗体 筛选器条件 Access : Access 设置子窗体 筛选器条件 '设置子窗体的筛选器条件
Me.frmChild.Form.Filter = strWhere

'应用筛选
Me.frmChild.Form.FilterOn = True
郭少锋 创建 2024-12-30 12:08:06 Access
Access : Access 隐藏 工具栏 Access : Access 隐藏 工具栏 使用Access的DoCmd对象来控制用户界面

DoCmd.SelectObject acForm, "230 价格库", True '在【导航窗格】中 选中名为【230 价格库】的【窗体】

DoCmd.ShowToolbar "Ribbon", acToolbarYes ' 显示工具栏,不用修改
DoCmd.ShowToolbar "Ribbon", acToolbarNo ' 隐藏工具栏

DoCmd.RunCommand acCmdWindowHide ' 隐藏侧边栏


If Me.Command8.Caption = "查看系统" And Me.Text9.Value = "xxxx" Then

DoCmd.SelectObject acForm, , True
Me.Command8.Caption = "隐藏系统"

DoCmd.RunCommand acCmdDatabaseWindow
DoCmd.SelectObject acTable, , True
DoCmd.RunCommand acCmdDesignView
Exit Sub
Else

MsgBox ("密码错误")
End If

If Me.Command8.Caption = "隐藏系统" Then

DoCmd.SelectObject acForm, , True
DoCmd.RunCommand acCmdWindowHide
Me.Command8.Caption = "查看系统"
Exit Sub
End If


隐藏 状态栏

打开Access数据库并进入设计视图。

点击“选项”按钮,在弹出的菜单中选择“当前数据库”。

在“当前数据库”选项卡下,找到“导航选项”部分。

在“导航选项”部分中,取消选中“显示状态栏”复选框。

点击“确定”按钮保存更改并关闭选项对话框。

返回主视图,你将发现状态栏已经被隐藏了。
郭少锋 编辑 2024-12-27 11:51:57 创建 2024-12-27 11:31:23 Access
Access : Access 子窗体 定位记录 Access : Access 子窗体 定位记录 Me!Sub1.Form.Recordset.MoveNext
Forms![220 单据管理]!Sub1.Form.Recordset.MoveNext

MoveFirst ' 移动到 第一条记录
MoveNext ' 移动到 下一条记录

----------------------------------------------------------------------------------------------------
' 假设子窗体名为 ChildForm,需要定位的记录在字段 FieldName 中的值为 ValueToFind

Dim subformControl As Form
Dim subform As Form
Dim rs As DAO.Recordset

Set subformControl = Me!ChildForm
Set subform = subformControl.Form
Set rs = subform.RecordsetClone

rs.MoveFirst ' 移动到第一条记录


Do While Not rs.EOF ' 循环直到找到匹配的记录或到达记录集的末尾

If rs!FieldName = ValueToFind Then ' 定位到子窗体中匹配的记录

subformControl.SetFocus
subform.Bookmark = rs.Bookmark
Exit Do
End If
rs.MoveNext
Loop

' 清理
rs.Close
Set rs = Nothing
Set subform = Nothing
Set subformControl = Nothing

郭少锋 编辑 2024-12-25 17:21:44 创建 2024-12-25 17:17:22 Access