我有两个表,表:A是在Access和Table中构建的:Error是Excel中的链接表。错误表的计算是我希望在Access中的Query中的SQL编码。错误的一个例子是:
IIf([Table A].[RETURN_DAYS]<>30,"-RETURN POLICY DAYS SHOULD BE 30","")
错误表中的列是:
|Audit Name|Error Codes|
|Audit 1 |the code above
|Audit 2 |
目前,我手动将错误代码复制并粘贴到Excel表格中的查询中,以便进行计算。这需要非常长的时间,因为我有超过150个Audits和5个不同的错误字段。
我希望能够根据审核名称从链接表中的错误列中选择错误,并将该错误放在字段中,以便在运行查询时,访问完成计算。我找不到有关如何执行此操作或是否可能的任何信息。任何帮助表示赞赏。
答案 0 :(得分:0)
由于我不知道您正在使用的单元格或工作表名称,因此您需要调整以下代码。
此代码将监视对某个列(您的SQL)的更改,并将更改Access中的查询。假设查询名称在col A中的col A,SQL中。
将此代码放在您要进行更改的工作表中。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'Monitor the range of cells you may be making changes to. I have assumed SQL is in col 2 (B)
If Target.column <> 2 Then Exit Sub ' If change not made in column 'A' then Ignore!
' Assuming you have the query name in Col A and the SQL in Col B
If Target.column = 1 Then
MsgBox "You are changing the query name?"
End If
If Change_SQL(Cells(Target.Row - 1, Target.column), Cells(Target.Row, Target.column)) <> "passed" Then
MsgBox "Update failed."
End If
End Sub
Function Change_SQL(strQueryName As String, strNewSQL As String) As String
'Declare Variables'
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim strSQL_Old As String
Dim strSQL_New As String
'Connect to the Database'
On Error GoTo Error_Trap
Set dbs = DBEngine.OpenDatabase("C:\data\Access\xxxxxx.mdb", False, False, _
"MS Access;")
Set qdf = dbs.QueryDefs("Query5")
strSQL_Old = qdf.Sql
Debug.Print "Query Name: " & qdf.Name & vbTab & qdf.Sql
qdf.Sql = strNewSQL
qdf.Close
' You can execute the query if needed....
'Set rst = dbs.OpenRecordset(strNewSQL) ' If it's a select query
'Do While Not rst.EOF
' Do whatever
' rst.MoveNext
'Loop
'rst.Close
'Set rst = Nothing
Set dbs = Nothing
Change_SQL = "passed"
Exit Function
Error_Trap:
Change_SQL = "failed"
Debug.Print Err.Number & vbTab & Err.Description
MsgBox Err.Number & vbTab & Err.Description
Exit Function
Resume
End Function