Excel 创建新工作表时自动增加文本框值

Excel 创建新工作表时自动增加文本框值,excel,vba,Excel,Vba,我想让我的文本框值更灵活。因此,当我创建新图纸时,它们的值会按指定的数字递增 基于此,我使用了以下代码: Sub CivBoxNext() With ActiveSheet Range("D51").Select .Shapes("Civils 3").TextFrame2.TextRange.Characters.Text = ActiveCell.Value + 2 Range("D52").Select .Shapes

我想让我的文本框值更灵活。因此,当我创建新图纸时,它们的值会按指定的数字递增

基于此,我使用了以下代码:

Sub CivBoxNext()
    With ActiveSheet
        Range("D51").Select
        .Shapes("Civils 3").TextFrame2.TextRange.Characters.Text = ActiveCell.Value + 2
        Range("D52").Select
        .Shapes("Civils 4").TextFrame2.TextRange.Characters.Text = ActiveCell.Value + 2
    End With
End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim ws As Worksheet
j = 0
For Each ws In Worksheets

    I = ws.Range("D51").Value

    If I > j Then
        j = I
    End If

Next
ActiveSheet.Range("D51").Value = j + 2
End Sub
接下来,我将其绘制到创建新工作表作为调用方法的代码中:

它可以工作,但只能在下面的一张纸上

之后,我有另外3张纸,这3张纸的数字应该同时改变

我尝试了另一种选择,比如在创建新工作表时更改目标单元格的值,然后从此单元格输入我的文本框

我使用了以下代码:

Sub CivBoxNext()
    With ActiveSheet
        Range("D51").Select
        .Shapes("Civils 3").TextFrame2.TextRange.Characters.Text = ActiveCell.Value + 2
        Range("D52").Select
        .Shapes("Civils 4").TextFrame2.TextRange.Characters.Text = ActiveCell.Value + 2
    End With
End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim ws As Worksheet
j = 0
For Each ws In Worksheets

    I = ws.Range("D51").Value

    If I > j Then
        j = I
    End If

Next
ActiveSheet.Range("D51").Value = j + 2
End Sub
它来自:

如何在创建新图纸时自动增加单元格值


我是否要立即处理传统的Excel公式而不是VBA?

这将合并您的SUB。你能看看它是否满足你的需要吗

Sub Civilssheet()

    Application.ScreenUpdating = False

    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Worksheets("Civils9")
    Dim I As Long
    Dim xNumber, valCivics, valCivicsFin As Integer

    xNumber = InputBox("Enter number of times to copy the current sheet")

    On Error Resume Next

    ' extract highest Civics worksheet number
    For I = 1 To ActiveWorkbook.Sheets.Count
        If InStr(1, Sheets(I).Name, "Civils") > 0 Then
            valCivics = Val(Replace(Sheets(I).Name, "Civils", ""))
            If valCivics > valCivicsFin Then valCivicsFin = valCivics
        End If
    Next

    For I = 1 To xNumber
        ' add worksheet to the end of existing worksheets
        ws.Copy After:=Sheets(Application.Sheets.Count)
        ' name the new worksheet with the highest value + 1
        ActiveSheet.Name = "Civils" & I + valCivicsFin
        ActiveSheet.Shapes("Civils 3").TextFrame2.TextRange.Characters.Text = ActiveSheet.Cells(51, 4).Value + 2
        ActiveSheet.Shapes("Civils 4").TextFrame2.TextRange.Characters.Text = ActiveSheet.Cells(52, 4).Value + 2
    Next

    Application.ScreenUpdating = True
End Sub

总是那些床单吗?嗯,我希望有尽可能多的弹性床单。实际上,这些家伙将为Civil和电缆分别制作1张和1张。因此,在本例中,当他们在Civil中创建1个新的时,我希望所有工作表中的值从头到尾递增。当他们创建电缆表时会更容易,因为这是此阵列中的最后一张图纸,所以我可以按照上面的步骤手动执行。看起来您的选项卡创建循环也有一些问题。它只创建最后一个。我可以投票,因为代码本身就可以工作。不幸的是,这不是我想要的。新创建的工作表位于我文档的末尾。我不想那样。我想把这张纸放在Civils 2后面。自动递增功能可以工作,但我还是希望它从这个新的Civils3工作表一直到下一个3个电缆工作表。我已经对新工作表的位置进行了排序。我将ws.Copy放在:=sheetscivills&I+1之后。我还对以下表格进行了增量处理:ActiveSheet.ShapesCivils 4.TextFrame2.TextRange.Characters.Text=ActiveSheet.Cells52,4.Value+I*2技术上我知道如何处理下一张表格,但我不知道在删除某些表格时如何减少这些值。感谢您的向上投票,但让您进行排序。你能用和编辑更新你的问题并添加你的新代码吗?基本上我已经创建了一个新的,它在这里: