2017-03-06 49 views
-1

所以,我一直在阅读和挖掘一下如何解决这个问题,我还没有找到一个工作解决方案。 我尝试过: - 选中我没有“活动表/工作簿”参考。 - 检查方法名称没问题。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 

PD:如果你是好奇的原始函数返回从最后一个单元格开始的列中最后一个值的出现,我调整了它,现在它从第一个单元格开始。

+1

请你可以在这里发布你的代码而不是截图吗? – SJR

+0

对不起..我现在添加了代码 – Sourcerer

+0

在CommanButton1_click Sub的第一行插入一个断点,并检查Sub是否被调用。然后,您可以点击F8按照流程查看分解的位置。 – CLR

回答

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 
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") 

你不希望出现这种情况外对括号的(),将烂摊子你。

+0

我会做出改变,谢谢! 对于LastRec,它在WhereToInsertRow()子内部被调用,并且有两个参数。 我写错了写得不够清楚.. 无论如何,问题解决了,这是在LastRec范围内,没有适当的参考.. – Sourcerer