从一个工作簿中查找单元格并将其复制到另一个工作簿

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:如果工作簿中的工作表名称等于从用户窗体中选择的组合框值,则复制该工作表并将其粘贴到另一个工作簿中

Excel VBA 宏将复制一系列单元格并粘贴到另一个工作簿中

将单元格从一个工作表保存到另一个工作簿中的工作表 - 无需提示即可保存