VBA-仅ActiveSheet上的CommandButton计数

VBA-仅ActiveSheet上的CommandButton计数,vba,excel,Vba,Excel,在我的工作簿(Book1)中,我有一个CommandButton,它可以打开一个新工作簿(Book2),其中包含多张工作表和带有代码的CommandButton。Book2中的CommandButtons打开一个UserForm并将形状添加到工作表中。每个CommandButton中都有一个计数器 现在我的问题是,如果我在Sheet1中单击CommandButton,那么在Sheet2中计数器也会上升 有人能告诉我,只有ActiveSheet计数器上升时,我必须写入VBA代码的内容吗 我在每张纸

在我的工作簿(Book1)中,我有一个CommandButton,它可以打开一个新工作簿(Book2),其中包含多张工作表和带有代码的CommandButton。Book2中的CommandButtons打开一个UserForm并将形状添加到工作表中。每个CommandButton中都有一个计数器

现在我的问题是,如果我在Sheet1中单击CommandButton,那么在Sheet2中计数器也会上升

有人能告诉我,只有ActiveSheet计数器上升时,我必须写入VBA代码的内容吗

我在每张纸上都试过这个

Private Sub CommandButton1_Click()
    Static cnt As Long
    With ActiveWorkbook.ActiveSheet
        cnt = cnt + 1
    End With

    Call FillFormWKA
End Sub
编辑:

Private Sub PM_Controlling_Click()
    Dim relativePath As String
    Dim nws As Worksheet
    Dim a As Integer
    Dim b As Integer

    a = 1
    b = 11

    Workbooks.Add
    relativeString = ThisWorkbook.Path & "\Test2"
    ActiveWorkbook.SaveAs Filename:=relativeString & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

'    Add New Sheet if more than one machine is in the Project
     a = a + 1
     b = b + 1
     If Workbooks("Book1.xlsm").Worksheets(b).Visible = xlSheetVisible Then
         With Workbooks(ActiveWorkbook.Name)
             Set nws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
             nws.Name = "Working Plan " & Workbooks("LPA_Projectevaluation_changing_for_PM_Toolbox.xlsm").Worksheets(b).Name
         End With
     End If

     Call Add_CommandButton
End Sub
Private Sub CommandButton1_Click()
    Static cnt As Long
    With ActiveWorkbook.ActiveSheet
        cnt = cnt + 1
    End With

    Call FillFormWKA

    If cnt = 1 Then
        Call AddShape1
    ElseIf cnt = 2 Then
        Call AddShape2
    End If
End Sub
在Book2的每张纸上,我都有一个CommandButton,它是从Book1中的CommandButton添加的。Book2中的每个CommandButton都会打开一个UserForm。在这个用户窗体上,我有一个CommandButton,它保存添加项并将形状添加到工作表中。现在我的问题是,如果我点击表单1上的CommandButton,那么表单2上的CommandButton上的计数器也会上升

整个VBA代码:

Book1使用命令按钮和代码打开新工作簿:

Private Sub PM_Controlling_Click()
    Dim relativePath As String
    Dim nws As Worksheet
    Dim a As Integer
    Dim b As Integer

    a = 1
    b = 11

    Workbooks.Add
    relativeString = ThisWorkbook.Path & "\Test2"
    ActiveWorkbook.SaveAs Filename:=relativeString & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

'    Add New Sheet if more than one machine is in the Project
     a = a + 1
     b = b + 1
     If Workbooks("Book1.xlsm").Worksheets(b).Visible = xlSheetVisible Then
         With Workbooks(ActiveWorkbook.Name)
             Set nws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
             nws.Name = "Working Plan " & Workbooks("LPA_Projectevaluation_changing_for_PM_Toolbox.xlsm").Worksheets(b).Name
         End With
     End If

     Call Add_CommandButton
End Sub
Private Sub CommandButton1_Click()
    Static cnt As Long
    With ActiveWorkbook.ActiveSheet
        cnt = cnt + 1
    End With

    Call FillFormWKA

    If cnt = 1 Then
        Call AddShape1
    ElseIf cnt = 2 Then
        Call AddShape2
    End If
End Sub
命令按钮模块

Sub Add_CommandButton()
    Dim btn As Object
    Dim btn1 As Object

    Dim Code As String
    Dim Code2 As String

    Dim a As Integer
    Dim b As Integer

    Static cnt As Long
    cnt = cnt + 1

    a = 1
    b = 45

'   Add First Button (Opens Userform)
    Set btn = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
    , DisplayAsIcon:=False, Left:=b, Top:=175, Width:=50, Height:=25)
    ActiveSheet.OLEObjects(a).Object.Caption = "Add"
    btn.Name = "Add_WKA_" & cnt

    Code = "Private Sub Add_WKA_" & cnt & "_Click()" & vbCrLf
    Code = Code & "    With ActiveWorkbook.ActiveSheet" & vbCrLf
    Code = Code & "        Call Add_WKA_Sheet" & vbCrLf
    Code = Code & "    End With" & vbCrLf
    Code = Code & "End Sub"

    With ActiveWorkbook.VBProject.VBComponents(Worksheets(ActiveSheet.Name).CodeName).CodeModule
        .insertlines .CountOfLines + 1, Code
    End With

    b = b + 60
    a = a + 1

'   Button to look at UserForm
    Set btn1 = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
    , DisplayAsIcon:=False, Left:=b, Top:=175, Width:=50, Height:=25)
    ActiveSheet.OLEObjects(a).Object.Caption = "Watch"
    btn1.Name = "Watch_WKA_" & cnt

    Code = "Private Sub Watch_WKA_" & cnt & "_Click()" & vbCrLf
    Code = Code & "    Call Watch_WKA_Sheet" & vbCrLf
    Code = Code & "End Sub"


    With ActiveWorkbook.VBProject.VBComponents(Worksheets(ActiveSheet.Name).CodeName).CodeModule
        .insertlines .CountOfLines + 1, Code
    End With
用户表单中的CommandButton:

Private Sub PM_Controlling_Click()
    Dim relativePath As String
    Dim nws As Worksheet
    Dim a As Integer
    Dim b As Integer

    a = 1
    b = 11

    Workbooks.Add
    relativeString = ThisWorkbook.Path & "\Test2"
    ActiveWorkbook.SaveAs Filename:=relativeString & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

'    Add New Sheet if more than one machine is in the Project
     a = a + 1
     b = b + 1
     If Workbooks("Book1.xlsm").Worksheets(b).Visible = xlSheetVisible Then
         With Workbooks(ActiveWorkbook.Name)
             Set nws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
             nws.Name = "Working Plan " & Workbooks("LPA_Projectevaluation_changing_for_PM_Toolbox.xlsm").Worksheets(b).Name
         End With
     End If

     Call Add_CommandButton
End Sub
Private Sub CommandButton1_Click()
    Static cnt As Long
    With ActiveWorkbook.ActiveSheet
        cnt = cnt + 1
    End With

    Call FillFormWKA

    If cnt = 1 Then
        Call AddShape1
    ElseIf cnt = 2 Then
        Call AddShape2
    End If
End Sub

据我所知,您的问题是希望附加数据。您希望输入之前数据后面的数据。因为您是通过代码激活图纸,所以这不是选择任何范围。如果这不是你的解决方案,那么请解释你的问题

Private Sub CommandButton1_Click()
Static cnt As Long

cnt = Cells(Rows.Count, "a").End(xlUp).Row + 1

ActiveWorkbook.ActiveSheet.Range("A" & cnt).Select

Call FillFormWKA

End Sub

您的块在此处不起任何作用。。。不管怎样,你发布的代码并没有解释你看到了什么:它应该按预期工作,但你用
cnt
做什么?\n是的,我知道。。抱歉,忘记用cnt发布代码。。我现在就加上。我真的很困惑。您发布的代码是否在Book1或Book2(工作表或用户表单)中?我相信这真的涉及到第二册工作表上的命令按钮是如何编写的。这个计数器值是否显示在按钮标题中?抱歉,现在还不太清楚-您需要准确描述发生了什么,以及为什么它不是您期望看到的。最有可能的问题是从点击事件中调用的代码。事实上,这就是我需要的。但现在cnt将始终为2,并将调用AddShape2。但是在第一次单击时,它应该首先调用AddShape1,然后在第二次单击时调用AddShape2