【发布时间】:2017-12-21 23:30:59
【问题描述】:
首先,提前感谢您的时间和帮助。这是我的情况;
我正在尝试将现有 excel 工作簿中的一些值添加到 access 数据库中的现有表中。这是我根据需要找到并使用它的代码,但是当我单击按钮时,它什么也不做。没有错误消息,没有导入的值,什么都不做。
Private Sub Command39_Click()
On Error GoTo Err_Handler
Dim wbFDU As Workbook
Dim objExcelApp As Excel.Application
Dim db As Database
Dim rstWL As Recordset
Dim columnI As String
Dim columnS As String
Dim searchInC As String
Dim C As String
Dim I As String
Dim M As String
Dim S As String
Dim W As String
Dim iCounter As Integer
Set db = CurrentDb
Set rstWL = db.OpenRecordset("Select * FROM WL WHERE WLDate = Date()-1")
Set objExcelApp = New Excel.Application
objExcelApp.Workbooks.Open ("\\CDB\Shared\MNG\CIO Mng.xlsm")
Set wbFDU = objExcelApp.Workbooks(1)
If rstWL.EOF = False Then
rstWL.MoveFirst
Do While rstWL.EOF = False
iCounter = 1
C = "C" & iCounter
I = "I" & iCounter
M = "M" & iCounter
S = "S" & iCounter
W = "W" & iCounter
Do Until wbFDU.Worksheets("Rep").Range(C).Value = ""
searchInC = wbFDU.Worksheets("Rep").Range(C).Value
If rstWL!CustName = searchInC Then
columnI = wbFDU.Worksheets("Rep").Range(I).Value + wbFDU.Worksheets("Rep").Range(M).Value
columnS = wbFDU.Worksheets("Rep").Range(S).Value + wbFDU.Worksheets("Rep").Range(W).Value
rstWL.Edit
rstWL.Fields("LCDCO") = columnI
rstWL.Update
rstWL.Fields("ECDCO") = columnS
rstWL.Update
End If
iCounter = iCounter + 1
C = "C" & iCounter
I = "I" & iCounter
M = "M" & iCounter
S = "S" & iCounter
W = "W" & iCounter
Loop
rstWL.MoveNext
Loop
End If
wbFDU.Close False
Set wbFDU = Nothing
rstWL.Close
Set rstWL = Nothing
db.Close
Set db = Nothing
Exit Sub
Err_Handler:
MsgBox "The following error has occured." & vbCrLf & vbCrLf & _
"Error Number " & Err.Number & vbCrLf & _
"Error Description" & Err.Description & vbCrLf & _
"Your application will close!", _
vbCritical, "An Error has Occured"
End Sub
由于几天无法弄清楚我做错了什么。
【问题讨论】:
-
您是否打算更新或追加记录,因为您声称没有导入值?如果后者使用Recordset.AddNew 并调用整个表而不是特定的
SELECT。也可以先尝试Ifblock as:If rstWL.RecordCount > 0。 -
我的目的是更新记录。访问表具有带有其他值的客户 ID(并且相同的客户 ID 可能存在于许多不同的日期,这就是我尝试使用 Date()-1 条件调用记录集的原因,因此只有我在 excel 文件中的日期才会生效)。 Excel 表中有一些具有不同值的客户,这就是我需要作为更新将其引入访问表中的字段的值。
-
尝试按 F8 逐行浏览代码。
Do Until wbFDU.Worksheets("Rep").Range(C).Value = ""和If rstWL!CustName = searchInC Then行可能会阻止您的更新触发。 -
如果没有任何反应,那么您的查询要么不返回任何结果,要么没有任何更新。
-
非常感谢 Parfait 和 destination-data,感谢您的宝贵时间和宝贵意见!代码现在工作正常,问题是源 Excel 文件,范围 C 在 4 行后有空单元格,所以代码停在那里。不过,我发现了另一个问题;有一些客户在同一天执行了 2 个或更多操作,因此代码为该特定客户执行操作的每条记录带来相同的总量。我现在正试图摆脱那些重复。棘手的部分是,所有操作都必须保留在访问表中,但 Excel 文件中的数据只能出现一次。