【问题标题】:Assistance in creating Excel Macro that generates a new worksheet based off a template协助创建基于模板生成新工作表的 Excel 宏
【发布时间】:2021-03-16 06:28:59
【问题描述】:

我对 VBA 非常陌生 - 这不是让某人为我工作的懒惰尝试,我很高兴自己获得了执行此操作的工具。

我有一个工作表,其中包含特定列标题下的数据。我想创建一个宏来生成一个新的工作表(在一个全新的工作簿中)并根据预定义的模板将原始工作表中的数据复制到新工作簿中。原始工作表中的列标题将与模板中它们各自的列标题不匹配。每行中的数据由文本以及正数和负数组成。当原始工作表中的数据被复制到新工作簿时,我希望每一行都由一个完全空白的行分隔,并带有一个警告:每个“空白”行必须有一个数字条目,由填充的相同数字组成它上面的行,但其符号反转(例如,如果原始数据在 E 列中包含 -300,则下面的空白行在 E 列中必须具有 +300)。所有数字将始终/仅位于一列中(例如 E 列)。

我希望这是足够的信息开始!

【问题讨论】:

  • 我会准备好模板,然后从宏中打开它,复制并粘贴相关数据,然后在模板上另存为。不要保存模板,因为那样会覆盖它。这里有几个关于代码的问题。
  • 你想要的图像会很好。

标签: excel vba


【解决方案1】:

前言:这不是一个完整的答案,但它的文字太多,无法在评论中写。

听起来您正在寻找使用For Loop 编写代码来使用Range.Copy 复制一列数据。

我没有足够的信息来真正编写示例程序,但我猜不出结构会是这样的:

 Sub FillFromTemplate()
    Dim NewWB As Workbook, NewWS As Worksheet
    
    Set NewWB = Application.Workbooks.Add
    'Creates a new workbook
    
    ThisWorkbook.Sheets("Template").Copy after:=NewWB.Sheets(NewWB.Sheets.Count)
    'Copies the template over to the new workbook
    
    Set NewWS = NewWB.Sheets(NewWB.Sheets.Count)
    'Grabs our new sheet so we can edit the data
    
    ThisWorkbook.Sheets("Original").Columns("E").Copy Destination:=NewWS.Columns("E")
    'Copy over column E from the desired sheet to the new sheet.
    
    For i = 2 To NewWS.Cells(Rows.Count, "E").End(xlUp).Row * 2 Step 2
    'iterate through the column on the new sheet, adding spaces
        NewWS.Rows(i + 1).Insert shift:=xlShiftDown
        'Somewhat inefficient, but simple and easy to implement.
        'A better but more complex method would be pasting the data while skipping cells
        
        If NewWS.Cells(i, "E") <> "" And IsNumeric(NewWS.Cells(i, "E")) Then
            'If its a number, put the value in the cell below with the sign flipped.
            NewWS.Cells(i + 1, "E") = NewWS.Cells(i, "E").Value * -1
        End If
    Next i
End Sub

显然,这缺少在您的工作簿中立即运行的关键信息。但我希望它具有教育意义,可以帮助您开始自己编写代码。

【讨论】:

  • 只是为了跟进,我将此代码插入到我的工作簿中,它几乎完全按照预期工作!太感谢了。我现在正在研究一种方法,以确保原始工作表中的列标题在复制时不会替换新工作表中的列标题(基于模板)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多