VBA有其自身的優(yōu)勢(shì),什么python取代VBA,根本不是那回事,只能說(shuō)各有特點(diǎn),各有各的長(zhǎng)處,在工作中完全可以互相取長(zhǎng)補(bǔ)短,各取所需,學(xué)會(huì)了VBA,絕對(duì)讓你有一種相見(jiàn)恨晚的感覺(jué),經(jīng)常使用Excel,卻不學(xué)VBA,絕對(duì)后悔。
VBA有其自身的優(yōu)勢(shì),什么python取代VBA,根本不是那回事,只能說(shuō)各有特點(diǎn),各有各的長(zhǎng)處,在工作中完全可以互相取長(zhǎng)補(bǔ)短,各取所需,學(xué)會(huì)了VBA,絕對(duì)讓你有一種相見(jiàn)恨晚的感覺(jué),經(jīng)常使用Excel,卻不學(xué)VBA,絕對(duì)后悔。
一、VBA在我的Excel工作中的應(yīng)用
下圖是我的Excel工作簿,里面的成品出庫(kù)工作表已錄入一些數(shù)據(jù)明細(xì)。右邊的發(fā)貨單是由VBA一鍵生成的。
圖1成品出庫(kù)
圖2發(fā)貨單
圖3
二、實(shí)現(xiàn)方法
1、先看簡(jiǎn)單的打印預(yù)覽模塊的實(shí)現(xiàn)方法
全部代碼
Option Explicit
Sub 打印預(yù)覽()
Dim n As Integer
Dim sh As Worksheet
Set sh = Sheets("發(fā)貨單")
n = sh.Range("C65536").End(xlUp).Row
sh.PageSetup.PrintArea = "$C$1:$K$12"
sh.PrintPreview
End Sub
強(qiáng)制聲明變更
Option Explicit
作用:在模塊級(jí)別中使用,強(qiáng)制顯示聲明模塊中的所有變量,所有變量只有聲明后才能使用。這樣可以避免變量因名稱拼寫(xiě)等錯(cuò)誤帶來(lái)的結(jié)果錯(cuò)誤,并且“Option Explicit”可以加快程序的運(yùn)行速度,它節(jié)省了在程序運(yùn)行時(shí)動(dòng)態(tài)分配變量存儲(chǔ)空間的時(shí)間。
模塊結(jié)構(gòu)
sub sub_name()
End Sub
sub_name 可以自己命名,中英均可,簡(jiǎn)單明了最好,但個(gè)人認(rèn)為英文比較方便,推薦用駝峰命名法命名,但名字不能與其他模塊重復(fù)。
定義變量及賦值
Dim n As Integer
Dim sh As Worksheet
Set sh = Sheets("發(fā)貨單")
n = sh.Range("C65536").End(xlUp).Row
這里需要說(shuō)明一下的是對(duì)于對(duì)象的賦值前面要寫(xiě)上Set,例如,Set sh = Sheets("發(fā)貨單")。
n = sh.Range("C65536").End(xlUp).Row
這句話表示C列最后一行的行號(hào)
sh.PageSetup.PrintArea = "$C$1:$K$12"
sh.PrintPreview
這句話就是設(shè)置要打印的區(qū)域,上面代碼表示C1:K12的區(qū)域。
效果如下圖:
圖4打印區(qū)域
圖5預(yù)覽圖
2、另存為PDF模塊實(shí)現(xiàn)方法
先看代碼:
Option Explicit
Sub SaveasPDF()
'發(fā)貨單
Dim name1 As String
Dim name2 As String
Dim paths As String
Dim date1 As Date
Dim sh As Worksheet
Set sh = Sheets("發(fā)貨單")
name1 = Range("G2").Value
name2 = Range("J2").Value
paths = "D:\Documents\"
date1 = Date
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
sh.PageSetup.PrintArea = "$C$1:$K$12"
sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=paths & name1 & "-" & name2 & Format(date1, "mm-dd-yyyy"), openafterpublish:=True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
set sh=Nothing
End Sub
上面的代碼大致分為五部分:
定義變量
Dim name1 As String
Dim name2 As String
Dim paths As String
Dim date1 As Date
Dim sh As Worksheet
變量賦值
Set sh = Sheets("發(fā)貨單")
name1 = Range("G2").Value
name2 = Range("J2").Value
paths = "D:\Documents\"
date1 = Date
關(guān)閉屏幕刷新和自動(dòng)計(jì)算
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'模塊代碼放在其中以提高運(yùn)行速度
關(guān)鍵代碼
sh.PageSetup.PrintArea = "$C$1:$K$12"
sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=paths & name1 & "-" & name2 & Format(date1, "mm-dd-yyyy"), openafterpublish:=True
其中,Type:=xlTypePDF 表示輸出文檔的類型,這里是PDF格式。
Filename:=paths & name1 & "-" & name2 & Format(date1, "mm-dd-yyyy") 表示設(shè)置文檔另存為的路徑。變量與字符串之間用&號(hào)連接。
openafterpublish:=True表示是否打開(kāi)文檔,True表示打開(kāi),F(xiàn)alse表示不打開(kāi)。
代碼結(jié)尾
set sh=Nothing
設(shè)置的對(duì)象最后記得這樣設(shè)置一下,以釋放內(nèi)存。
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
前面關(guān)閉了屏幕刷新和自動(dòng)計(jì)算,最后記得打開(kāi)喲!
3、一鍵生成發(fā)貨單——發(fā)貨單模塊
Option Explicit
Sub 發(fā)貨單()
Dim i As Integer
Dim k As Integer
Dim irow As Integer
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set sh1 = Sheets("成品出庫(kù)")
Set sh2 = Sheets("發(fā)貨單")
If sh2.Range("B13").Value = "" Then
MsgBox "Please input customer Order NO."
sh2.Range("A2:K12").ClearContents
Exit Sub
End If
irow = sh1.Range("B65536").End(xlUp).Row
sh2.Range("A2:K12").ClearContents
sh2.Cells(2, "C").Value = "ORDER NO."
sh2.Cells(2, "E").Value = "CUSTOMER"
sh2.Range("A3:k3").Value = Array("description", "NO.", "product", "description", "規(guī)格", "件數(shù)", "QTY", "UNIT", "U/P", "貨款", "remark")
k = 4
For i = 2 To irow
If sh1.Range("B" & i).Value = sh2.Range("B13").Value Then
sh2.Cells(k, "B") = k - 3
sh2.Cells(2, "D").Value = Format(Date, "yymmdd") & Format(sh2.Range("B13"), "000")
sh2.Cells(2, "F").Value = sh1.Range("B" & i).Offset(0, 5)
sh2.Cells(2, "G").Value = sh1.Range("B" & i).Offset(0, 1)
sh2.Cells(2, "K").Value = Date
sh2.Cells(2, "H").Value = sh1.Range("B" & i).Offset(0, 2)
sh2.Range("A" & k).Value = sh1.Range("B" & i).Offset(0, 8).Value
sh2.Range("C" & k).Value = sh1.Range("I" & i).Value
sh2.Range("D" & k).Value = sh1.Range("B" & i).Offset(0, 9).Value
sh2.Range("E" & k).Value = sh1.Range("B" & i).Offset(0, 10).Value
sh2.Range("F" & k).Value = sh1.Range("N" & i).Value
sh2.Range("G" & k).Value = sh1.Range("B" & i).Offset(0, 13).Value
sh2.Range("H" & k).Value = sh1.Range("T" & i)
sh2.Range("I" & k).Value = sh1.Range("U" & i)
sh2.Range("J" & k).Value = sh2.Range("G" & k) * sh2.Range("I" & k)
sh2.Range("K" & k).Value = sh1.Range("Y" & i)
sh2.Cells(10, "B") = "TOTAL"
sh2.Cells(10, "C") = "合計(jì)"
sh2.Cells(10, "F") = Application.WorksheetFunction.Sum(Range("F4:F9"))
sh2.Cells(10, "G") = Application.WorksheetFunction.Sum(Range("G4:G9"))
sh2.Cells(10, "J") = Application.WorksheetFunction.Sum(Range("J4:J9"))
sh2.Cells(11, "C") = "PREPARED BY"
sh2.Cells(11, "D") = "WangYongjie"
sh2.Cells(12, "C") = "運(yùn)輸費(fèi)"
sh2.Cells(12, "D") = sh1.Range("W" & i)
sh2.Cells(12, "I") = "司機(jī)簽字DRIVER SIGNATURE"
sh2.Cells(11, "F") = "CHECKED BY"
sh2.Cells(11, "I") = "APROVED BY"
sh2.Cells(11, "J") = sh1.Range("B" & i).Offset(0, 6).Value
k = k + 1
End If
Next i
If sh2.Range("D2").Value = "" Then
sh2.Range("F7").Value = "Nothing was found"
End If
Set sh1 = Nothing
Set sh2 = Nothing
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
上面代碼主要使用了if判斷語(yǔ)句和for循環(huán)語(yǔ)句,學(xué)過(guò)C語(yǔ)言入門(mén)的都能明白,這里不在詳細(xì)解釋,其他語(yǔ)句前面的模塊中已經(jīng)進(jìn)行了說(shuō)明,也不用再說(shuō)明。
代碼已經(jīng)寫(xiě)好,剩下的就是插入按鈕,并設(shè)置運(yùn)行的模塊,點(diǎn)擊即可執(zhí)行。這里想說(shuō)明一點(diǎn)的是我的工作表中并沒(méi)有一鍵生成發(fā)貨單的按鈕,那么我是如何一鍵生成發(fā)貨單的呢?
請(qǐng)看下圖的設(shè)置:
圖6 change事件
這里使用了worksheet的change事件,這個(gè)事件的意思是當(dāng)worksheet發(fā)生變化的時(shí)候,執(zhí)行其中的代碼。這里的代碼表示shee9(發(fā)貨單)的B13單元格發(fā)生變化時(shí),調(diào)用發(fā)貨單模塊。
好了,本期就講到這里,如有不妥或不明白之處,歡迎留言、評(píng)論,當(dāng)然也歡迎大家點(diǎn)贊、收藏、轉(zhuǎn)發(fā),讓更多的人領(lǐng)略Excel VBA數(shù)據(jù)處理的快樂(lè)。
在職場(chǎng)上經(jīng)常要求能夠熟練使用Excel處理數(shù)據(jù),對(duì)于經(jīng)常處理數(shù)據(jù)的人來(lái)說(shuō),這三種語(yǔ)言一定要學(xué),而且入門(mén)很簡(jiǎn)單,根本沒(méi)有你想象的那么難,關(guān)鍵是要認(rèn)真地邁步第一步。
本教程所使用的系統(tǒng)環(huán)境:
win7
Excel2007
1、啟用開(kāi)發(fā)工具 打開(kāi)一個(gè)Excel文件,點(diǎn)擊下圖紅框所示按鈕。
2、勾選如下圖紅框所示的選項(xiàng),確定
3、點(diǎn)擊確定后,工具欄中會(huì)出現(xiàn)如下圖所示的開(kāi)發(fā)工具選項(xiàng)。
4、按下圖所示點(diǎn)擊打開(kāi) Visual Basic 編輯器
5、再依次點(diǎn)擊插入-模塊,如下圖所示
6、第一個(gè)代碼-Hello world!
在A1單元格輸出:Hello world!
代碼如下圖:
寫(xiě)好后按F5運(yùn)行,或點(diǎn)擊如圖所示按鈕
運(yùn)行后效果:
上面的效果也可以這樣寫(xiě):
Cells(1, 1).Value = "Hello world !"
這是兩種單元格賦值的方法。
7、代碼注釋
用英文單引號(hào)或rem開(kāi)頭。
到此,你已經(jīng)進(jìn)入了VBA高效處理Excel的大門(mén),祝你入門(mén)順利,歡迎點(diǎn)贊、關(guān)注、收藏、轉(zhuǎn)發(fā)和評(píng)論,讓我們一起領(lǐng)略VBA的風(fēng)采。
聯(lián)系客服