技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 軟件教程 > Excel教程 >

Excel VBA(宏)有多強(qiáng)大?

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2018-02-23 00:10┆點(diǎn)擊:

  excel為提供了很多好用的功能和函數(shù),但還是有很多工作無(wú)法用現(xiàn)有功能和函數(shù)批量完成,比如多個(gè)excel表格的合并與拆分,而借助VBA語(yǔ)言編寫(xiě)的宏代碼,這些看似無(wú)法批量處理或無(wú)法完成的事情,瞬間變得只是小菜一碟,也許你不懂VBA,也建議先收藏起來(lái)這些代碼備用。

  (第1個(gè)示例中,演示了VBA代碼的使用方法,后面示例均和第1個(gè)類似,不再具體演示)

  1、一次取消所有工作表的隱藏

  Excel可以一次隱藏多個(gè)工作表,但取消工作表隱藏卻需要一個(gè)個(gè)的設(shè)置,用VBA編寫(xiě)一段代碼,一秒完成!

  注意

  要想使用VBA功能,需要把代碼粘貼到添加的模塊中,詳見(jiàn)動(dòng)畫(huà)演示

  要想保存VBA代碼,需要把文件另存為xlsm格式文件,詳見(jiàn)動(dòng)畫(huà)演示

  動(dòng)畫(huà)演示:

Excel VBA(宏)有多強(qiáng)大? 三聯(lián)

  代碼:

  Sub 取消隱藏()

  For x = 1 To Sheets.Count

  If Sheets(x).Name <> "總表" Then

  Sheets(x).Visible = -1

  End If

  Next x

  End Sub

  Sub 隱藏()

  For x = 1 To Sheets.Count

  If Sheets(x).Name <> "總表" Then

  Sheets(x).Visible = 0

  End If

  Next x

  End Sub

  2、根據(jù)模板批量生成日?qǐng)?bào)表

  根據(jù)模板批量生成報(bào)表,沒(méi)什么好方法,只能一個(gè)一個(gè)的復(fù)制然后修改名稱。但這對(duì)VBA來(lái)說(shuō),只需點(diǎn)一下按鈕即可瞬間完成。

Excel VBA

  代碼:

  Sub 生成報(bào)表()

  Dim x As Integer

  Dim sh As Worksheet

  For x = 1 To 31

  Set sh = Sheets.Add

  With sh

  .Name = x & "日"

  Sheets("日?qǐng)?bào)模板").Range("1:15").Copy sh.Range("A1")

  End With

  Next x

  End Sub

  3、拆分工作表為單獨(dú)的excel文件

  把當(dāng)前excel文件中除第1個(gè)工作外的所有工作表,均保存為單獨(dú)的excel文件到3月文件夾中。

  拆分演示(在拆分過(guò)程中會(huì)畫(huà)面會(huì)停幾秒,請(qǐng)耐心等待)

Excel VBA

  代碼:

  Sub 拆分表格()

  Dim x As Integer

  Dim wb As Workbook

  Application.ScreenUpdating = False

  For x = 2 To 32

  Sheets(x).Copy

  Set wb = ActiveWorkbook

  With wb

  .SaveAs ThisWorkbook.Path & "/3月/" & Sheets(x).Name & ".xlsx"

  .Close True

  End With

  Next x

  Application.ScreenUpdating = True

  End Sub

  4、合并多個(gè)Excel文件工作表到一個(gè)文件中

  3月文件夾下有N張報(bào)表,要求把該文件夾中所有excel文件的第1個(gè)工作表合并到當(dāng)前的excel文件中,以單獨(dú)的工作表存放。

Excel VBA

  代碼:

  Sub 合并表格()

  Dim mypath As String

  Dim f As String

  Dim ribao As Workbook

  Application.ScreenUpdating = False

  mypath = ThisWorkbook.Path & "/3月/"

  f = Dir(ThisWorkbook.Path & "/3月/*.xlsx")

  Do

  Workbooks.Open (mypath & f)

  With ActiveWorkbook

  .Sheets(1).Move after:=ThisWorkbook.Sheets(Sheets.Count)

  End With

  f = Dir

  Loop Until Len(f) = 0

  Application.ScreenUpdating = True