我想使我的文本框值更灵活。因此,当我创建新的图纸时,它们的值会按指定的数字递增。
基于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张纸,应该同时更改其编号。
我尝试了另一种选择,例如在创建新工作表时更改目标单元格值,然后从该单元格中输入文本框。
我使用了以下代码:
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?
答案 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