【问题标题】:VBA - CommandButton Count only on ActiveSheetVBA - 仅在 ActiveSheet 上的命令按钮计数
【发布时间】:2018-07-10 17:34:56
【问题描述】:

在我的工作簿 (Book1) 中,我有一个命令按钮,它可以打开一个新的工作簿 (Book2),其中包含几张工作表和带有代码的命令按钮。 Book2 中的命令按钮打开一个用户窗体并将形状添加到工作表。在每个 CommandButton 中都有一个计数器。

现在我的问题是,如果我单击 Sheet1 中的命令按钮,在 Sheet2 中,计数器也会上升。

有人能告诉我我必须向我的 VBA 代码写什么,只有 ActiveSheet 计数器上升吗?

我在每个工作表中都尝试过。

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

    Call FillFormWKA
End Sub

编辑:

在 Book2 中的每个工作表上,我都有一个命令按钮,它是从 Book1 中的命令按钮添加的。 Book2 中的每个命令按钮都会打开一个用户窗体。在这个用户窗体上,我有一个命令按钮,它保存添加并将形状添加到工作表。现在我的问题是,如果我点击 Sheet1 上的 CommandButton,计数器也会在 Sheet2 上的 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

命令按钮模块

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

用户窗体中的命令按钮:

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

【问题讨论】:

  • 你的 With 块在这里什么都不做......无论如何,你发布的代码并没有解释你所看到的:它应该按预期工作,但是你用 cnt 做什么?\
  • 是的,我知道 .. 抱歉忘记用 cnt 发布代码 .. 我现在会添加它。
  • 真的让我很困惑。您发布的此代码在 Book1 或 Book2(工作表或用户表单)中?我相信这真的涉及到 Book2 中工作表上的命令按钮是如何编写的。这个计数器值是否显示在按钮 Caption 中?
  • 抱歉,但现在还不是很清楚 - 您需要准确描述正在发生的事情,以及为什么它不是您期望看到的。很可能问题出在从 Click 事件调用的代码中。

标签: vba excel


【解决方案1】:

据我了解,您想要附加数据的问题。您想输入先前数据背后的那些。因为您正在通过代码激活工作表,所以这没有选择任何范围。如果这不是您的解决方案,请解释您的问题。

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

结束子

【讨论】:

  • 其实这正是我所需要的。但现在 cnt 将始终为 2 并将调用 AddShape2。但是在第一次点击时它应该首先调用 AddShape1,然后在第二次点击调用 AddShape2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 2015-10-19
  • 1970-01-01
  • 2012-03-23
相关资源
最近更新 更多