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
使用宏代码在云电脑上历遍每个文件夹,文件夹里的excel显示不出来,是指根本就没有获取到任何一个Excel文件呢还是报什么错了呀,如果报错了,贴下错误代码,如果没有获取到Excel文件,先检查下那个SelectedItems有没有值,其次,你选择的是一个文件夹的话,那你可以先得到文件夹的路径,然后在文件夹下查找所有Excel文件,然后循环处理:
myPath = "F:\文件夹路径\"
myFile = Dir(myPath & "*.xls*") '依次找寻指定路径中的*.xls,或者xlsx文件
Do While myFile <> "" '当指定路径中有文件时进行循环
Workbooks.Open(myPath & myFile) '打开要处理的文件
。。。处理文件
这段代码是用VBA编写的,主要用于将多个Excel文件中的工作表合并到一个新的工作簿中。
根据您的描述,问题似乎是在使用宏代码历遍每个文件夹时,无法正确显示包含.xlsx文件的文件夹中的Excel文件。这可能是因为在文件对话框中选择的文件没有包括.xlsx文件,或者代码中没有正确处理.xlsx文件的情况。
建议您检查文件对话框的设置,确保已选择所有需要合并的Excel文件,包括.xlsx文件。您也可以尝试修改代码以正确处理.xlsx文件。例如,可以使用类似以下代码的语句来处理.xlsx文件:
If InStr(1, tempwb.Name, ".xlsx", vbTextCompare) > 0 Then
newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xlsx", "")
Else
newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xls", "")
End If
此代码段将检查文件名是否包含.xlsx字符串,如果是,则将新工作表的名称设置为不包含.xlsx的文件名;否则,将新工作表的名称设置为不包含.xls的文件名。
合并工作簿参考:https://blog.csdn.net/hhhhh_51/article/details/123834366
根据你的描述、以及以上各位老师的答复,有可能是以下这种情况:
1)程序本身没有问题。
你可以先选择一个本地路径,调试一下,试试看,看程序有无问题。
如果没问题,就说明是网络的问题。
2).FileDialog、.Open等VBA函数,对于虚拟磁盘并不能很好地操作。
例如,我们用 Z:盘符定位一个网络磁盘,就存在不能存取的现象(其它软件也类似)。
虚拟磁盘存取操作与本地文件IO本质是有所不同。
'把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsx
newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xlsx", "")