c.Excel-VBA(工作簿-工作表-单元格-行列)

最近学习VBA,发现之前的我太过于追求技术上的成功而忘记了学习的本质,是真正解决实际问题。学习了如何录制宏,了解到工程、对象等,接下来研究VBA工作簿、工作表及单元格:

工作簿、工作表图示

VBA工作簿

  1. 第N个工作簿 Workbooks(N)
  2. 指定名称的工作簿 Workbooks("工作簿名")
  3. 当前所在的工作簿 thisWorkbook
  4. 当前激活的工作簿 ActiveWorkbook

新建工作簿

'1:新增工作簿'
Sub AddNewWorkbooks()
      Workbooks.add
End Sub
'2:创建工作簿的一种更好方式是将其分配给一个对象变量'
Option Explicit    
Sub AddNewWorkbooks()
Set NewBook = Workbooks.Add
   With NewBook
   .Title = "标题"
   .Subject = "未知属性"
   .SaveAs Filename:="我是新建的工作簿名"
   End With
   MsgBox(ActiveWorkbook.Path)  '返回当前激活工作簿路径'
End Sub

Option Explicit的作用为:声明所有变量都需要先定义才能使用,否则程序在使用了未经定义的变量时就会报错'。 因VB中并不要求显示定义变量,即变量可以不经定义直接使用.

打开工作簿

Sub OpenWorkbooks()
   Workbooks.Open("C:\users\Documents\我是新建的工作簿名.xlsx")   '可以使用Open方法打开指定的工作簿,注意路径要填写完整'
End Sub     '运行完成后将打开该工作簿'

返回当前工作簿的路径

Sub GetWorkbooksPath()
   Application.ActiveWorkbook.Path           '返回当前激活工作簿路径'  
   Application.ActiveWorkbook.FullName       '返回当前激活工作簿路径及名称'  
   pplication.ActiveWorkbook.Name            '返回当前激活工作簿文件名'  
End Sub

VBA工作表

  1. 第N个工作表 Worksheets(N)
  2. 指定名称的工作表 Sheets("工作表名")
  3. 第N个工作表 SheetN
  4. 活动工作表 Activesheets
  5. Worksheets与Sheets的区别:Sheets集合代表当前工作簿中的所有工作表,包括图表工作表、对话框工作表和宏表。Worksheets集合仅代表当前工作簿中的所有工作表。
    Sheets和Worksheets区别

    判断工作表是否存在
Sub TestSheetYesNo()
    Dim mySheetName As String, mySheetNameTest As String
    mySheetName = "Sheet4"       '输入需测试的工作表名称'
    On Error Resume Next   
    mySheetNameTest = Worksheets(mySheetName).Name
    If Err.Number = 0 Then
        MsgBox "The sheet named ''" & mySheetName & "'' does exist in this workbook."
    Else
        Err.Clear
        MsgBox "The sheet named ''" & mySheetName & "'' does NOT exist in this workbook."
    End If
End Sub

On Error Resume Next的作用为:随后的程序即便出现"运行时错误"时,也不
会显示"出错信息",并且会继续运行下去。

VB提供两个语句和一个对象来处理"运行时错误",即:

  1. On Error Resume Next 语句 该语句后面程序出现"运行时错误"时,会继续运行程序,仅只对当前函数有用。如果出错,那么Err对象中将放置最近一次出错的信息。
  2. On Error Goto 0 语句 该语句后面程序出现"运行时错误"时,会显示"出错信息"并停止程序的执行。
  3. Err对象 使用Err对象来得到错误信息。有重要的属性有三个:Number(错误号-设置或返回指定一个错误的值;Err.Number=0指的是还没有出现错误), Source(错误来源-设置或返回产生错误的对象的名称), Description(错误描述-设置或返回一个描述错误的字符串)。分别是错误号,错误来源,错误描述。

创建工作表

Sub TestSheetCreate()
    Dim mySheetName As String, mySheetNameTest As String
    mySheetName = "Sheet4"
    '[可增加判断语句,判断Sheet4是否存在]'
    Worksheets.Add.Name = mySheetName    '该句创建工作表并命名为sheet4'
    MsgBox "The sheet named ''" & mySheetName & "'' did not exist in this workbook but it has been created now."
End Sub

引用工作表

' 1 - 引用1个以上工作表'
Sub Several() 
 Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Select     '选中表1、2、3'
End Sub
'2 - 按索引号引用工作表 
如果移动、添加或删除工作表, 则索引顺序可能会更改'
Sub FirstOne() 
    Worksheets(1).Activate    '引用第一个工作表'
    Sheets(4).Activate        '所有类型的工作表 (工作表、图表、模块和对话框工作表)第四张'
End Sub
'3 - 通过名称引用工作表'
Sub ActivateChart() 
  Worksheets("Sheet1").Activate         '激活名称为“Sheet1”工作表'
  Charts("Chart1").Activate             '激活名称为“Sheet1”图表'
  DialogSheets("Dialog1").Activate      '激活名称为“Dialog1”对话框工作表'
Sheets("Chart1").Activate 
End Sub

VBA单元格

  1. Range 引用单元格和单元格区域
    Range('A1')=Cells(1,'A') =[A1] 单元格A1三种表示方法
    Range('A1:B5') 从单元格A1到B5区域
    Range('A1:B5,B1:B7') 多块的选定区域
  2. Cells (行号,列号)
    Range(cell(1,1),cells(30,1))=Range('A1:A30') 从单元格A1到A30区域
  3. Seletion 当前被选取的区域

引用单元格

'1 - 引用工作表上的所有单元格'
Sub ClearSheet() 
  Worksheets("Sheet1").Cells.ClearContents     '清除Sheet1所有单元格'
End Sub
'2 - 使用 A1 表示法引用单元格和区域'
Sub FormatRange() 
 Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _ 
 .Font.Bold = True 
End Sub
'3 - 使用 Range 对象引用单元格'
Sub Random() 
 Dim myRange As Range 
 Set myRange = Worksheets("Sheet1").Range("A1:D5") 
 myRange.Formula = "=RAND()" 
 myRange.Font.Bold = True 
End Sub
'4 - 使用索引编号来引用单元格'
Sub EnterValue() 
 Worksheets("Sheet1").Cells(6, 1).Value = 10 
End Sub

VBA整行、整列

  1. Rows('1:1')=Range('1:1')=Row(1) 第一行
    Rows('2:10')=Range('2:10') 第2-10行
  2. Columns('A:A')=Range('A:A')=Columns(1) 第一列,A列
  3. Range('A:F')=Columns('A:F') A:F列
'将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗'
Sub SeveralRows() 
    Worksheets("Sheet1").Activate 
    Dim myUnion As Range 
    Set myUnion = Union(Rows(1), Rows(3), Rows(5)) 
    myUnion.Font.Bold = True 
End Sub

思考:
1.怎样将多个工作簿合并成一个工作簿?
2、怎样实现跨表链接数据?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335