将特定范围从一个工作表复制到另一个工作表

阿马尔·谢赫

我有一个工作表,我想对其进行梳理以获取特定的程序名称。找到该程序名称后,我的代码将从列A到 中选择正确的行CV,并继续这样做直到最后一行具有单元格值。最后,它会复制选定的行并将它们粘贴到创建的新工作簿中。

话虽如此,我的rng工会(在我的For i循环中)由于某种原因不起作用。它是从我正在创建工作簿中复制值,而不是从工作簿wbthis 中复制值我试过使用test.Range(Cells(i,1), Cells(i, 78)),但这也不起作用。For选择整行的注释循环有效,但我不想要整行。

Sub ProgramExport()
  'Dim arr

  'arr3 = Array("Accessible Pedestrian Signals", "Advanced Traffic Signal Control ", "Bathurst Street Bridge Rehabilitation ", "C.I. Centennial Pk Path", _
               "C.I. Etobicoke Valley PK", "C.I. Humber Trail Extension and Gaps", "C.I. Pan Am Trail Expansion - Gatineau Trail", _
               "City Bridge Rehabilitation ", "City-10-Surface Transit Operational Improvement Studies - Phase 3", _
               "City-11-King Street Modelling Study", "City-12-REimagining Yonge North Study", "City-15-Flemingdon Park-Thorncliffe Park Neighbourhood  Cycling Connections", _
               "City-22-Accessible Pedestrian Signals Expansion", "City-26-Geometric Safety Improvements - Removal of Channelized Right Turns", _
               "City-27-Missing sidewalk links - 2017", "City-28-Missing sidewalk links - 2018", "City-37-Installation of Cycling Facilites on Woodbine Ave.", _
               "City-38-Installation of Cycling Facilities on Lakeshore Blvd West", "City-39-Surface Transit Operational Improvement Studies - Phase 1", _
               "City-40-King Street Pilot Implementation", "City-42-Yonge Tomorrow", "City-6-Eglinton Connects Streetscape Improvements and Cycle Tracks", _
               "City-8-East Don Trail", "City-9-Surface Transit Operational Improvement Studies - Phase 2", "Critical Interim Road Rehabilitation ", _
               "Cycling Infrastructure ", "Design of Cherry St Realignment and Bridges", "Ditch Rehabilitation and Culvert Reconstruction", _
               "Don Valley Parkway Rehabilitation", "Engineering Studies", "F.G. Gardiner Interim Repairs", "Facility Improvements ", _
               "Georgetown South City Infrastructure Upgrades", "Greenville and Yonge Street Improvements", _
               "Growth Related Capital Works ", "Guide Rail Replacement Program", "John Street Revitalization Project", "King Liberty Cycling Pedestrian Bridge", _
               "Laneways", "LARP (Lawrence-Allen Revitalization Project) Phase 1", "LED signal Module Conversion ", "Legion Road Extension & Grade Separation", _
               "Local Road Rehabilitation", "Local Speed Limit Reduction", "Major Roads Rehabilitation", "Major SOGR Pooled Contingency ", _
               "N.I. Mill Street Streetscape", "N.I. The Queensway from Islington to Royal York", "Neighborhood Improvements", _
               "North York Service Road Extension", "Pedestrian Safety and Infrastructure Program", _
               "Port Union Road ( Lawrence Ave - Kingston Rd)", "PSI Homewood Depressed Curb", "PXO Visibility Enhancement", _
               "Regent Park Revitalization ", "Retaining Walls Rehabilitation ", "Road Safety Plan (LGTSI) ", "Rouge National Park ", _
               "Salt Management Program", "Sidewalks", "Signs and Markings Asset Management", "Six Points Interchange Redevelopment", _
               "SM Bay Cloverdale", "SM McGill-Granby Village", "SM The Upper Avenue", "Steeles Widenings ( Tapscott Road - Beare Road) ", _
               "System Enhancements for Road Repair & Permits", "Tactile Domes Installation", "Third Party Signals ", "Traffic - Control RESCU", _
               "Traffic Calming", "Traffic Congestion Management ", _
               "Traffic Signals Major Modifications", "Transportation Safety & Local Improvement Program ", "Work for TTC & Others", _
               "Yonge Street Revitalization EA Study (Reimagining Yonge)")

  Dim Program As Range
  Dim rng As Range
  Dim wbThis As Workbook
  Dim newBook As Workbook
  Dim value As String
  Dim userID As String
  Dim fn As String
  Dim programN As Variant
  Dim Cell As Range
  Dim sName As String
  userID = InputBox("Please enter your user id.")

  'For Each programN In arr3
      programN = "Local Road Rehabilitation"
      Set Program = Range("C1:C2000")
      Set newBook = Workbooks.Add
      'UserForm1.Show
      Set wbThis = Workbooks("TS L2L3v111.xlsm")
      Dim test As Worksheet: Set test = wbThis.Worksheets(4)
      'value = InputBox("Please enter the program you'd like to export.")
      fn = "C:\Users\" & userID & "\Desktop\" & programN & ".xlsx"
      'aFN = "C:\Users\ashaikh5\Desktop\Copy of TS L2L3v11.xlsm"
      newBook.SaveAs (fn)
      'FileFormat:=52

      For i = 1 To 2000
         If test.Cells(i, 3) = programN Then
                If rng Is Nothing Then
                    Set rng = test.Range(Cells(i, 1), Cells(i, 78))

                    MsgBox "Range was set"
                    Exit For
                Else
                    Set rng = Union(rng, ActiveSheet.Range(Cells(i, 1), Cells(i, 78)))

                    MsgBox "Range was set"
                    Exit For
                End If
         Else
             'something
         End If

      Next i

      'For Each Cell In Program

          'If Cell = programN Then
              'If rng Is Nothing Then
                'Set rng = Cell.Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 78))
              'Else
                'r = ActiveCell.Row
                'Set rng = Union(rng, Cell.Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 78)))
              'End If
          'Else
              'cell.Font.ColorIndex = 3

      'End If

      'Next
      Dim ws As Worksheet: Set ws = newBook.Worksheets(1)
      erow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
      If Not rng Is Nothing Then
        rng.Copy
      Else
        MsgBox "rng was not set in the for loop"
      End If
      ws.Cells(erow, 1).PasteSpecial
      'ws.Cells(erow, 1).PasteSpecial xlPasteFormats
      'ws.Cells(erow, 1).PasteSpecial xlPasteValues
      ws.Columns("A:L").ColumnWidth = 14
      ws.Columns("C").AutoFit
      ws.Columns("N:CM").ColumnWidth = 14
      'Set wbThis = Workbooks("TS L2L3v111.xlsm")

      'Dim test As Worksheet: Set test = wbThis.Worksheets(4)

      test.Rows(2).Copy
      ws.Cells(1, 1).PasteSpecial
      ws.Columns("F:K").Columns.Group
      ws.Columns("F:K").EntireColumn.Hidden = True
      ws.Columns("R:Z").Columns.Group
      ws.Columns("R:Z").EntireColumn.Hidden = True
      ws.Columns("AH:AP").Columns.Group
      ws.Columns("AH:AP").EntireColumn.Hidden = True
      ws.Columns("AX:BF").Columns.Group
      ws.Columns("AX:BF").EntireColumn.Hidden = True
      ws.Columns("BJ:BN").Columns.Group
      ws.Columns("BJ:BN").EntireColumn.Hidden = True
      ws.Columns("BP:CA").Columns.Group
      ws.Columns("BP:CA").EntireColumn.Hidden = True
      ws.Range("A1", "CM1").End(xlUp).AutoFilter 1
      ActiveWindow.SplitColumn = 13
      ActiveWindow.FreezePanes = True
      ws.Columns("CW:FX").Clear
      ws.Cells.Validation.Delete
      newBook.Save
      newBook.Close
      'Set newBook = Workbooks.Open("C:\Users\" & userID & "\Desktop\" & programN & ".xlsm")
      'Dim test1 As Worksheet: Set test1 = newBook.Worksheets(1)
      'test1.ScrollArea = "$A$1:$CV$2000"
     ' newBook.Save
      'newBook.Close

  'Next programN
End Sub
托西梅

For i = 1 To 2000尝试添加wbThis.Activate. 有时,如果工作簿未首先处于活动状态,则不允许您在其中进行操作。

编辑:

您也在使用ActiveSheet,这可能很危险。鉴于您正在创建一个工作簿并在此行之前添加工作表,我会质疑实际的“活动工作表”是什么。如果您改为在那里引用工作表名称,这是一个更好的做法,并确保您正在使用预期的工作表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将特定范围的excel单元格从一个工作表复制到另一个工作表

将工作表中的范围复制到另一个工作表 VBA

excel 将形状从一个工作表复制到另一个工作表

根据列将数据从一个工作表复制到另一个工作表

将数据从一个工作簿复制到另一个工作簿工作表

需要根据第一库仑值将数据范围从一个Excel工作表复制到另一个工作表

将粘贴VBA范围从一个工作表复制到另一个工作表中循环并转置数据

将特定行上的第n列从一个工作表复制到另一个工作表(在Google表格中)

没有宏将特定工作表从一个工作簿复制到另一个工作簿

不复制到A列时无法将数据从一个Excel工作表复制到另一个工作表

如何为每个循环将范围复制到另一个工作表?

将两列从一个Excel工作表复制到另一个

将整个工作表从一个Excel实例复制到另一个

VBA脚本从一个工作表复制到另一个工作表

将Excel工作表从一个工作表复制到Python中的另一个工作表

从一个工作簿的工作表复制到另一个工作簿时出错

将特定单元格复制到另一个工作表

如何使用 Python 将数据从一个 Excel 工作表复制到同一工作簿的另一个工作表?

将粘贴自动范围从一个工作簿复制到另一个工作簿

如何将工作表内容复制到另一个工作表?

使用条件将数据从工作表复制到另一个工作表

根据2个条件输入将行从一个excel工作表复制到另一个工作表

如何将表格的特定部分从工作表复制到另一个工作表

将工作簿中的特定工作表复制到另一个工作簿,不包括宏

将范围从一个工作簿中的工作表复制到另一工作簿中的工作表

在Excel中将某些特定单元格从一个工作表复制到另一个工作表的VBA是什么?

仅将某些单元格从一行复制到另一个工作表

如何将文本从一列复制到另一个工作表而不重复?

如何将一个Google工作表复制到另一个Google工作表