MS Access VBA打开Excel文件,然后转到第一列并发送命令F2和Enter



我有一个访问程序,它读取客户文件并提供订单发货日期。该文件需要以特定格式反馈到客户门户。当我更改要反馈的文件中的日期时,我必须转到发货日期字段并点击F2,然后输入文件以成功上传。通常有1000多行需要这样做。当我从access运行代码导出表并打开excel时,我收到错误

"对象不支持此属性或方法"

所有内容都会更改为BOLD,但如果我试图对整个电子表格或特定单元格执行sendkey,我会收到错误
任何帮助都将不胜感激,我已经试过了所有的事情,并准备拔出我的头发。

.Range(.cells(1, 1), .cells(lngMaxRow + 1, lngMaxCol)).Font.Bold = True
.Range(.cells(1, 1), .cells(lngMaxRow + 1, lngMaxCol)).SendKeys "{F2}", True
.Range("I12").SendKeys "{F2}", True

基本上sendkeys不是range对象的方法。Sendkeys只是将笔划发送到应用程序。试试这个代码的方法:

Sub test()
    Sheets("Sheet1").Activate
    Range("I12").Select
    Do
        Application.SendKeys ("{F2}")
        ActiveCell(2, 1).Select
    Loop Until ActiveCell.Value = ""
End Sub

在成功工作之前,您可能需要确保您的Excel工作簿是活动的应用程序,尤其是其他应用程序。

编辑:你解释说这行不通,是的,这是因为你是从Access启动的,所以这些步骤需要针对Excel。我在这里使用了Trevor G提供的示例来构建一个示例。这将使我们更接近目标,但我认为这还不是一个完全的解决方案:

Option Compare Database
Sub excelExport()
    'Step 1: Declare variables
    Dim MyDatabase As DAO.Database
    Dim MyQueryDef As DAO.QueryDef
    Dim MyRecordset As DAO.Recordset
    'Step 2: Identify the database and query
    Set MyDatabase = CurrentDb
    Set MyQueryDef = MyDatabase.QueryDefs("Table1 Query") 'Query name in the database
    'Step 3: Open the query
    Set MyRecordset = MyQueryDef.OpenRecordset
    'Step 4: Create Excel
    Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
    Set objShell = CreateObject("WScript.Shell")
    objShell.AppActivate "Microsoft Excel"
    With xlApp
        .Visible = True
        .Workbooks.Add
        .Sheets("Sheet1").Select
        .Sheets("Sheet1").Activate
        'Step 5: Copy the recordset to Excel
        .ActiveSheet.Range("A2").CopyFromRecordset MyRecordset
        'Step 6: Add column heading names to the spreadsheet
        'For i = 1 To MyRecordset.Fields.Count
        'xlApp.ActiveSheet.Cells(1, i).Value = MyRecordset.Fields(i - 1).Name
        'Next i
        .Cells.EntireColumn.AutoFit
        .Range("A2").Select
        Do
            .Application.SendKeys ("{F2}")
            .Application.SendKeys ("{ENTER}")
            .ActiveCell(2, 1).Select
        Loop Until .ActiveCell.Value = ""
    End With
End Sub

我发现,当第一次按下F2时,Excel被锁定,似乎没有其他代码运行。。。但打一次enter似乎对它有帮助。不过,我认为要使"F2+enter"循环正常工作,我们可能需要创建并运行一个外部VBScript(它可以不分青红皂白地发送密钥)。然而,当我尝试这样做时,我很难让VBS成功地将Excel带到前台,这似乎是一个常见的问题。

最新更新