Chinaunix首页 | 论坛 | 博客
  • 博客访问: 721392
  • 博文数量: 158
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1643
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-11 14:37
个人简介

人法地,地法天,天法道,道法自然

文章分类

全部博文(158)

文章存档

2022年(1)

2020年(3)

2016年(1)

2014年(7)

2013年(4)

2010年(5)

2009年(86)

2008年(25)

2007年(26)

我的朋友

分类:

2009-07-03 16:01:14

 

昨天有个网友在对excel操作时,将每个款号的对应栏位的数据要调到同一行单元格中,再打印,由于数据量大,排版时太麻烦。而该excel文件是由进销存系统导出,生成的文件也是定制了。为此可写一段VBA代码来快速处理。

 

 

 

其处理思想如下:

1、  将原始文件复制一份到另一个Sheet表中命名为[原始文件的复件];保持原始数据不变;

2、  对复制的Sheet[原始文件的复件],将空行删除使之不再有空行,这样便于VBA处理;

3、  Sheet[原始文件的复件]中的数据处理,生成新的Sheet[进销存打印排版];

 

 

 

 

VBA代码如下:

 

Sub 进销存排版打印()

 

  Dim i, j, k, n, s, e, p As Integer

  Dim lastRows As Long

  Dim nowRow As Long

  Dim num As Integer

 

  Application.ScreenUpdating = False  '屏蔽屏幕更新

 

 ' lastRows = Sheets("Sheet1").[A65536].End(xlUp).Row   '获取数据范围

 

 

 

  num = Sheets.Count  '统计工作表个数

 

  For i = 1 To num

   If Sheets(i).Name = "进销存打印排版" Then  '如果存在工作表[进销存打印排版],删除,重新建立

       Sheets(i).Delete

       Exit For

   End If

  Next i

 

  num = Sheets.Count  '统计工作表个数

  For i = 1 To num

   If Sheets(i).Name = "原始文件的复件" Then  '如果存在工作表[原始文件的复件],删除,重新建立

       Sheets(i).Delete

       Exit For

   End If

  Next i

 

  Worksheets.Add

  '增加一个新的Sheet,用来存储原始数据,其作用是不影响原来的数据,这样可以进行对比

  ActiveSheet.Name = "原始文件的复件"

 

  Worksheets.Add

  '增加一个新的Sheet,用来存放处理后的原始文件,也是最终要打印的文件

  ActiveSheet.Name = "进销存打印排版"

 

  'Sheet1中的数据复制到[原始文件的复件]表中

  Sheets("Sheet1").Select

  Cells.Select

  Selection.Copy

 

  Sheets("原始文件的复件").Select

  Range("A1").Select

  ActiveSheet.Paste

  Range("A7").Value = "Sheet1中的数据复制到此表中"

  Range("A8").Value = "得到数据后将空行删除"

  Range("A1").Select

 

  '复制后获取数据范围

  LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count

  

'  Sheets("原始文件的复件").Activate

 

  '将空行删除

  With Application

            .Calculation = xlCalculationManual

            .ScreenUpdating = False        '将屏幕更新关掉

           

  For nowRow = LastRow To 1 Step -1

   If Application.WorksheetFunction.CountA(Rows(nowRow)) = 0 Then

      Rows(nowRow).Delete

   End If

  Next nowRow

  .Calculation = xlCalculationAutomatic

            .ScreenUpdating = True

  End With

  

  Application.ScreenUpdating = False  '屏蔽屏幕更新

   

  Sheets("Sheet1").Activate

   

  Range("A1").Select

  '将表头复制到Sheet3工作簿中

  Sheets("Sheet1").Range("A1:I9").Copy

  Sheets("进销存打印排版").Paste Destination:=Sheets("进销存打印排版").Range("A1")

 

 

  j = 9   '写入[进销存打印排版]中的起始位置的前一行

  lastRows = Sheets("Sheet1").[A65536].End(xlUp).Row

 

  With Worksheets("进销存打印排版")

 

  For i = 10 To lastRows Step 2

   

    k = i + 1

    j = j + 1

   

   .Range("A" & j).Value = Sheets("原始文件的复件").Range("A" & i).Value  '地点/款号

   .Range("B" & j).Value = Sheets("原始文件的复件").Range("B" & k).Value  '承上

   .Range("C" & j).Value = Sheets("原始文件的复件").Range("C" & k).Value  '购货

   .Range("D" & j).Value = Sheets("原始文件的复件").Range("D" & k).Value  '销售

   .Range("E" & j).Value = Sheets("原始文件的复件").Range("E" & k).Value  '消耗

   .Range("F" & j).Value = Sheets("原始文件的复件").Range("F" & k).Value  '更正

   .Range("G" & j).Value = Sheets("原始文件的复件").Range("G" & k).Value  'D_IN

   .Range("H" & j).Value = Sheets("原始文件的复件").Range("H" & k).Value  'D_OUT

   .Range("I" & j).Value = Sheets("原始文件的复件").Range("I" & k).Value  '结余

  

  Next i

 

  End With

 

  Application.ScreenUpdating = True

 

  ActiveWorkbook.Save '保存

 

End Sub

 

 

 

 

阅读(1766) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-07-03 16:15:29

兄 挺厉害的,从遇到问题 - 到解决问题, 步步为营, 沉,思,悟,道 。