Excel – 打开工作簿名称

我有下面的代码。

非常简单,它要求用户select多个Excel工作簿,然后将数据从这些工作簿复制并粘贴到当前工作簿。

1.我想添加function,而不是用户selectExcel工作簿。 excel工作簿将被选中,因为他们的名字被列在当前的excel表格中。

例如 – select名称在A1:A5中列出的指定文件夹中的Excel工作簿。

  1. 我想在复制到当前工作簿之前对数据执行自动处理。

例如,如果工作簿名称= 100.xlsx,然后乘以15select。

看到我目前的代码

Sub SUM_BalanceSheet() Application.ScreenUpdating = False 'FileNames is array of file names, file is for loop, wb is for the open file within loop 'PasteSheet is the sheet where we'll paste all this information 'lastCol will find the last column of PasteSheet, where we want to paste our values Dim FileNames Dim file Dim wb As Workbook Dim PasteSheet As Worksheet Dim lastCol As Long Set PasteSheet = ActiveSheet lastCol = PasteSheet.Cells(1, Columns.Count).End(xlToLeft).Column 'Build the array of FileNames to pull data from FileNames = Application.GetOpenFilename(filefilter:="Excel Files (*.xlsx), *.xlsx", MultiSelect:=True) 'If user clicks cancel, exit sub rather than throw an error If Not IsArray(FileNames) Then Exit Sub 'Loop through selected files, put file name in row 1, paste P18:P22 as values 'below each file's filename. Paste in successive columns For Each file In FileNames Set wb = Workbooks.Open(file, UpdateLinks:=0) PasteSheet.Cells(1, lastCol + 1) = wb.Name wb.Sheets("Page 1").Range("L14:L98").Copy PasteSheet.Cells(2, lastCol + 1).PasteSpecial Paste:=xlPasteValues wb.Close SaveChanges:=False lastCol = lastCol + 1 Next 'If it was a blank sheet then data will start pasting in column B, and we don't 'want a blank column A, so delete it if it's blank If Cells(1, 1) = "" Then Cells(1, 1).EntireColumn.Delete shift:=xlLeft Application.CutCopyMode = False Application.ScreenUpdating = True End Sub 

这是一个需要微调的框架,但你可以得到这样的想法:

 Dim i&, wbName$ Dim rng As Excel.Range Dim wb, wb1 As Excel.Workbook Set wb = Application.ThisWorkbook Set rng = wb.Sheets("Sheet1").Range("A1") For i = 0 To 14 wbName = CStr(rng.Offset(i, 0).Value) On Error Resume Next 'Disable error handling. We will check whether wb is nothing later wb1 = Application.Workbooks.Open(wbName, False) On Error GoTo ErrorHandler If Not IsNothing(wb1) Then 'Copy-paste here If wb1.Name = "100" Then 'any condition(s) 'Multiply, divide, or whatever End If End If Next ErrorHandler: MsgBox "Error " & Err.Description 'Add additional error handling 

尽量不要绝对需要使用ActiveSheetActiveWorkbook 。 使用ThisWorkbook ,专用Workbook对象,并命名Workbook.Sheets("Name")Workbook.Sheets(index)

或者,您也可以不使用错误检查function,而是在丢失文件时失败。