|
代码没问题,估计还是资源的问题,我这里测试是跑到一百笔就出错误提示.
所以我修改了一下代码,在EXCEL中不用循环地插入行
Private Sub Command72_Click()
'On Error Resume Next
Dim strTemplate As String '模板文件路径名
Dim strPathName As String '输出文件路径名
Dim objApp As Object 'Excel程序
Dim objBook As Object 'Excel工作簿
Dim rst As Object '子窗体记录集
Dim intRows As Integer '明细记录行数
Dim intCounter As Integer '循环计数器
Dim blnNoQuit As Boolean '此标记为True时不关闭Excel
Dim strPicPath As String '图片路径
Dim strPicName As String '图片名称
Dim strMsg As String '消息内容
'当前是新记录则提示并退出(仅用于主子窗体时)
If Me.NewRecord Then
MsgBox "当前没有数据可导出!", vbExclamation, "提示"
Exit Sub
End If
'模板文件路径
strTemplate = CurrentProject.Path & "\导出模板.xltx"
'图片文件夹路径
strPicPath = CurrentProject.Path & "\pic\"
'默认保存的文件名
strPathName = CurrentProject.Path & "\导出订单.xlsx"
'通过文件对话框取得另存为文件名
With FileDialog(2) 'msoFileDialogSaveAs
.InitialFileName = strPathName
If .Show Then
strPathName = .SelectedItems(1)
Else
Exit Sub
End If
End With
'如果文件名后没有.xlsx扩展名则加上
If Not strPathName Like "*.xlsx" Then strPathName = strPathName & ".xlsx"
If Dir(strPathName) <> "" Then Kill strPathName '删除已有文件
'设置鼠标指针为沙漏形状
DoCmd.Hourglass True
'创建Excel对象
Set objApp = CreateObject("Excel.Application")
'打开模板文件
Set objBook = objApp.Workbooks.Open(strTemplate)
'选中模板所在的工作表(防止模板不是活动工作表)
objBook.Sheets("订单").Select
'写入订单明细
Set rst = Me.Form.Recordset
'将明细的最大行数保存到变量
intRows = rst.RecordCount + 1
'选中第2行(即设置好格式的明细行)
objApp.Rows("2:2").Select
objApp.CutCopyMode = False
'复制该行
objApp.Selection.Copy
objApp.Rows("2:" & intRows - 1).Select
objApp.Selection.Insert Shift:=xlDown
For i = 2 To intRows
objApp.Range("A3") = rst.AbsolutePosition + 1
objApp.Range("B" & i) = rst!FTC
objApp.Range("C" & i) = rst!款号
objApp.Range("D" & i) = rst!合同
objApp.Range("E" & i) = rst!IntentNo
objApp.Range("F" & i) = rst!款式
objApp.Range("G" & i) = rst!面料
objApp.Range("H" & i) = rst!颜色
objApp.Range("I" & i) = rst!尺码
objApp.Range("J" & i) = rst!数量
objApp.Range("K" & i) = rst!交期
objApp.Range("L" & i) = rst!印绣花
objApp.Range("M" & i) = rst!搭配
objApp.Range("N" & i) = rst!辅料
objApp.Range("O" & i) = rst!主标
strPicName = strPicPath & rst!合同 & ".jpg"
'如果该产品有图片,则插入图片
If Dir(strPicName) <> "" Then
objApp.Range("A" & i).Select
objApp.ActiveSheet.Pictures.Insert(strPicName).Select
'调整图片位置
objApp.Selection.ShapeRange.IncrementLeft 2
objApp.Selection.ShapeRange.IncrementTop 2
'调整图片大小,注意必需要取消纵横比锁定,不然大小会有问题
objApp.Selection.ShapeRange.LockAspectRatio = 0
objApp.Selection.ShapeRange.Width = 60
objApp.Selection.ShapeRange.Height = 45
End If
rst.MoveNext
Next i
'保存Excel文件,因为模板是不能修改的,所以是另存为
objBook.SaveAs strPathName
Beep
strMsg = "导出已完成,是否打开导出的Excel文件?"
If MsgBox(strMsg, vbQuestion + vbYesNo, "导出完成") = vbYes Then
objApp.Visible = True
objBook.Saved = True
blnNoQuit = True
'自动进入打印预览
'objApp.ActiveWindow.SelectedSheets.PrintPreview
End If
End Sub |
|