下面的函数拷贝一个行,然后插入这个拷贝的行,以达到自动添加行的目的。但是,这个函数在运行时,如果用户正在操作其他的Excel那么,就会出现异常,出现异常的原因我想是因为:用户在操作其他book时,下面函数的活动工作簿就变成了用户正在操作的工作簿,而不是程序里面的工作簿。变量定义如下:Private mExlApp As Excel.Application
Private mExlBook As Excel.Workbook
Private mExlSheet As Excel.WorksheetPublic Sub AddExcelBookRow(ByVal lngCopyRow As Long, ByVal lngRowCount As Long)
Dim lngRow As Long
mExlApp.DisplayAlerts = False
For lngRow = 1 To lngRowCount
mExlSheet.Rows(CStr(lngCopyRow) & ":" & CStr(lngCopyRow)).Select
mExlApp.Selection.Copy
mExlSheet.Rows(CStr(lngCopyRow + 1) & ":" & CStr(lngCopyRow + 1)).Select
mExlApp.Selection.Insert Shift:=xlDown
Next
Clipboard.Clear
mExlSheet.Cells(1, 1).Select
End Sub
Private mExlBook As Excel.Workbook
Private mExlSheet As Excel.WorksheetPublic Sub AddExcelBookRow(ByVal lngCopyRow As Long, ByVal lngRowCount As Long)
Dim lngRow As Long
mExlApp.DisplayAlerts = False
For lngRow = 1 To lngRowCount
mExlSheet.Rows(CStr(lngCopyRow) & ":" & CStr(lngCopyRow)).Select
mExlApp.Selection.Copy
mExlSheet.Rows(CStr(lngCopyRow + 1) & ":" & CStr(lngCopyRow + 1)).Select
mExlApp.Selection.Insert Shift:=xlDown
Next
Clipboard.Clear
mExlSheet.Cells(1, 1).Select
End Sub
解决方案 »
- 类型转换问题
- listview的焦点设置,DTPicker如何用来设置时间
- VB编译好后,运行环境是什么?一定要安装VB吗?
- 非常感谢 cuizm(射天狼) 兄弟的帮助,这才是真正的良师益友,那些自以为是、很了不起的人学到点,不帮助别人就少发言,废话说多了伤身体.
- MsgBox (Adodc1.Recordset.Fields.Count),就这一句,说是with块未设置,我都新建form了还是不行啊!(现结)
- vb里调用dll传送指针的问题
- 关于VSFlexGrid1
- 能否捕获鼠标已经多长时间没有移动了?
- 岂有此理,禁止我发言!
- 提问3:为何我的程序有时会不经过Form_unload事件就退出?
- Com+能不能从服务端向客户端返回Form之类的可视化对象?
- 花了N天,截取Office2003菜单工具条的140个图标(16×16)与大家分享
用类似下面的
exwbook.Worksheets(3).Range("A6:A17")
绝对定位
mExlSheet.Rows
换成
mExlBook.worksheets(3).Rows
这里的3是sheet的顺序
mExlApp.Selection.Copy
... ...
mExlApp.Selection.Insert Shift:=xlDown
... ...
Dim lngRow As Long
Dim bkNm As String
Dim stNm As String
bkNm = ActiveWorkbook.Name
stNm = ActiveSheet.Name
mExlApp.DisplayAlerts = False
For lngRow = 1 To lngRowCount
Workbooks(bkNm).Sheets(stNm).Rows(CStr(lngCopyRow) & ":" & CStr(lngCopyRow)).Copy
Workbooks(bkNm).Sheets(stNm).Rows(CStr(lngCopyRow + 1) & ":" & CStr(lngCopyRow + 1)).Insert Shift:=xlDown
Next
Clipboard.Clear
Workbooks(bkNm).Sheets(stNm).Cells(1, 1).Select
End Sub
正如大家所说的那样,用绝对定位的方法,解决了这个问题,同时,因为原来的方法对系统剪贴版有依赖,所以改成了以下方法,不知道这么做有没有不妥的地方。(只列出了关键部分) mExlSheet.Rows("12:12").Insert Shift:=xlDown
mExlSheet.Range("A11:S11").AutoFill Destination:=mExlSheet.Range("A11:S12"), Type:=xlFillDefault