Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Access VBA/SQL中创建循环以选择记录并输出到Excel?_Sql_Excel_Ms Access_Vba_Loops - Fatal编程技术网

如何在Access VBA/SQL中创建循环以选择记录并输出到Excel?

如何在Access VBA/SQL中创建循环以选择记录并输出到Excel?,sql,excel,ms-access,vba,loops,Sql,Excel,Ms Access,Vba,Loops,我需要一些关于在Access中将VBA/SQL代码写入模块的帮助,该模块应执行以下操作: 循环浏览表“学校”,只包含一个字段(学校名称) 使用第一个表中的每个值从表'ChildData'中选择记录,其中包含几个关于单个孩子的字段,包括他们就读的学校(SchoolName) 对于每所学校,将其在校学生的数据导出到以该学校命名的单独Excel工作簿中 有人能给我一些出发点吗?请注意,我对VBA或SQL都知之甚少,而且我几乎是从零开始的,因此即使是最基本的解释也会非常有用 谢谢, AVN创建一个连

我需要一些关于在Access中将VBA/SQL代码写入模块的帮助,该模块应执行以下操作:

  • 循环浏览表“学校”,只包含一个字段(学校名称)

  • 使用第一个表中的每个值从表'ChildData'中选择记录,其中包含几个关于单个孩子的字段,包括他们就读的学校(SchoolName)

  • 对于每所学校,将其在校学生的数据导出到以该学校命名的单独Excel工作簿中

有人能给我一些出发点吗?请注意,我对VBA或SQL都知之甚少,而且我几乎是从零开始的,因此即使是最基本的解释也会非常有用

谢谢,
AVN

创建一个连接学校上两个表的查询,然后使用excel中的pivot和school作为页面,并使用show页面将每个学校放在一个单独的页面上,这样会更简单

如果要以更复杂的方式执行此操作,则在VBA中,需要从显示所有学校的“学校”表中获取一个记录集,从具有必填字段的childdata中获取一个记录集,以及针对“学校”字段的一个参数

然后在VBA中使用do循环控件,该控件在school.EOF=false时进行,并为每个学校记录获取childdata记录集,并将其放入Excel


我倾向于在Excel VBA中执行此操作,并使用copyfromrecordset将数据放入Excel-非常简单,可以为每个学校创建一个新的工作表,并将工作表名称设置为“学校”。您需要添加对VBA项目的相关引用(DAO或ADO),以便能够连接到Access数据。

创建一个连接学校上两个表的查询,然后使用excel中的pivot(学校)作为页面,并使用show(显示)页面将每个学校放在单独的页面上,这样会更简单

如果要以更复杂的方式执行此操作,则在VBA中,需要从显示所有学校的“学校”表中获取一个记录集,从具有必填字段的childdata中获取一个记录集,以及针对“学校”字段的一个参数

然后在VBA中使用do循环控件,该控件在school.EOF=false时进行,并为每个学校记录获取childdata记录集,并将其放入Excel


我倾向于在Excel VBA中执行此操作,并使用copyfromrecordset将数据放入Excel-非常简单,可以为每个学校创建一个新的工作表,并将工作表名称设置为“学校”。您需要添加VBA项目的相关引用—DAO或ADO—才能连接到Access数据。

在您的问题中,我看不到任何表示您需要任何复杂内容的内容

第一步是创建一个连接学校和学生的查询,当查询运行时,通过菜单导出到Excel。如果这样做有效,那么您需要修改它,以便一次输出一所学校。实现这一点的“简单”方法是在查询中添加一个有关学校的参数,以便每次查询运行时,只显示一个学校

现在,如果你想自动化,它会变得更复杂,因为参数会妨碍你

因此,我的建议是创建一个未绑定的表单,表单上有一个组合框,显示学校列表。然后使用对该组合框的引用作为查询条件,并使用该引用在命令按钮后面驱动代码:

  Private Sub cmdOutputSchool_Click()
    If IsNull(Me!cmbSchool) Then
       MsgBox "You must first choose a school from the dropdown.", _
         vbExclamation, "Choose a school"
    Else
       DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
         "qrySchoolOutput", CurrentProject.Path & "\" & Me!cmbSchool & ".xls"
    End If
  End Sub
现在,这并不能使过程自动化,但至少可以使连续输出每个报告变得容易

如果希望它自动化,一种简单的方法是将表单绑定到Schools表,并将查询绑定到表单上学校名称的显示。然后,您可以使用命令按钮浏览表单记录并输出每个学校的报告:

  Private Sub cmdOutputSchool_Click()
    With Me.RecordsetClone
      .MoveFirst
      Do Until .EOF
        Me.Bookmark = .Bookmark
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
          "qrySchoolOutput", CurrentProject.Path & "\" & Me!SchoolName & ".xls"
        .MoveNext
      Loop
    End With
  End Sub

这将在您绑定到表单的表格中输出每个学校的电子表格。

我看不到您的问题中有任何表明您需要任何复杂内容的内容

第一步是创建一个连接学校和学生的查询,当查询运行时,通过菜单导出到Excel。如果这样做有效,那么您需要修改它,以便一次输出一所学校。实现这一点的“简单”方法是在查询中添加一个有关学校的参数,以便每次查询运行时,只显示一个学校

现在,如果你想自动化,它会变得更复杂,因为参数会妨碍你

因此,我的建议是创建一个未绑定的表单,表单上有一个组合框,显示学校列表。然后使用对该组合框的引用作为查询条件,并使用该引用在命令按钮后面驱动代码:

  Private Sub cmdOutputSchool_Click()
    If IsNull(Me!cmbSchool) Then
       MsgBox "You must first choose a school from the dropdown.", _
         vbExclamation, "Choose a school"
    Else
       DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
         "qrySchoolOutput", CurrentProject.Path & "\" & Me!cmbSchool & ".xls"
    End If
  End Sub
现在,这并不能使过程自动化,但至少可以使连续输出每个报告变得容易

如果希望它自动化,一种简单的方法是将表单绑定到Schools表,并将查询绑定到表单上学校名称的显示。然后,您可以使用命令按钮浏览表单记录并输出每个学校的报告:

  Private Sub cmdOutputSchool_Click()
    With Me.RecordsetClone
      .MoveFirst
      Do Until .EOF
        Me.Bookmark = .Bookmark
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
          "qrySchoolOutput", CurrentProject.Path & "\" & Me!SchoolName & ".xls"
        .MoveNext
      Loop
    End With
  End Sub
这将为您绑定到表单的表中的每个学校输出一个电子表格。

如前所述,您可以在字符串中使用“”来获取报价。例如:

MsgBox "I am an ""Example""."
至于另一个,你并不真的需要VBA来做这件事。您可以通过查询执行此操作:

SELECT ChildData.* INTO [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Example.xls].[MyWorksheet]
FROM ChildData INNER JOIN Schools ON ChildData.SchoolName = Schools.SchoolName;
当然,如果您确实愿意,也可以从VBA执行相同的操作:

CurrentDB.Execute "SELECT ChildData.* INTO [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Example.xls].[MyWorksheet] FROM ChildData INNER JOIN Schools ON ChildData.SchoolName = Schools.SchoolName;"
还有一种方法是创建一个select查询来提取数据,然后使用DoCmd.OutputTo:

DoCmd.OutputTo acOutputQuery,"MyQuery",acFormatXLS,"C:\Test.xls"
您还可以使用DoCmd.TransferSpreadsheet:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "MyQuery", "C:\Test.xls", True
如前所述,您可以在字符串中使用“”来获取引号。例如:

MsgBox "I am an ""Example""."
至于另一个,你并不真的需要VBA来做这件事。您可以通过查询执行此操作:

SELECT ChildData.* INTO [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Example.xls].[MyWorksheet]
FROM ChildData INNER JOIN Schools ON ChildData.SchoolName = Schools.SchoolName;
当然,如果您确实愿意,也可以从VBA执行相同的操作:

CurrentDB.Execute "SELECT ChildData.* INTO [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Example.xls].[MyWorksheet] FROM ChildData INNER JOIN Schools ON ChildData.SchoolName = Schools.SchoolName;"
还有一个