把一个文件夹下的所有excel工作簿中的工作表名称改成所在工作簿的名称
文件夹内有N个.xls 的 工作簿(每个工作簿内只有一个工作表,且所有工作表同名)
需求:把工作表的名称改为所在工作簿的名称,批量操作,不打开工作簿。 展开
1.单击Excel2007窗口左上角的“Office 按钮”图标,在弹出的菜单中,单击“Excel选项”按钮,如上图所示。
2.在“Excel选项”对话框中,单击左侧“常用”分类,勾选“在功能区显示"开发工具"选项卡”项,单击“确定”按钮返回Excel2007主窗口,即可添加开发工具选项卡。
3.单击“开发工具”菜单-“Visual Basic”图标
4.Excel2007打开代码编辑器窗口,单击“插入”菜单-“模块”菜单项,即可插入默认的模块“模块1”,即可在右侧的VBA代码编辑器窗口输入VBA代码。
Sub Books2Sheets()
'定义对话框变量
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
'新建一个工作簿
Dim newwb As Workbook
Set newwb = Workbooks.Add
With fd
If .Show = -1 Then
'定义单个文件变量
Dim vrtSelectedItem As Variant
'定义循环变量
Dim i As Integer
i = 1
'开始文件检索
For Each vrtSelectedItem In .SelectedItems
'打开被合并工作簿
Dim tempwb As Workbook
Set tempwb = Workbooks.Open(vrtSelectedItem)
'复制工作表
tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)
'把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsx
newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xls", "")
'关闭被合并工作簿
tempwb.Close SaveChanges:=False
i = i + 1
Next vrtSelectedItem
End If
End With
Set fd = Nothing
End Sub
Sub rename()
Dim FilesToOpen
Dim x As Integer
Application.ScreenUpdating = False
FilesToOpen = Application.GetOpenFilename(FileFilter:="MicroSoft Excel文件(*.xls),*.xls", MultiSelect:=True, Title:="要合并的文件")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "没有选中文件"
End If
x = 1
While x <= UBound(FilesToOpen)
Workbooks.Open Filename:=FilesToOpen(x)
ActiveWorkbook.Sheets(1).Name = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4)
ActiveWorkbook.Close SaveChanges:=True
x = x + 1
Wend
Application.ScreenUpdating = True
Application.Quit
End Sub
Sub Rename()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
cPath = "D:\Users\WIN_X\Desktop\1\"
cFile = Dir(cPath & "*.xls")
Do While cFile <> ""
wb = Split(cFile, ".")(0)
If wb <> Split(ThisWorkbook.Name, ".")(0) Then
With GetObject(cPath & cFile)
.Sheets(1).Name = wb
Windows(cFile).Visible = True
.Close True
End With
End If
cFile = Dir
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "完成!"
End Sub
2013-12-13 · 知道合伙人软件行家
2013-12-13
把工作簿名称赋值给工作表名称;
保存;
不会写代码……