我有一个访问程序,它读取客户文件并提供订单发货日期。该文件需要以特定格式反馈到客户门户。当我更改要反馈的文件中的日期时,我必须转到发货日期字段并点击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带到前台,这似乎是一个常见的问题。