一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Excel VBA 入門(1)

 漫步梨園 2019-03-31

Excel VBA的語法就不多說了, 從最重要的Application開始

Application對(duì)象代表Excel程序本身, 對(duì)Application的操作會(huì)直接影響Excel程序

廢話不多說, 直接上代碼

先來介紹一下Application的常用屬性:

1.ActiveCell 當(dāng)前激活的(1個(gè))單元格, 一個(gè)Range對(duì)象, 注意是一個(gè)格子

  1. Dim myRange As Range
  2. '下述四種寫法等同
  3. Set myRange = Application.ActiveCell '如果窗口沒有顯示工作表,則此屬性無效
  4. Set myRange = ActiveWindow.ActiveCell
  5. Set myRange = ActiveCell '懶人寫法, 后續(xù)會(huì)有很多Application下的屬性可以去掉Application的前綴
  6. Set myRange = Application.ActiveWindow.ActiveCell

從完整寫法Application.ActiveWindow.ActiveCell看出, 意思是Excel的當(dāng)前有一個(gè)活動(dòng)的窗口(工作簿), 里面要有一個(gè)表(工作表), 然后要有一個(gè)激活的單元格

獲取到單元格的Range對(duì)象就能對(duì)其進(jìn)行操作了:(語法就不介紹了)

  1. With ActiveCell '獲取當(dāng)前激活的單元格
  2. .Value = '哈哈'
  3. With .Font
  4. .Bold = True
  5. .Italic = True
  6. .Size = 18
  7. End With
  8. End With
把(1個(gè))格子的內(nèi)容設(shè)置為'哈哈', 加粗,斜體,字號(hào)18

2. Selection 基本概念和ActiveCell類似, 與之不同的是Selection可以表示多個(gè)單元格, 依然是一個(gè)Range對(duì)象

  1. Dim r As range
  2. Set r = Application.Selection
  3. r.Value = 1
選中的格子都變成1 了

3.ActiveWorkbook 當(dāng)前激活的一個(gè)工作簿,是一個(gè)Workbook對(duì)象

  1. Dim wb As Workbook
  2. '下述兩種寫法等同
  3. Set wb = Application.ActiveWorkbook
  4. Set wb = ActiveWorkbook '又是懶人寫法

如果當(dāng)前的Excel是空的, 就是說沒有打開任何一個(gè)Workbook(工作簿) 上面的wb會(huì)是Nothing (VBA里的空)

每個(gè)Workbook對(duì)象都有一個(gè)Application屬性, 貌似(Excel對(duì)象都有這個(gè)屬性), 表示該對(duì)象所屬的Application(這個(gè)Application是對(duì)象)
  1. Dim app As Application
  2. Dim app2 As Application
  3. Set app = Application
  4. Set app2 = Application.ActiveWorkbook.Application
  5. If app = app2 Then 'I'sure. 這里會(huì)輸出OK, 說明是同一個(gè)Application對(duì)象
  6. Debug.Print 'OK' 'Debug.Print 會(huì)將后面的文字內(nèi)容輸出到'立即窗口' (如果沒看到立即窗口, 請(qǐng):Ctrl+G)
  7. Else
  8. Debug.Print 'Fail'
  9. End If

4.Workbooks, Worksheets, Sheets

Application.Workbooks用于獲取當(dāng)前打開的(多個(gè))工作簿

  1. For i = 1 To WorkBooks.Count '這里也可以寫全Application.WorkBooks.Count
  2. Debug.Print WorkBooks(i).name
  3. Next
Applicaton.Sheets用于獲取當(dāng)前(激活的)工作簿下的所有工作表, 包括圖表(Chart)
  1. For i = 1 To Application.Sheets.Count '同樣可以偷懶 Sheets.Count 一旦省略前綴基本上都是'激活的'(worksheet或者Workbook)
  2. Debug.Print Application.Sheets(i).name
  3. Next
Application.Worksheets用于獲取當(dāng)前(激活的)工作簿下所有的Sheet表, 不包括其他類型(如:Chart)
  1. For i = 1 To Application.Worksheets.Count
  2. Debug.Print Application.Worksheets(i).name
  3. Next

5. Caption 這個(gè)顧名思義, 標(biāo)題, 而且是Application的Caption, 修改一下試試吧
Application.Caption = 'Haha'
看到Excel標(biāo)題變了吧, 有原來的 Microsoft Excel 變成了 [你當(dāng)前打開的Excel的文件名]-Haha

注意一點(diǎn), 這個(gè)可是沒有'懶人寫法'的吐舌頭. 如果你想懶一下 Caption = 'Haha' VBA會(huì)把Caption當(dāng)作一個(gè)新變量的

試試下面這個(gè)

    Application.Caption = ''

標(biāo)題復(fù)原了.OK

6. Range 上面在提到ActiveCell時(shí)說過Range, ActiveCell是一個(gè)Range對(duì)象, 這里的Range是一個(gè)屬性, 但它同時(shí)也是一個(gè)Range對(duì)象, 是不是有點(diǎn)暈. 別擔(dān)心

可以把Application.Range理解為一個(gè)方法(或者函數(shù)), Application.Range需要一個(gè)參數(shù), 來返回參數(shù)指定的(n個(gè))單元格, 看個(gè)例子先:

Application.Range('A1').Value = 100

這句話, 把Application(就是Excel) 當(dāng)前激活的Workbook(工作簿)下的激活的Worksheet(工作表)下的Range('A1') (這里就是A1單元格) 的值設(shè)置為數(shù)字100

完整寫法就是:

  1. Dim r As range 'r是一個(gè)Range對(duì)象
  2. Set r = Application.Range('A1')
  3. r.Value = 100
r 是一個(gè)Range對(duì)象, Application.Range('A1')返回一個(gè)Range對(duì)象, 而Application.Range本身是Application的屬性

再看看這個(gè):

Application.Range('A1:B2').Value = 'Haha'
這句話, 把上面那一大堆我就不重復(fù)了, 設(shè)置Range('A1:B2') 的值為文本'Haha' , 這里的Range就不是一個(gè)單元格了, 應(yīng)該是4個(gè): A1, A2, B1, B2(對(duì)角線, 看一下Excel就明白)

也許你會(huì)問, 這樣用Range屬性太麻煩了 ,還必須有前面激活的工作簿,工作表, 太不靈活了.

沒錯(cuò), Range屬性不僅僅在Application下, 同樣也存在于Worksheet下, OK, 聰明的你估計(jì)已經(jīng)想到該怎么寫了:

只要獲取到了一個(gè)我想要的Worksheet對(duì)象(工作表), 我就能訪問指定的范圍Range(...)

    Application.Worksheets('Sheet1').Range('A1').Value = 76000
當(dāng)然,細(xì)心的你也許發(fā)現(xiàn)了:這里沒有說是哪個(gè)Workbook, 沒錯(cuò), 這里的Workbook不是激活的那個(gè)Workbook, 而是你在寫VBA程序的那個(gè)Workbook

7. ScreenUpdating 屏幕更新, 用于設(shè)置是否將VBA的執(zhí)行的中間結(jié)果顯示在Excel表中

顯然, 關(guān)閉屏幕更新, 會(huì)使得VBA的執(zhí)行速度更快.

我們可以做個(gè)實(shí)驗(yàn), 比較關(guān)閉前后的用時(shí).

  1. Dim startTime As Date
  2. Dim endTime As Date
  3. For t = 0 To 1
  4. Application.ScreenUpdating = (t = 1)
  5. startTime = Time
  6. For Each c In ActiveSheet.Columns
  7. If c.Column Mod 2 = 0 Then
  8. c.Hidden = True
  9. End If
  10. Next
  11. endTime = Time
  12. x = (endTime - startTime) * 24 * 60 * 60
  13. If Application.ScreenUpdating Then
  14. Debug.Print 'ScreenUpdating Enabled: ' & x & ' sec.'
  15. Else
  16. Debug.Print 'ScreenUpdating Disabled: ' & x & ' sec.'
  17. End If
  18. Next
可能的輸出結(jié)果:

ScreenUpdating Disabled: 0 sec.
ScreenUpdating Enabled: 3.99999999999743 sec.

所以,執(zhí)行復(fù)雜操作時(shí)很慢, 有可能就是沒有關(guān)閉ScreenUpdating屬性

8. StatusBarDisplayStatusBar  

Application.StatusBar就是Excel的狀態(tài)欄, 而Application.DisplayStatusBar意思是否顯示狀態(tài)欄,一個(gè)Boolean變量

  1. Application.DisplayStatusBar = True
  2. Application.StatusBar = '正在打開文檔...'
  3. Application.StatusBar = False '設(shè)為False就是恢復(fù)Excel狀態(tài)欄的原來狀態(tài)


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲国产精品久久网午夜| 视频一区中文字幕日韩| 免费观看一区二区三区黄片| 国产老熟女超碰一区二区三区| 国产麻豆一线二线三线| 国产伦精品一区二区三区高清版| 久久精品国产99国产免费| 一区二区三区国产日韩| 日韩欧美好看的剧情片免费| 91精品蜜臀一区二区三区| 九九九热在线免费视频| 儿媳妇的诱惑中文字幕| 欧美不卡一区二区在线视频| 国产偷拍精品在线视频| 偷自拍亚洲欧美一区二页| 在线九月婷婷丁香伊人| 日本特黄特色大片免费观看| 欧美老太太性生活大片| 国产一级不卡视频在线观看| 欧美午夜一区二区福利视频| 尹人大香蕉一级片免费看| 欧美日韩国产免费看黄片| 亚洲永久一区二区三区在线| 91欧美激情在线视频| 视频在线观看色一区二区| 视频一区二区 国产精品| 清纯少妇被捅到高潮免费观看| 在线中文字幕亚洲欧美一区| 日本午夜精品视频在线观看| 日韩精品少妇人妻一区二区| 亚洲一区二区三区熟女少妇| 欧美黑人在线精品极品| 午夜福利视频六七十路熟女| 91精品蜜臀一区二区三区| 中国一区二区三区人妻| 不卡在线播放一区二区三区| 欧美国产在线观看精品| 国产精品国产亚洲看不卡| 国产精品午夜福利免费阅读| av一区二区三区天堂| 九九热这里只有精品视频|