标签: access-vba

通过Access VBA代码保存查询

我需要通过VBA代码"物理地"创建SQL查询.我知道如何在VBA中执行查询,但我需要将其保存在菜单中.如果可以,我会张贴一张照片.我会试着让你想象.

在MS Access的主屏幕中,左侧有一个栏.

为了说清楚,"Consulta"是葡萄牙语查询.

如果你不理解我,请原谅我缺乏解释.我很乐意再次解释.

ms-access vba access-vba

1
推荐指数
1
解决办法
1万
查看次数

以编程方式创建一个在Access中打开窗体的按钮

当我的数据库打开时,它会显示一个带有"加载栏"的表单,该表单在显示"主菜单"表单之前报告链接外部表等的进度.主菜单有一些代码,可以在幕后以编程方式生成一个表单,上面有按钮,当它完成后,它会保存并重命名表单,并将其指定为SourceObject子表单.

这一切都很好,花花公子,也就是说,直到我决定让按钮实际做一些有用的事情.在生成按钮的循环中,它将VBA代码添加到子窗体的模块中.出于某种原因,这样做会使VBA完成执行,然后停止.这使得(模态)加载形式不会消失,因为有一个If语句DoCmd.Close在完成加载时执行a 来关闭加载表单.它还会破坏依赖于所设置的全局变量的功能,因为在执行暂停时会清除全局变量.

有没有更好的方法来创建以编程方式执行操作的按钮,而不是放弃直接访问和编写实际代码?尽管我很乐意,但是如果我离开公司,我不得不在Access中这样做,以便那些技术娴熟的员工在我缺席的情况下仍能使用它.

如果需要,下面是相关代码的点点滴滴.

Form_USysSplash:

'Code that runs when the form is opened, before any processing.
Private Sub Form_Open(Cancel As Integer)
    'Don't mess with things you shouldn't be.
    If g_database_loaded Then
        MsgBox "Please don't try to run the Splash form directly.", vbOKOnly, "No Touching"
        Cancel = True
        Exit Sub
    End If

    'Check if the user has the MySQL 5.1 ODBC driver installed.
    Call CheckMysqlODBC 'Uses elfin majykks to find if Connector/ODBC is installed, …
Run Code Online (Sandbox Code Playgroud)

ms-access vba access-vba ms-access-2010

1
推荐指数
1
解决办法
1万
查看次数

从Access打开Excel工作簿宏

首先,我搜索并阅读了类似的线程,我已经尝试了所提出的解决方案并解决了其他人的问题(主要使用工作簿名称周围的单引号),但它在我的情况下没有用.

我想要做的很简单:我想从Access调用Excel工作簿.工作簿已经打开(使用VBA),因此这不是关闭工作簿的问题.以下是我尝试运行宏的方法:

Application.Run "'" & xlWb.Path & "\" & xlWb.Name & "'" & "!mainParcourirTrouverItem"
Run Code Online (Sandbox Code Playgroud)

结果是:

'I:\47491\...\Trouver items global.xlsm'!mainParcourirTrouverItem

我尝试了一些变体,比如不使用完整路径(仅文件名),不使用单引号,在子名称的末尾添加括号...

另外,我仔细检查了子名的拼写是否正确.我真的不明白:|

哦,只是为了给出上下文,这里是这个代码的完整子:

Private Sub Commande10_Click()
    Dim xlApp As Excel.Application
    Dim xlWb As Excel.Workbook

    Set xlApp = New Excel.Application

    With xlApp
        .Visible = False
        Set xlWb = .Workbooks.Open(FichierImportExcel, ReadOnly:=True)
    End With

    Application.Run "'" & xlWb.Path & "\" & xlWb.Name & "'" & "!mainParcourirTrouverItem"

'    Call importer_transitsrubriques_Click
End Sub
Run Code Online (Sandbox Code Playgroud)

非常感谢.

excel vba ms-access-2007 excel-vba access-vba

1
推荐指数
1
解决办法
7121
查看次数

如何获取表单的最后一个记录ID?

我目前有一个访问表单.

我想要做的是获取最后一条记录的值.

例如,如果我有10条记录,我想得到值"10",因为这是添加的最后一条记录的id.我试图使用函数last id inserted()运行查询,但它不起作用.

这是我正在使用的代码:

Dim lastID As Integer
Query = "select last_insert_id()"
lastID = Query
MsgBox (lastID)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

access-vba

1
推荐指数
1
解决办法
3万
查看次数

透视多个字段并从Access导出

我为制造工厂构建了一个访问应用程序,并为他们提供了一个报告,列出了流程中的不同数据点.我有办法生成如下所示的报告.

 Batch     Zone    Value1     Value 2   etc.
 25        1       5          15
 25        2       12         31
 26        1       6          14 
 26        2       10         32
Run Code Online (Sandbox Code Playgroud)

但是,需要以不同的格式查看数据.他们希望每批一行,所有数据都是水平的.像这样...

                Zone 1                Zone 2
 Batch     Value1     Value2     Value1     Value2
 25        5          15         12         31
 26        6          14         10         32
Run Code Online (Sandbox Code Playgroud)

总共将有157列,如第二个示例中所示.有7个唯一的字段名称,但其余的是14种不同的重复数据类型.我无法获得以他们想要的格式显示数据的查询,这是因为字段名称是相同的,但是第一种方式并不难.我可以使用VBA将数据插入表中,但我不能使用重复的字段名称,所以当我将其导出到Excel时,字段名称不会有任何意义,并且不能有部分(如zone1)我可以将报告链接到此,但报告宽度只能是22",所以我必须导出然后在另一端进行excel表的一些vba处理,以便清晰地显示.

我可以将数据转换为格式#1,有什么方法可以根据批号在一个长行中显示数据?有没有其他人知道这是如何可行的?

对任何建议开放.谢谢!

sql ms-access vba ms-access-2007 access-vba

1
推荐指数
1
解决办法
1581
查看次数

在VBA中将表单对象作为类参数传递

我有一个名为cls_Utilitario的类,其方法如下:

Public Function LimparCampos(arg_form As Object)
    Dim campo As Control

    For Each campo In arg_form.Controls
        With campo
            Select Case .ControlType
                Case acComboBox, acTextBox
                    .Value = Null
            End Select
        End With
    Next campo

    Set campo = Nothing
    Set arg_form = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)

我在表单中有以下代码:

Private Sub btnNovo_Click()
    Dim obj_Utilitario As cls_Utilitario

    Set obj_Utilitario = New cls_Utilitario
    obj_Utilitario.LimparCampos (Me.Form)

End Sub
Run Code Online (Sandbox Code Playgroud)

如果我将参数更改为"对象"类型,为什么它不起作用?我也试过"Variant"和"Form"类型但是没有成功.

提前致谢.

vba class access-vba

1
推荐指数
1
解决办法
2980
查看次数

记录数量返回太多记录

您好我在MS Access 2013中的表单中有一些vba代码,出于某种原因,当我得到一个记录集时,它报告30行,当数据库真的只有1行并且我已经验证了这一点.

当我进行调试打印以查看id时,它只是重复30次的相同记录.

下面是运行的代码.

Option Compare Database

Dim selectPlacement As QueryDef
Dim rs As Recordset

Private Sub Form_Current()
    Set selectPlacement = CurrentDb.QueryDefs("SelectPlacement")
    Me.AddPlacementForm.Form.Visible = False

    selectPlacement.Parameters!stu = Me.student_id.Value
    selectPlacement.Parameters!sem = Me.semester_id.Value
    Me.AddPlacementForm.Form!lstStudent.Value = Me.student_id
    Me.AddPlacementForm.Form!cmbSemester.Value = Me.semester_id
    Me.PlacementsBlock1.Form.Filter = "[semester_id]= '" & Me.semester_id.Value & "'"
    Me.PlacementsBlock2.Form.Filter = "[semester_id]= '" & Me.semester_id.Value & "'"
    Me.PlacementsBlock1.Form.FilterOn = True
    Me.PlacementsBlock2.Form.FilterOn = True

    Set rs = selectPlacement.OpenRecordset
    Call SetUpPlacements(rs)
    rs.Close
    Set selectPlacement = Nothing
End Sub

Private Sub SetUpPlacements(rs As Recordset)
    If rs.RecordCount …
Run Code Online (Sandbox Code Playgroud)

ms-access vba access-vba ms-access-2013

1
推荐指数
1
解决办法
394
查看次数

基于表的MS Access报告引发"查询过于复杂"错误

问题:我有一个直接链接到本地​​表的分组MS Access 2010报告.它每个记录有40个"绑定"字段,每组有152个计算字段.当我的vba脚本尝试自动更新最后几个计算字段的控制源时(在运行时),它会抛出"查询太复杂"的错误!

背景: 我正在创建一个直接链接到本地​​表的MS Access报告,该表包含一个Person字段/列,一个Project字段/列和每个记录的38个数字字段/列.

报告按人员分组,每个人都有多个项目记录.

在每个人的组页脚中,我在38个数字字段/列的每个下面有4个计算控件.

回顾一下,每个记录总共有40个"绑定"/直接链接字段,每组有152个计算字段.

该报告直接绑定到本地表,该表定期删除并通过可绑定查询重新创建,该查询绑定到动态SQL查询,该查询根据当天的日期输出不同的列.为了说明动态查询将提供的不同字段名称,我有一些VBA脚本执行与服务器上相同的计算(计算今天的日期-11个月和+6个月之间的所有月份以及匹配的格式预期的列名称,然后更改相关报告字段和列标签标题的控制源,以匹配来自动态查询的表所期望的内容.

除了我最后几行代码更新组页脚中的一些计算字段外,这一切似乎都很有效.这是脚本的工作部分(来自报告的On Open事件),所有这些似乎都正常工作,仅适用于上下文:

Dim NowDate As Date
Dim i, monthcalc As Integer
Dim Dates(1 To 18) As String

NowDate = Now()

monthcalc = -11

'The below creates variables of formatted dates to be used as control sources for the expected fields incoming from SQL
For i = 1 To 18
    Dates(i) = Year(DateAdd("m", monthcalc, NowDate)) & Format(month(DateAdd("m", monthcalc, NowDate)), "00")
    monthcalc = monthcalc + 1
Next i


monthcalc …
Run Code Online (Sandbox Code Playgroud)

ms-access vba access-vba ms-access-2010

1
推荐指数
1
解决办法
139
查看次数

如何使用VBA for MS Access在预先存在的表中创建字段?

我有一个数据库Database和一个表Table.我在网上找到了如何从MS Access中的VBA中新创建的数据库和表创建字段,但是在运行宏之前数据库和表已经存在时,我不知道如何执行此操作.

要在没有预先存在的数据库和表的情况下执行此操作,我可以运行以下命令:

Sub CreateTable()

    Dim db As DAO.Database
    Dim table1 As DAO.TableDef

    Set db = CurrentDb

    Set table1 = db.CreateTableDef("ExampleTable")

    With table1
        .Fields.Append.CreateField("newField", String)
    End With
Run Code Online (Sandbox Code Playgroud)

但是我如何调整它以将相同的字段添加到预先存在的表中?

或者更具体地说,我该如何修改

Set table1 = db.CreateTableDef("ExampleTable")
Run Code Online (Sandbox Code Playgroud)

那么table1指向db数据库中的现有表?

ms-access vba access-vba ms-access-2010

1
推荐指数
1
解决办法
2972
查看次数

VBA:反转阵列?

我怎么能反转一个充满整数的数组,例如:

[1;5;8;45;54]
Run Code Online (Sandbox Code Playgroud)

至:

[54;45;8;5;1]
Run Code Online (Sandbox Code Playgroud)

我可以使用任何内置功能吗?

我尝试过使用这种方法:

Array.Reverse(arr)
Run Code Online (Sandbox Code Playgroud)

我从工具>引用添加了Mscorlib.dll,但它显示错误:语法错误.在Array.Reverse(arr)位置.

vba access-vba

1
推荐指数
1
解决办法
8298
查看次数