从一个工作簿中查找单元格并将其复制到另一个工作簿
Posted
技术标签:
【中文标题】从一个工作簿中查找单元格并将其复制到另一个工作簿【英文标题】:Finding and Copying Cells from One Workbook to Another 【发布时间】:2018-02-01 18:07:11 【问题描述】:我有一个代码,该代码大部分都可以工作,我在工作簿 1 中使用工作簿 1 中的列表中的名称创建了大量新工作表。然后它从工作簿中的另一个工作表复制单元格并将工作表名称放在单元格 D1 中.这按预期工作。
然后我想在另一个工作簿中查找新工作表名称并复制一些与其行号相关的单元格。我的代码打开工作簿 2(设置为 wbtemps),但它似乎没有转到工作簿 2 中的指定工作表并找到单元格。我尝试将代码分成多个部分,如果我事先选择工作表,它会找到单元格,但它似乎仍然没有复制我想要的单元格......
任何帮助将不胜感激。我显然在某个地方错过了一些东西......
Set wb = ActiveWorkbook
InpFolder = ThisWorkbook.Path & "\Matrix_Inputs\"
MyValue1 = InputBox("WP1 Draft Matrix Filename", "Input", "Filename")
For Each cell In wsWithSheetNames.Range(Range("B5"), Range("B5").End(xlDown))
With wb
.Sheets.Add after:=.Sheets(.Sheets.Count)
On Error Resume Next
ActiveSheet.Name = RemoveSpecialCharactersAndTruncate(cell.Value)
Sheets("Template").Cells.Copy ActiveSheet.Range("A1")
ActiveSheet.Range("D1").Value = cell.Value
Application.ScreenUpdating = False
Set wbtemp = Workbooks.Open(InpFolder & MyValue1 & ".xls*", True, True) 'The code works up to here
Set n = wbtemp.Sheets("2_Matrix Likely Pressures").Range("B1").EntireColumn.Find(cell.Value)
wbtemp.Sheets("2_Matrix Likely Pressures").Range(.Range("E" & n.Row), .Range("E", n.Row).End(xlToRight)).Copy
wb.ActiveSheet.Range("B21").PasteSpecial Transpose:=True
wbtemp.Close False
Set wbtemp = Nothing
Application.ScreenUpdating = True
If Err.Number = 1004 Then
Debug.Print cell.Value & " already used as a sheet name"
End If
On Error GoTo 0
End With
Next cell
【问题讨论】:
行wbtemps.Sheets("2_Matrix Likely ...
在With wb
语句的范围内有“锚点”。我认为您需要添加With Worksheets("WhateverSheet")
...否则.Range("E" & n.Row)
将引用活动表...
我试过了,但还是不行。最后,我必须同时选择工作表和其中一个单元格,然后才能找到并复制正确的范围(这很烦人,因为我不应该以这种方式选择东西)。我会发布代码。
【参考方案1】:
所以最后,它似乎工作并找到我想要复制的范围的唯一方法是,如果我单独选择工作表,然后选择我想要复制的范围的第一个单元格。我知道您不应该使用 Select,但似乎没有其他方法起作用(我在互联网上进行了很多搜索)。我已经包含了我用于让我悲伤的部分的最终代码。
Set wbtemp = Workbooks.Open(InpFolder & MyValue1 & ".xls*", True, True)
Set n = wbtemp.Sheets("2_Matrix Likely Pressures").Range("B1").EntireColumn.Find(cell.Value)
With wbtemp
.Sheets("2_Matrix Likely Pressures").Select
.Sheets("2_Matrix Likely Pressures").Cells(n.Row, "E").Select
.Sheets("2_Matrix Likely Pressures").Range(Selection, Selection.End(xlToRight)).Copy
End With
.ActiveSheet.Range("B21").PasteSpecial Transpose:=True
Application.CutCopyMode = False
【讨论】:
以上是关于从一个工作簿中查找单元格并将其复制到另一个工作簿的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python(和 DataNitro)将单元格从一个 Excel 工作簿中的特定工作表复制到另一个 Excel 工作簿中的特定工作表
VBA:如果工作簿中的工作表名称等于从用户窗体中选择的组合框值,则复制该工作表并将其粘贴到另一个工作簿中