VBA 文件操作

'excel文件和工作簿

excel文件就是excel工作簿,excel文件打开需要excel程的支持

'Workbooks 工作簿集合,泛指excel文件或工作簿

'Workbooks("A.xls"),名称为A的excel工作簿

     Sub t1()
        Workbooks("A.xls").Sheets(1).Range("a1") = 100
     End Sub

workbooks(2),按打开顺序,第二个打开的工作簿。

      Sub t2()
        Workbooks(2).Sheets(2).Range("a1") = 200
     End Sub

ActiveWorkbook ,当打开多个excel工作簿时,你正在操作的那个就是ActiveWorkbook(活动工作簿)

Thisworkbook,VBA程序所在的工作簿,无论你打开多少个工作簿,无论当前是哪个工作簿是活动的,thisworkbook就是指它所在的工作簿。

'工作簿窗口

'Windows("A.xls"),A工作簿的窗口,使用windows可以设置工作簿窗口的状态,如是否隐藏等。

 Sub t3()
        Windows("A.xls").Visible = False
     End Sub
     Sub t4()
        Windows(2).Visible = True
     End Sub

1 判断A.Xls文件是否存在

    Sub W1()
     If Len(Dir("d:/A.xls")) = 0 Then
       MsgBox "A文件不存在"
     Else
       MsgBox "A文件存在"
     End If
   End Sub

'2 判断A.Xls文件是否打开

    Sub W2()
     Dim x As Integer
      For x = 1 To Windows.Count
        If Windows(x).Caption = "A.XLS" Then
          MsgBox "A文件打开了"
          Exit Sub
        End If
      Next
    End Sub

3 excel文件新建和保存

  Sub W3()
     Dim wb As Workbook
     Set wb = Workbooks.Add
       wb.Sheets("sheet1").Range("a1") = "abcd"
     wb.SaveAs "D:/B.xls"
  End Sub

4 excel文件打开和关闭

 Sub w4()
    Dim wb As Workbook
    Set wb = Workbooks.Open("D:/B.xls")
    MsgBox wb.Sheets("sheet1").Range("a1").Value
    wb.Close False
 End Sub

5 excel文件保存和备份

   Sub w5()
      Dim wb As Workbook
      Set wb = ThisWorkbook
      wb.Save
      wb.SaveCopyAs "D:/ABC.xls"
   End Sub

6 excel文件复制和删除

   Sub W6()
      FileCopy "D:/ABC.XLS", "E:/ABCd.XLS"
      Kill "D:/ABC.XLS"
   End Sub

工作表

概念

'excel工作表的分类


'excel工作表有两大类,一类是我们平常用的工作表(worksheet),另一类是图表、宏表等。这两类的统称是sheets

'sheets 工作表集合,泛指excel各种工作表

'Sheets("A"),名称为A的excel工作表
Sub t1()
Sheets("A").Range("a1") = 100
End Sub

'workbooks(2),按打开顺序,第二个打开的工作簿。

Sub t2()
Sheets(2).Range("a1") = 200
End Sub


'ActiveSheet ,当打开多个excel工作簿时,你正在操作的那个就是ActiveSheet

1 判断A工作表文件是否存在

    Sub s1()
     Dim x As Integer
      For x = 1 To Sheets.Count
        If Sheets(x).Name = "A" Then
          MsgBox "A工作表存在"
          Exit Sub
        End If
      Next
      MsgBox "A工作表不存在"
    End Sub

2 excel工作表的插入

  Sub s2()
     Dim sh As Worksheet
     Set sh = Sheets.Add
       sh.Name = "模板"
       sh.Range("a1") = 100
  End Sub

'3 excel工作表隐藏和取消隐藏

 Sub s3()
    Sheets(2).Visible = True
 End Sub

4 excel工作表的移动

   Sub s4()
     Sheets("Sheet2").Move before:=Sheets("sheet1") 'sheet2移动到sheet1前面
     Sheets("Sheet1").Move after:=Sheets(Sheets.Count) 'sheet1移动到所有工作表的最后面
   End Sub

6 excel工作表的复制

   Sub s5() '在本工作簿中
      Dim sh As Worksheet
      Sheets("模板").Copy after:=Sheets(Sheets.Count)
       Set sh = ActiveSheet
          sh.Name = Sheets.Count & ""
          sh.Range("a1") = "测试"
   End Sub

7 另存新的工作薄

   Sub s6() '另存为新工作簿
      Dim wb As Workbook
       Sheets("模板").Copy
       Set wb = ActiveWorkbook
          wb.SaveAs ThisWorkbook.Path & "/1日.xls"
          wb.Sheets(1).Range("b1") = "测试"
          wb.Close True
   End Sub

'7 保护工作表

   Sub s7()
      Sheets("sheet2").Protect "123"
   End Sub

   Sub s8() '判断工作表是否添加了保护密码
      If Sheets("sheet2").ProtectContents = True Then
        MsgBox "工作簿保护了"
      Else
        MsgBox "工作簿没有添加保护"
      End If
   End Sub

 '8 工作表删除

     Sub s9()
       Application.DisplayAlerts = False
         Sheets("模板").Delete
       Application.DisplayAlerts = True
     End Sub

'9 工作表的选取

     Sub s10()
       Sheets("sheet2").Select
     End Sub

例题 

题 1

复制“日报表模板”工作表(已隐藏)至本工作簿最后一个位置,复制后的工作表名称为最后的日期天数+1&"报表"的格式。
如:
当前情况下,没有任何一天的日报表,则新复制的工作表名称是“1日报表”,如果再添加时就是1+1=2日报表。如果目前已存在5天的日报表,则复制后的工作表名称应为“6日报表”

注:“日报表模板”工作表复制后要隐藏起来

Sub 日报表格式生成()
Dim msh As Worksheet, shname$
Application.ScreenUpdating = False
Set msh = Sheets("日报表模板")
shname = Sheets(Sheets.Count).Name
With msh
    .Visible = xlSheetVisible
    .Copy after:=Sheets(Sheets.Count)
    .Visible = xlSheetHidden
End With
If shname = msh.Name Or shname = "第1题" Then
    ActiveSheet.Name = 1 & "日报表"
Else
    ActiveSheet.Name = Left(shname, Len(shname) - 3) + 1 & "日报表"
End If
Application.ScreenUpdating = True
End Sub

题目2:

把所有日报表另存为工作簿到本文夹下,工作簿名称为工作表的名称

Sub 另存报表()
Dim ish As Worksheet, myname$
Application.ScreenUpdating = False
For Each ish In ThisWorkbook.Worksheets
myname = ish.Name
If myname <> "第1题" And myname <> "日报表模板" Then
    ish.Move
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "/" & myname & ".xls"
    ActiveWorkbook.Close
End If
Next
Application.ScreenUpdating = True
End Sub
原文地址:https://www.cnblogs.com/heshun/p/12354829.html