我对VBA编程比较陌生。我想在我的工作表中插入一个模板。我现在已经有了这个代码,它可以用于第一步:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 2 Or 3 Or 4 Or 5 Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = Target
End If
End Sub
我知道如果要插入模板,请执行以下步骤: 表达式:.Add(Before,After,Count,Type)
Type指定工作表类型。可以是以下XlSheetType常量之一:xlWorksheet,xlChart,xlExcel4MacroSheet或xlExcel4IntlMacroSheet。如果要基于现有模板插入工作表,请指定模板的路径。默认值为xlWorksheet。
我真的需要将类型链接到我的Projectonderdelen.xltm,位于C:\ Users \ stage \ Documents \ Aangepaste Office-sjablonen
有人可以帮我解决这个痛苦吗?
问候,布兰登
答案 0 :(得分:0)
我认为你需要这样的东西:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If 2 <= Target.Column And Target.Column <= 5 Then
Dim ewbSource As Workbook: Set ewbSource = Application.Workbooks.Open("C:\Users\stage\Documents\Aangepaste Office-sjablonen\Projectonderdelen.xltm", False, True)
ewbSource.Worksheets("NameOfYourWorkSheet").Copy ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name = Target.Value
ewbSource.Close False
End If
End Sub
请注意:
1)If中的条件错误:你不能使用或者这样,这意味着检查目标Column是否为2,这将是True或False,然后评估True / False或3,这是3,如果你将非零值转换为布尔值,它们将为True,所以这个条件总是计算为True。
2)要从模板工作簿中的工作表进行复制,您需要将其打开。我也在代码中关闭它,假设它最初没有打开。
3)使用完全限定名称:ThisWorkbook.Worksheets与ActiveWorkbook.Worksheets不同。
欢迎使用StackOverflow。
答案 1 :(得分:0)
If Target.Column = 2 Or 3 Or 4 Or 5 Then
不是正确的合成器。
使用:
If Target.Column = 2 Or Target.Column = 3 Or Target.Column = 4 Or Target.Column = 5 Then
或者,切换到Select Case
,这可以让您在将来更多功能添加更多场景
Select Case Target.Column
Case 2 To 5
Worksheets.Add after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = Target.Value
End Select