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

时间:2020-03-30 16:08:42

标签: excel vba

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

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

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

接下来我将其作为Call方法绘制到创建新表的代码中:

Sub Civilssheet()

Dim I As Long
Dim xNumber As Integer
Dim xName As String
Dim xActiveSheet As Worksheet
On Error Resume Next
Application.ScreenUpdating = False
Set xActiveSheet = ActiveSheet
xNumber = InputBox("Enter number of times to copy the current sheet")
For I = 1 To xNumber
    xName = ActiveSheet.Name
    xActiveSheet.Copy After:=ActiveWorkbook.Sheets("Civils2")
    ActiveSheet.Name = "Civils" & I + 2
Next
Call CivBoxNext
xActiveSheet.Activate
Application.ScreenUpdating = True    

End Sub

它有效,但仅在下面的一张纸上。

然后,我还有3张纸,应该同时更改其编号。

enter image description here

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

我使用了以下代码:

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

来自: https://www.mrexcel.com/board/threads/auto-increase-a-cell-value-1-when-a-new-sheet-is-created.334786/

创建新工作表时如何使单元格值自动递增?

我是否应该立即摆弄传统的Excel公式而不是VBA?

1 个答案:

答案 0 :(得分:1)

这将合并您的潜艇。您可以查看它是否满足您的需求?

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
相关问题