在进行单元格调整时将活动工作表复制到新工作表

时间:2015-10-11 03:06:37

标签: excel vba excel-vba worksheet

我正在寻找VBA将活动工作表复制到新工作表,我希望VBA能够从活动工作表中复制页面布局。同样,如果每个工作表的单元格O3可以增加1。不确定是否可能但是如果工作表将自己重命名为Cell O2中的对应部分

我目前正在使用以下代码,这会将活动工作表复制到新工作表,但它不会保留我的格式(边距,缩放)

Sub Macro1()
    Cells.Select
    Selection.Copy
    Worksheets.Add after:=Sheets(Sheets.Count)
    Range("A1").Select
    ActiveSheet.Paste
End Sub

我对以下内容进行了一些调整

Sub Macro1()
    Dim sheetToCopy As Worksheet, newSheet As Worksheet
    Set sheetToCopy = ActiveSheet
    sheetToCopy.Copy After:=Sheets(Sheets.Count)
    Set newSheet = Sheets(Sheets.Count)
    newSheet.Range("O2").Value = newSheet.Range("O2").Value + 1
    newSheet.Range("O3").Value = newSheet.Range("O3").Value + 1
End Sub

由于O2不断变化,我希望将O2保留为工作表名称。此外,我一直在弹出“名称'Group6'已经存在。单击是以使用该版本的名称......”

我如何才能阻止此对话框弹出?

2 个答案:

答案 0 :(得分:0)

Sub Macro1()
    Dim sheetToCopy as Worksheet, newSheet as Worksheet
    Set sheetToCopy = ActiveSheet

    '## Copy to a new sheet
    sheetToCopy.Copy After:=Sheets(Sheets.Count)

    Set newSheet = Sheets(Sheets.Count)

    '## Name the new sheet based on O2 in the original sheet
    '   NOTE: This will fail if a sheet of this name already exists.
    newSheet.Name = sheetToCopy.Range("O2").Value
    '## Increment the value in O3 on the new sheet
    newSheet.Range("O3").Value = newSheet.Range("O3").Value + 1
End Sub

答案 1 :(得分:0)

此代码包括:

更新新发票日期的两个选项

  1. 使用计算机的实际日期(依赖计算机的日期保持更新)(!)

  2. 根据模板工作表

  3. 使用下一天

    处理日期现有发票的两个选项

    1. 删除现有发票,保留新发票(!)

    2. 通过在名称上添加时间戳来重命名现有发票,同时保留两者。

    3. (!)如果您想使用其中任何一个取消注释并删除\ comment第二个选项

      ,请在代码中注释这些选项
      Sub NewInvoice_Add()
      Dim WshSrc As Worksheet
      Dim WshTrg As Worksheet
      Dim sDate As String
      
          Application.ScreenUpdating = False
          Application.DisplayAlerts = False
      
          With ThisWorkbook
      
              Rem Set Source Worksheet
              Set WshSrc = .Sheets("Sheet 1")
      
              Rem Set Date & Last Invoice Number in Source Worksheet
              With WshSrc
                      'Option 1. Use Actual Date - Relays on date of the computer to be updated
                      '.Range("O2").Value = Date
      
                      'Option 2. Use Next Day as per Template Worksheet
                      .Range("O2").Value = .Range("O2").Value2 + 1
      
                  sDate = Format(.Range("O2").Value2, "dd-mm-yyyy")   ' Adjust date format as required
                  .Range("O3").Value = .Range("O3").Value2 + 1
              End With
      
              Rem Create New Invoice from Source Worksheet
              WshSrc.Copy After:=.Sheets(.Sheets.Count)
              Set WshTrg = .Sheets(.Sheets.Count)
      
              'Dealing with existing worksheet for the date
      
                  'Option 1. Deleting it
                  'On Error Resume Next
                  '.Sheets(sDate).Delete
                  'On Error GoTo 0
      
                  'Option 2. Renaming it
                  On Error Resume Next
                  .Sheets(sDate).Name = sDate & Format(Now, "_HHMM")
                  On Error GoTo 0
      
              Rem Name New Worksheet
              WshTrg.Name = sDate
      
          End With
      
          Application.ScreenUpdating = True
          Application.DisplayAlerts = True
      
      End Sub