【发布时间】:2020-09-09 14:34:41
【问题描述】:
我是 excel 宏访问的新手,我在 access 数据库中创建了一个宏,用于将数据/查询从 MS Access 数据库传输到 excel。 在演示之前,我的代码/宏运行良好。但是现在我遇到了一个问题,即在将数据传输到 excel 之后,B 列中的值应该更改我在 for 循环中更新条件的值,如下所示......现在它在第一个值 FXV 处进行调试,在 excel 中不会像我编码的那样将值更改为 FFJ。但是,当它是 FLB 时,它曾经可以正确更改值,但现在它不适用于 FXV,并且宏变慢。有人可以帮忙解决这个问题吗?
下面是我的完整代码: - 所以宏将数据从访问到 excel 然后在 excel 中它应该更改我在 FOR 循环中编码的 B 列中存在的值它正在工作但现在不是我不知道为什么?任何人都可以帮我解决这个问题..... 问题出在 For 循环中,当我将 i = 2 范围更改为 999 时,它将运行并粘贴数据,但不会将 FXV 的值更改为 FFJ ... 如果我更改 i = 1 到 999 或 i = 0 到 999 的范围,它将调试如下所示....请帮助....
Option Compare Database
Option Explicit
Private Sub Command0_Click()
ExportToExcel
End Sub
Public Sub ExportToExcel()
Dim xl As Excel.Application
Dim wbtarget As Workbook
Dim FinalExp As QueryDef
Dim rsFinalExp As Recordset
Dim i As Integer
'Set up reference to the query to export
Set FinalExp = CurrentDb.QueryDefs("FinalExp")
'Debug.Print FinalExp.SQL
'Set up the parameter
'Execute the query
Set rsFinalExp = FinalExp.OpenRecordset()
'programetically reference exel
Set xl = CreateObject("Excel.Application")
'set ref to the export workbook (Paste the Excel Path)
Set wbtarget = xl.Workbooks.Open("path.xlsm")
'use paste from recordset to put in excel sheet
wbtarget.Worksheets("SampleFile").Cells(2, 1).CopyFromRecordset rsFinalExp
'Replace the FWD_Code's in column 2
For i = 0 To 9999
If Worksheets("SampleFile").Range("B" & i).Value = "FXV" Then
Worksheets("SampleFile").Range("B" & i).Value = "FFJ"
ElseIf Worksheets("SampleFile").Range("B" & i).Value = "FAM" Then
Worksheets("SampleFile").Range("B" & i).Value = "FST"
ElseIf Worksheets("SampleFile").Range("B" & i).Value = "FLB" Then
Worksheets("SampleFile").Range("B" & i).Value = "FST"
End If
Next
'save workbook
wbtarget.Save
wbtarget.Close
Set wbtarget = Nothing
Set xl = Nothing
Set FinalExp = Nothing
End Sub
【问题讨论】:
-
没有
B0 -
它应该在哪里
-
与其循环您刚刚复制的单元格,不如在记录集中进行更改(可能使用
IIf或使用查找表)更有效。此外,如果您有超过 999 条记录,您的代码将无法按预期工作 - 您应该找出需要循环多少次(使用.RecordCount或ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)。如果你只导出 2 行,那么循环 999 行是没有意义的。