工作表中的某单元格 比如A2,里面数据的格式形如“A0001”现在希望在每次打印后,单元格A2中的数据的最后一位自动变更。比如,打印完A0001后,自动变成A0002,A0003....A0009,然后从9以后变为大写字母,如A000A,A000B....A000Z,然后再变更回A0001,如此循环,只是最后一位循环更换,其他的不变。每变更一次后就自动打印一张。这样的功能能通过VBA或者宏实现吗?请高手帮忙
谢谢你的回复。不好意思,上次我的需求没说完整,补充如下
工作表中的某单元格 比如A2,里面数据的格式形如“A0001”现在希望在每次打印后,
单元格A2中的数据的最后一位自动变更。比如,打印完"A0001"后,自动变成"A0002","A0003"...."A0009",
然后从9以后变为大写字母,如"A000A","A000B"...."A000Z",需要跳过字母O和字母I,防止和数字0,1混淆,也就是说只用24个字母。然后进位后从A0011循环到A001Z,如此循环一直到AZZZZ。 每变更一次就打印一张,大概100多万张的样子。最好有一个按钮能控制停止此循环。
另外还需要循环打印,我说的循环打印是这个意思,比如当我打开工作表,此时单元格A2 里显示为A0001,按了你的开始按钮之后,先打印出一张A0001,打印结束后A0001自动变为A0002,然后再自动打印一张A0002,然后再变问为A0003, 再打印A0003,如此这样循环。非常感谢你的帮忙。
再次感谢你。之所以打这么多是因为这是生产用的带条码的标签。打印机也是条码打印机,所以数量庞大。非常感谢你的帮助。
Excel 单元格循环叠加并循环打印,请高手,谢谢。
答案:2 悬赏:30 手机版
解决时间 2021-03-19 16:57
- 提问者网友:记得曾经
- 2021-03-19 06:07
最佳答案
- 五星知识达人网友:轮獄道
- 2021-03-19 06:59
根据你的问题补充,重新写了答案!(以待打印的数据在sheet1中,每打印一次变更的单元格在A2为例)
1、先建两个命令按钮,在工作表中依次点:视图→工具栏→在“控件工具箱”前打√→在弹出的控件工具箱上点命令按钮的图标(鼠标停在小图标上面会有显示)→在工作表上画一个“命令按钮”(选择你想要放按钮的地方,点住左键不松,拖动鼠标,再松开左键,按钮就画好了,注意最好不要画到打印区域内)→在按钮上点右键→命令按钮 对象→编辑→将按钮的名称更改为“开始打印”;按同样的方法再做一个按钮,将名称更改为“停止打印”。
2、alt+f11打开VBA编辑器,双击工程窗口sheet1,在弹出的代码编辑区粘贴如下代码:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim temp As Boolean
Private Sub CommandButton1_Click()
temp = True
j = InputBox("请输入打印份数", , "2")
If j = "" Then
Exit Sub
End If
For i = 1 To j
If temp = True Then
If i <= 33 Then
a = i - 1
a1 = 1
a2 = 0
a3 = 0
a4 = 0
End If
If i > 33 And i <= 1122 Then
a = i - 34
a1 = 1
a2 = 1
a3 = 0
a4 = 0
End If
If i > 1122 And i <= 37059 Then
a = i - 1123
a1 = 1
a2 = 1
a3 = 1
a4 = 0
End If
If i > 37059 Then
a = i - 37060
a1 = 1
a2 = 1
a3 = 1
a4 = 1
End If
s1 = Int(a / 35937)
y1 = a Mod 35937
s2 = Int(y1 / 1089)
y2 = y1 Mod 1089
s3 = Int(y2 / 33)
y3 = y2 Mod 33
If s1 + a4 <= 9 Then
c1 = s1 + a4
End If
If s1 + a4 > 9 And s1 + a4 < 18 Then
c1 = Chr(s1 + a4 + 55)
End If
If s1 + a4 >= 18 And s1 + a4 < 23 Then
c1 = Chr(s1 + a4 + 56)
End If
If s1 + a4 >= 23 Then
c1 = Chr(s1 + a4 + 57)
End If
If s2 + a3 <= 9 Then
c2 = s2 + a3
End If
If s2 + a3 > 9 And s2 + a3 < 18 Then
c2 = Chr(s2 + a3 + 55)
End If
If s2 + a3 >= 18 And s2 + a3 < 23 Then
c2 = Chr(s2 + a3 + 56)
End If
If s2 + a3 >= 23 Then
c2 = Chr(s2 + a3 + 57)
End If
If s3 + a2 <= 9 Then
c3 = s3 + a2
End If
If s3 + a2 > 9 And s3 + a2 < 18 Then
c3 = Chr(s3 + a2 + 55)
End If
If s3 + a2 >= 18 And s3 + a2 < 23 Then
c3 = Chr(s3 + a2 + 56)
End If
If s3 + a2 >= 23 Then
c3 = Chr(s3 + a2 + 57)
End If
If y3 + a1 <= 9 Then
c4 = y3 + a1
End If
If y3 + a1 > 9 And y3 + a1 < 18 Then
c4 = Chr(y3 + a1 + 55)
End If
If y3 + a1 >= 18 And y3 + a1 < 23 Then
c4 = Chr(y3 + a1 + 56)
End If
If y3 + a1 >= 23 Then
c4 = Chr(y3 + a1 + 57)
End If
Cells(2, 1) = "A" & c1 & c2 & c3 & c4
Sheet1.PrintOut
DoEvents
Sleep 500
DoEvents
Else
Exit For
End If
Next i
End Sub
Private Sub CommandButton2_Click()
temp = False
End Sub
保存后关闭VBA编辑器,OK
点开始打印,在弹出窗口中输入打印份数(如:10000),确定后就可以不停的自动循环打印了,A2单元格也随每次打印不断变更,如果想在中途停止,点停止打印按钮就可以了。
PS:
1、电脑做自动循环的话,速度是很快的,它会很快就向打印机输出N多个任务(每打一份算一个任务,因为每份的内容都不同,A2有变更),这样的话,如果打印份数很庞大,估计打印机会卡死去,所以我做了一个延时,默认是每输出一个任务延时0.5秒,如果你的打印机还跟不上的话,你可以修改上述代码中 Sleep后面的数字,单位是毫秒,但是你不能把数字设得太大,太大的话会导致耽误很多时间);
2、晕,一次打印100万份,什么东东要这样打印啊,那打印机能受得了么!
1、先建两个命令按钮,在工作表中依次点:视图→工具栏→在“控件工具箱”前打√→在弹出的控件工具箱上点命令按钮的图标(鼠标停在小图标上面会有显示)→在工作表上画一个“命令按钮”(选择你想要放按钮的地方,点住左键不松,拖动鼠标,再松开左键,按钮就画好了,注意最好不要画到打印区域内)→在按钮上点右键→命令按钮 对象→编辑→将按钮的名称更改为“开始打印”;按同样的方法再做一个按钮,将名称更改为“停止打印”。
2、alt+f11打开VBA编辑器,双击工程窗口sheet1,在弹出的代码编辑区粘贴如下代码:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim temp As Boolean
Private Sub CommandButton1_Click()
temp = True
j = InputBox("请输入打印份数", , "2")
If j = "" Then
Exit Sub
End If
For i = 1 To j
If temp = True Then
If i <= 33 Then
a = i - 1
a1 = 1
a2 = 0
a3 = 0
a4 = 0
End If
If i > 33 And i <= 1122 Then
a = i - 34
a1 = 1
a2 = 1
a3 = 0
a4 = 0
End If
If i > 1122 And i <= 37059 Then
a = i - 1123
a1 = 1
a2 = 1
a3 = 1
a4 = 0
End If
If i > 37059 Then
a = i - 37060
a1 = 1
a2 = 1
a3 = 1
a4 = 1
End If
s1 = Int(a / 35937)
y1 = a Mod 35937
s2 = Int(y1 / 1089)
y2 = y1 Mod 1089
s3 = Int(y2 / 33)
y3 = y2 Mod 33
If s1 + a4 <= 9 Then
c1 = s1 + a4
End If
If s1 + a4 > 9 And s1 + a4 < 18 Then
c1 = Chr(s1 + a4 + 55)
End If
If s1 + a4 >= 18 And s1 + a4 < 23 Then
c1 = Chr(s1 + a4 + 56)
End If
If s1 + a4 >= 23 Then
c1 = Chr(s1 + a4 + 57)
End If
If s2 + a3 <= 9 Then
c2 = s2 + a3
End If
If s2 + a3 > 9 And s2 + a3 < 18 Then
c2 = Chr(s2 + a3 + 55)
End If
If s2 + a3 >= 18 And s2 + a3 < 23 Then
c2 = Chr(s2 + a3 + 56)
End If
If s2 + a3 >= 23 Then
c2 = Chr(s2 + a3 + 57)
End If
If s3 + a2 <= 9 Then
c3 = s3 + a2
End If
If s3 + a2 > 9 And s3 + a2 < 18 Then
c3 = Chr(s3 + a2 + 55)
End If
If s3 + a2 >= 18 And s3 + a2 < 23 Then
c3 = Chr(s3 + a2 + 56)
End If
If s3 + a2 >= 23 Then
c3 = Chr(s3 + a2 + 57)
End If
If y3 + a1 <= 9 Then
c4 = y3 + a1
End If
If y3 + a1 > 9 And y3 + a1 < 18 Then
c4 = Chr(y3 + a1 + 55)
End If
If y3 + a1 >= 18 And y3 + a1 < 23 Then
c4 = Chr(y3 + a1 + 56)
End If
If y3 + a1 >= 23 Then
c4 = Chr(y3 + a1 + 57)
End If
Cells(2, 1) = "A" & c1 & c2 & c3 & c4
Sheet1.PrintOut
DoEvents
Sleep 500
DoEvents
Else
Exit For
End If
Next i
End Sub
Private Sub CommandButton2_Click()
temp = False
End Sub
保存后关闭VBA编辑器,OK
点开始打印,在弹出窗口中输入打印份数(如:10000),确定后就可以不停的自动循环打印了,A2单元格也随每次打印不断变更,如果想在中途停止,点停止打印按钮就可以了。
PS:
1、电脑做自动循环的话,速度是很快的,它会很快就向打印机输出N多个任务(每打一份算一个任务,因为每份的内容都不同,A2有变更),这样的话,如果打印份数很庞大,估计打印机会卡死去,所以我做了一个延时,默认是每输出一个任务延时0.5秒,如果你的打印机还跟不上的话,你可以修改上述代码中 Sleep后面的数字,单位是毫秒,但是你不能把数字设得太大,太大的话会导致耽误很多时间);
2、晕,一次打印100万份,什么东东要这样打印啊,那打印机能受得了么!
全部回答
- 1楼网友:由着我着迷
- 2021-03-19 07:42
没有直接方法,可以这样 选中a1:e1 右击复制,按两次ctrl+c调出剪贴板,双击a1单元格,拖动全选里面的数据,点击剪贴板的全部粘帖,就会把a1:e1的内容全贴到a1里面, 然后就是合并单元格
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯