VBA宏 - 单击代码的按钮部分不会运行

时间:2017-03-06 16:00:05

标签: excel vba excel-vba

所以,我一直在阅读和挖掘如何解决这个问题,我还没有找到一个有效的解决方案。 我试过了: - 我没有"活动表格/工作簿"引用。 - 检查方法名称没问题。

这是a capture where you can see the troubling part of the code

我是VBA的新手,所以我从某个地方偷了这个功能并对它进行了一些调整。当我点击vba控制台中的播放按钮时,功能(和整个代码)正常工作,但是当我点击activeX按钮时它没有。 知道怎么办吗? 提前谢谢!

以下是button_click()中的代码:

    Private Sub CommandButton1_Click()
      Módulo1.Formatting_Number (Sheets("Hoja5").Range("AB8:AB23"))
      Módulo1.WhereToInsertRow
    End Sub

这是模块中的代码,可以从按钮调用:

    Public Function LastRec(Myrng As Range, g As Integer)
      For x = Myrng(1).Row To Myrng(Myrng.Count, 1).End(xlUp).Row
        If Cells(x, Myrng.Column).Value = Cells(x + 1, Myrng.Column).Value Then GoTo continue
        If Cells(x, Myrng.Column).Value = g Then
            LastRec = x
            Exit Function
        End If
    LastRec = CStr(g) & "Not FOUND"
    continue:
      Next x
    End Function
    Public Sub WhereToInsertRow()
      Dim g As Integer
      For g = 2 To 7
         Sheets("Hoja5").Range("AB" & g + 6) = LastRec(Sheets("Hoja5").Range("O:O"), g)
      Next g
      For g = 14 To 23
         Sheets("Hoja5").Range("AB" & g).Value = LastRec(Sheets("Hoja5").Range("O:O"), (g + 87))
      Next g
    End Sub

    Public Sub Formatting_Number(rng As Range)
        Dim cel As Range
        For Each cel In rng
           cel.NumberFormat = "0"
        Next cel
    End Sub

P.D:如果你好奇,原始函数返回从最后一个单元格开始的列中最后一次出现的值,我调整它,所以它现在从第一个单元格开始。

2 个答案:

答案 0 :(得分:1)

Private Sub CommandButton1_Click()
  Módulo1.Formatting_Number (Sheets("Hoja5").Range("AB8:AB23"))
  Módulo1.WhereToInsertRow
End Sub


Public Function LastRec(Myrng As Range, g As Integer)
  .
  .
  .
End Function

您的LastRec函数需要2个参数,这两个参数都不是可选的。你只通过了1。

可能还有其他问题,但那是一个先发制人。

另外,更改

Módulo1.Formatting_Number (Sheets("Hoja5").Range("AB8:AB23"))

Módulo1.Formatting_Number Sheets("Hoja5").Range("AB8:AB23")

你不希望那对外面的parens()会弄乱你。

答案 1 :(得分:1)

你可以这样收紧它。最好还是指定其他参数,例如范围和/或表格。

Public Function LastRec(Myrng As Range, g As Integer)
    Dim x As Long, rFind As Range

    With Myrng
        Set rFind = .Find(What:=g, After:=.Cells(.Count), Lookat:=xlWhole, _
                            SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        If Not rFind Is Nothing Then
            LastRec = rFind.Row
        Else
            LastRec = g & " not FOUND"
        End If
    End With

End Function

Public Sub WhereToInsertRow()
    Dim g As Integer, r As Range

    With Sheets("Hoja5")
        Set r = .Range("O1", .Range("O" & Rows.Count).End(xlUp))
    End With

    For g = 2 To 7
       Sheets("Hoja5").Range("AB" & g + 6) = LastRec(r, g)
    Next g
    For g = 14 To 23
       Sheets("Hoja5").Range("AB" & g).Value = LastRec(r, g + 87)
    Next g
End Sub

Public Sub Formatting_Number(rng As Range)
  rng.NumberFormat = "0"
End Sub

Sub x()
    Module1.Formatting_Number Sheets("Hoja5").Range("A8:A23")
    Module1.WhereToInsertRow
End Sub