|
|

楼主 |
发表于 2013-2-21 20:26
|
显示全部楼层
zengxp 发表于 2013-2-1 13:06 
复制 A1:G3 区域, 不是用你的方法做的,测试可行
运行程序前先备份
- Private Sub CommandButton2_Click()
-
- Dim wb As Workbook
- Set y = CreateObject("Scripting.FileSystemObject")
- Application.DisplayAlerts = False
- Application.ScreenUpdating = False
- Sheets.Add after:=Sheets(Sheets.Count)
- Set She = Sheets(Sheets.Count)
-
- Set Sht = Sheet9 '所需要复制的工作表
- Sht.Cells.Copy '格式刷整个表格格式到目标表格
- She.Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
- SkipBlanks:=False, Transpose:=False
- She.Range("AC2:AD5").ClearFormats '清除表格式(注意范围)
- Application.CutCopyMode = False
-
- ActiveWindow.DisplayZeros = False '清除全表零值显示
- For i = [AD4] To [AD5] '通过开始行号、结束行号控制运行保存范围
- Sht.Activate
- [AD2] = i
- Sht.Range("A1:AB43").Copy '选择复制范围(注意范围)
-
- She.Select
- She.Range("A1").Select
- Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
- xlNone, SkipBlanks:=False, Transpose:=False
- Application.CutCopyMode = False
-
- ActiveSheet.Name = [J31].Value '赋值当前工作表名(指定单元格)
- wbName = ThisWorkbook.Path & Application.PathSeparator & [C3].Value & ".xls" '准备工作簿名赋值为单元格的值(指定单元格)
- If y.FileExists(wbName) Then '复制至已有工作簿中
- Set wb = Workbooks.Open(wbName)
- She.Copy Before:=wb.Sheets(Sheets.Count)
- ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value '保留单元格数值,去掉公式
- wb.Close True
- Else '复制生成新工作簿中
- She.Copy
- ActiveWorkbook.SaveAs wbName
- ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value '保留单元格数值,去掉公式
- ActiveWorkbook.Close True
- End If
- Next
-
- Application.CutCopyMode = False
- She.Delete
-
- Application.DisplayAlerts = True
- Application.ScreenUpdating = True
- MsgBox "导出成功."
-
- End Sub
复制代码 这个代码是“邮件合并”在excel中的实现,能生成个体表格。
学习了zengxp以及版主的一些代码
自己试着写了下,虽然代码不是最简洁最好的,但实现了自己想要的功能。
zengxp的代码设计中,先拷贝到了新建的最后的工作表中,开始我认为这个降低了运行的效率,可是后来发现这个设计很好,它避免了重命名文件重名情况下程序无法运行的现象,这里赞一个。
在此,感谢
蓝桥玄霜
zengxp
山菊花老师
|
|