【问题标题】:How to copy a weekly worksheet with a specific column of data onto a new worksheet如何将包含特定数据列的每周工作表复制到新工作表中
【发布时间】:2015-03-17 14:33:27
【问题描述】:

希望有人知道答案...我是在 Excel 上使用 VBA 的新手。

我正在尝试为我们的食堂员工创建每周杂货预算。 我一直在尝试做的是允许用户在新工作表上创建每周预算。

到目前为止,我创建的是包含“库存开始”和“库存结束”列的表格。厨房主管希望在创建新工作表时将“库存结束”列移至“库存开始”列。

我认为最好的方法是允许用户使用数据填充工作表,然后单击按钮创建一个新工作表并将“库存结束”列复制到“库存开始”的新创建的工作表。

我还想建立一个标准化的命名约定,比如“星期开始 DD/MM/YY。但事实证明这太难了。

我设法找到了 2 段单独的代码。

第一部分复制了“主”工作表,并允许用户自己命名新工作表。这将是完美的,但它只依赖于“主”工作表。我更喜欢它复制活动工作表。

我用 '.将数据从 Stock End (G4:G83) 复制到新工作表 Stock Start (C4:C83)。

但此代码需要知道它正在复制的工作表的名称...

因此,我无法将 2 个代码合二为一。我迷路了……

这是我的谷歌驱动器上相关电子表格的副本:

Weekly Gorcery Budget

亲切的问候

T

Private Sub CommandButton1_Click()
    Dim sName As String
    Dim wks As Worksheet
    Worksheets("Master").Copy after:=Sheets(Worksheets.Count)
    Set wks = ActiveSheet
    Do While sName <> wks.Name
        sName = Application.InputBox _
          (Prompt:="Enter new worksheet name")
        On Error Resume Next
        wks.Name = sName
        On Error GoTo 0
    Loop
    Set wks = Nothing

    'Worksheets(1).Range("G4:G83").Copy
    'Worksheets(2).Range("C4:C83").PasteSpecial xlPasteValues

End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    不要使用Worksheets("Master")Worksheets(1),而是使用ActiveSheet。而不是使用Worksheets(2) 使用wks

    【讨论】:

    • 嗨,AnotherParker,我已经做出了您建议的更改,但现在出现调试错误...“运行时错误'91'对象变量或未设置块变量我也注意到它正在尝试从新工作表 (G4:G83) 复制数据,但无法在调试模式下将其粘贴到所需的列 (C4:C83) 中,它突出显示最后一行 wks.Range("C4:C83")。 PasteSpecial xlPasteValues
    • 没关系,我将 wks 更改为 ActiveSheet,它现在似乎可以工作了。进行更多测试以确保它可以通过多张纸工作。如果我要锁定包含公式的单元格,这是否仍然有效......只是为了让厨房经理不会意外删除单元格的内容。
    • 您可以从 VBA 锁定和解锁单元格。
    • 现在一切正常!感谢您的所有帮助!
    【解决方案2】:

    这是我用来让它全部工作的最终代码..

    感谢 AnotherParker 的所有帮助!

    T

    Private Sub CommandButton1_Click()
        Dim sName As String
        Dim wks As Worksheet
        ActiveSheet.Copy after:=Sheets(Worksheets.Count)
        Set wks = ActiveSheet
        Do While sName <> wks.Name
            sName = Application.InputBox _
              (Prompt:="Enter new worksheet name")
            On Error Resume Next
            wks.Name = sName
            On Error GoTo 0
        Loop
        Set wks = Nothing
    
        ActiveSheet.Range("G4:G83").Copy
        ActiveSheet.Range("C4:C83").PasteSpecial xlPasteValues
    
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多