表1数据按表2格式进行分页,要求每分一页新建一个工作簿保存到e盘,名字等于分页后工作表名字。下面代码是在当前工作簿新建工作表,哪位大哥帮忙改下面代码并加上注释,万分谢谢!!
Sub 拆分工作表()
Dim G1&, i&, iR&, R1&, x&, N&
Dim T1$, T2$
Dim arr, arr1()
With Sheets("sheet1")
iR = .Range("A65536").End(xlUp).Row
arr = .Range("A2:D" & iR).Value
End With
i = 2: N = 1: R1 = 1
G1 = Sheets.Count
If G1 > 2 Then MsgBox "你已经执行过了!": End
T1 = Sheets("sheet2").Range("B3")
T2 = Left(T1, Len(T1) - 3) & Right(T1, 3) + i
Sheets("sheet2").Copy after:=Sheets(G1)
With ActiveSheet
.Range("B3") = T2
ActiveSheet.Name = T2
ActiveSheet.TextBox1.Value = .TextBox1.Text + N
End With
For R1 = 1 To UBound(arr)
k = k + arr(R1, 4)
If k <= 50 And x < 40 Then
x = x + 1
ReDim Preserve arr1(0 To 5, 1 To x)
arr1(0, x) = x
arr1(1, x) = arr(R1, 1)
arr1(2, x) = arr(R1, 2)
arr1(3, x) = arr(R1, 3)
arr1(4, x) = arr(R1, 4)
arr1(5, x) = arr1(2, x) * arr1(3, x) * arr1(4, x) / 1000000
h1 = h1 + arr1(4, x)
h2 = h2 + arr1(5, x)
Else
Range("A6").Resize(UBound(arr1, 2), 6) = Application.Transpose(arr1)
Range("E46") = h1
Range("F46") = h2
G1 = G1 + 1: N = N + 1: i = i + 2: x = 0: h1 = 0: h2 = 0: k = 0: R1 = R1 - 1
Erase arr1
Sheets("sheet2").Copy after:=Sheets(G1)
With ActiveSheet
T2 = Left(T1, Len(T1) - 3) & Right(T1, 3) + i
.Range("B3") = T2
ActiveSheet.Name = T2
ActiveSheet.TextBox1.Value = .TextBox1.Text + N
End With
End If
Next R1
With ActiveSheet
.Range("A6").Resize(UBound(arr1, 2), 6) = Application.Transpose(arr1)
.Range("E46") = h1
.Range("F46") = h2
End With
ActiveWorkbook.Save
End Sub
Sub 删除折分表()
Dim x&
If Sheets.Count > 2 Then
For x = Sheets.Count To 3 Step -1
Application.DisplayAlerts = False
Sheets(x).Delete
Application.DisplayAlerts = True
Next x
Else
MsgBox "你还没进行拆分,不能删除!": End
End If
End Sub
vba请教高手,新建工作簿并保存的问题。
答案:2 悬赏:60 手机版
解决时间 2021-01-30 22:18
- 提问者网友:火车头
- 2021-01-30 11:36
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-01-30 13:07
问题太多,没时间逐一解释,总结几点:
一、With Sheets("sheet1")……Sheets("sheet2").……工作页名称为"sheet1”"sheet2”的一般都是新建的文件才有,一般编辑过的excel表格不改工作页名的很少,建议指定特定工作页时注意改名,且必需要有你输入名称的工作页。
二、arr = .Range("A2:D" & iR).Value这句明显是错误语句,单元格区域的value值究竟指的是哪个值,一般有一组数值,如何赋值给一个变量ARR。
三、If G1 > 2 Then MsgBox "你已经执行过了!": End这句不能在vba里运行,end出现在这里是结束程序吗,应该用exit sub;一般工作页数超过2都是正常的,你用工作页的数量>2来判断是否拆分过,只能是用具体表格来运行才行了,没有通用性了。
四、上边代码显示对很多excel 表格的数据模型还不了解。
还有很多地方,无法逐一列举。
一、With Sheets("sheet1")……Sheets("sheet2").……工作页名称为"sheet1”"sheet2”的一般都是新建的文件才有,一般编辑过的excel表格不改工作页名的很少,建议指定特定工作页时注意改名,且必需要有你输入名称的工作页。
二、arr = .Range("A2:D" & iR).Value这句明显是错误语句,单元格区域的value值究竟指的是哪个值,一般有一组数值,如何赋值给一个变量ARR。
三、If G1 > 2 Then MsgBox "你已经执行过了!": End这句不能在vba里运行,end出现在这里是结束程序吗,应该用exit sub;一般工作页数超过2都是正常的,你用工作页的数量>2来判断是否拆分过,只能是用具体表格来运行才行了,没有通用性了。
四、上边代码显示对很多excel 表格的数据模型还不了解。
还有很多地方,无法逐一列举。
全部回答
- 1楼网友:雾月
- 2021-01-30 13:30
通过记录宏的方式得到下面这个代码。
sub macro1()
' macro1 macro
workbooks.add
activeworkbook.saveas filename:="c:\users\think\documents\myfile.xlsx", _
fileformat:=xlopenxmlworkbook, createbackup:=false
activewindow.close
end sub
注:要学习vba编程,这个记录宏功能要好好利用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯