选择返回“编译错误:预期函数或变量”

时间:2015-01-05 20:17:05

标签: excel vba button

帮助!

下面是我在Excel中启动/停止按钮的代码,现在我收到了第一行突出显示btnStart的编译错误。

Sub btnStart()
ActiveSheet.Unprotect
    Cells(Rows.Count, 5).End(xlUp).Offset(1) = Date
    Cells(Rows.Count, 6).End(xlUp).Offset(1) = Now
    Cells(Rows.Count, 7).End(xlUp).NumberFormat = "hh:mm"
    Cells(Rows.Count, 8).End(xlUp).Offset(1) = Environ("username")
    Me.btnStart().Enabled = False
    Me.btnStop.Enabled = True

End Sub

Sub btnStop()
ActiveSheet.Unprotect
    Cells(Rows.Count, 7).End(xlUp).Offset(1) = Now
    Cells(Rows.Count, 7).End(xlUp).NumberFormat = "hh:mm"
    Me.btnStart.Enabled = True
    Me.btnStop.Enabled = False
End Sub

Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

3 个答案:

答案 0 :(得分:0)

也许尝试以下,我纠正了一行

Sub btnStart()
ActiveSheet.Unprotect
    Cells(Rows.Count, 5).End(xlUp).Offset(1) = Date
    Cells(Rows.Count, 6).End(xlUp).Offset(1) = Now
    Cells(Rows.Count, 7).End(xlUp).NumberFormat = "hh:mm"
    Cells(Rows.Count, 8).End(xlUp).Offset(1) = Environ("username")
    'Corrected line below
    Me.btnStart.Enabled = False
    Me.btnStop.Enabled = True

End Sub

Sub btnStop()
ActiveSheet.Unprotect
    Cells(Rows.Count, 7).End(xlUp).Offset(1) = Now
    Cells(Rows.Count, 7).End(xlUp).NumberFormat = "hh:mm"
    Me.btnStart.Enabled = True
    Me.btnStop.Enabled = False
End Sub

Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

答案 1 :(得分:0)

如果要使用Enabled属性,则需要使用ActiveX按钮:

Private Sub btnStart_Click()

    Me.btnStart.Enabled = False
    Me.btnStop.Enabled = True

End Sub

Private Sub btnStop_Click()

    Me.btnStart.Enabled = True
    Me.btnStop.Enabled = False

End Sub

答案 2 :(得分:0)

如果我理解正确,这些按钮位于Excel工作表(不是用户表单)中,那么您的问题就是因为您错误地调用了按钮。您不能简单地调用命名按钮,您必须查看sheet.buttons属性,如此

ActiveSheet.Buttons("btnStart").

此外,如果你有名字表,我会使用表名而不是 ActiveSheet

Sheets("sheetname").Buttons("btnStart").

还有一点需要注意,启用/禁用按钮是有效的,但它不会使按钮显示为启用/禁用。为此,您还必须更改字体颜色。

ActiveSheet.Buttons("btnStart").Font.ColorIndex = 15 '15 is grey, 1 is black

----编辑:代码已更改---

原因:经过一些研究后,我的原始解决方案似乎存在问题。最重要的是"启用"属性在excel 2010中没有效果。另一种方法是使用activeX控件,但是,最新的Windows更新(2014年12月)阻止了activeX控件的运行而没有删除一些系统文件(必须在每台计算机上为每个用户完成)此代码可以在-_-良好的工作MS SOURCE)上运行

这个新的解决方案应该避免所有这些问题。它使用两个全局变量 start_btn_disabled stop_btn_disabled 我假设您的表单中的每个按钮(btnStart和btnStop)都分配了一个宏?如果按钮被禁用,只需检查子开头的全局变量然后退出子,即使仍然处理了点击(它仍将按照之前的说明在excel 2010中处理) )代码没有运行。所以它表现得像是被禁用了。在我的代码中,我创建了一个名为 btnStopClicked 的子代码,当您点击“btnStop”时会运行该子代码。为了将宏分配给按钮,右键单击按钮,选择"分配宏"并选择适当的宏。当您单击开始按钮时,我还创建了一个类似的子

'these are global variables and should be declared at the top of the module 
'outside of any sub/function
'
'Note we use DISabled rather than enabled, because by default 
'booleans = False. This means as soon as the form opens both these buttons 
'will be enabled without any extra work. 
'If you want to change this (make start button enabled and stop disabled,
'when the workbook opens simply change all the "stop_btn_disabled" to 
'"stop_btn_enabled" and uncomment the following line) make sure you change the 
'variable names so they make sense
'Dim stop_btn_enabled As Boolean    'initializes to false
Dim start_btn_disabled  As Boolean  'intializes to false
Dim stop_btn_disabled As Boolean    'intializes to false

'Most of this code remains the same as before

Sub btnStart()
    ActiveSheet.Unprotect
    Cells(Rows.Count, 5).End(xlUp).Offset(1) = Date
    Cells(Rows.Count, 6).End(xlUp).Offset(1) = Now
    Cells(Rows.Count, 7).End(xlUp).NumberFormat = "hh:mm"
    Cells(Rows.Count, 8).End(xlUp).Offset(1) = Environ("username")

    'now we set the state of the global variable
    start_btn_disabled = True
    'makes the button appear greyed out
    ActiveSheet.Buttons("btnStart").Font.ColorIndex = 15

    'now we set the state of the global variable
    stop_btn_disabled = False
    'makes the button black like normal
    ActiveSheet.Buttons("btnStop").Font.ColorIndex = 1

End Sub

Sub btnStop()
    ActiveSheet.Unprotect
    Cells(Rows.Count, 7).End(xlUp).Offset(1) = Now
    Cells(Rows.Count, 7).End(xlUp).NumberFormat = "hh:mm"

    'now we set the state of the global variable
    stop_btn_disabled = True
    'makes the button appear greyed out
    ActiveSheet.Buttons("btnStop").Font.ColorIndex = 15

    'now we set the state of the global variable
    start_btn_disabled = False
    'makes the button black like normal
    ActiveSheet.Buttons("btnStart").Font.ColorIndex = 1
End Sub

'and now the real key is checking the globals before running the code

'when you click "btnStop" button this is the code that runs, you may have
'named the sub something different, I just named it this way so it's clear
'what the sub does
Sub StopBtnClicked()
    'must be the first bit of code in the btn click sub
    If (stop_btn_disabled) Then
        Exit Sub
    End If

    'the rest of the code when you click stop button goes here
    'the only way to get to this point is if the but is enabled
End Sub

Sub StartBtnClicked()
    'must be the first bit of code in the btn click sub
    If (start_btn_disabled) Then
        Exit Sub
    End If

    'the rest of the code when you click start
End Sub

如果这样可以解决您的问题,请将其标记为答案