繁体   English   中英

Excel VBA代码可在某些PC上运行,但在其他PC上会出错

[英]Excel VBA code works on some PCs, but errors on others

我对VBA还不够流畅,无法确定我的代码在哪里损坏了。

  1. 它既可以在我的计算机上工作,也可以在我妻子的计算机上工作。

  2. 但是与我共享文件的那些文件却遇到了(Microsoft Visual Basic错误-对象'_Global'的方法'Sheets'失败)

我使用的是Microsoft Office Professional Plus 2016,我的妻子使用的是MS Office2013。没有其他人使用的是2013年之前的版本,并且他们启用了宏。

起初我以为它可能是损坏的文件,所以我将其共享给多个云服务并分别对其进行了测试,所有这些都没有什么变化。 尤其是一个人,甚至在按书计算基本SUM函数时遇到问题(它们被设置为“自动”),这在我在整个工作簿中放置的IFERROR(以帮助识别摩擦点并帮助解决问题)中很明显。

我试过这个线程 但是我不确定这是否可以应用于我的。

我在VBA中的脚本是否会导致此错误,如果是,该如何纠正?

    Private Sub hideColumnsBasedOnConditionZero()
    Sheets("Flight Log").Unprotect "Password"
    FirstColumn = 6 'First Column
    LastColumn = 12 'Last Column
    For i = 6 To 12 'Lopping through each Column
    'Hide all the columns with the values as 0 in Row 1
    If Cells(1, i) = 0 And Cells(1, i) <> "" Then Columns(i).EntireColumn.Hidden = True
    Next
    FirstColumn = 13 'First Column
    LastColumn = 25 'Last Column
    For i = 13 To 25 'Lopping through each Column
    'Hide all the columns with the values as 0 in Row 1
    If Cells(1, i) = 0 And Cells(1, i) <> "" Then Columns(i).EntireColumn.Hidden = True
    Next
    Sheets("Flight Log").Protect "Password"
    End Sub
    Private Sub showColumnsBasedOnConditionBlank()
    Sheets("Flight Log").Unprotect "Password"
    FirstColumn = 6 'First Column
    LastColumn = 12 'Last Column
    For i = 6 To 12 'Looping through each Column
    'Show all the columns with a value as 0 in Row 1
    If Cells(1, i) = "" Or Cells(1, i) = 0 Then Columns(i).EntireColumn.Hidden = False
    Next
    FirstColumn = 13 'First Column
    LastColumn = 25 'Last Column
    For i = 13 To 25 'Looping through each Column
    'Show all the columns with a value as 0 in Row 1
    If Cells(1, i) = "" Or Cells(1, i) = 0 Then Columns(i).EntireColumn.Hidden = False
    Next
    Sheets("Flight Log").Protect "Password"
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
    Sheets("Flight Log").Unprotect "Password"
    On Error Resume Next
    Dim updateCell As Range
    Dim lastDateCell As Range
    Set updateCell = ThisWorkbook.Worksheets("Computations").Range("A43")
    Set lastDateCell = ThisWorkbook.Worksheets("Computations").Range("A45")
    If Target.Column = 16 And Target.Value >= 1 Then
           If Target.Offset(, -14) > updateCell Then
               lastDateCell = updateCell
               updateCell = Target.Offset(, -14) 'This ensures date is not overridden by lesser value
           End If
    End If
    If Target.Column = 10 And Target.Value >= 1 Then
           If Target.Offset(, -8) > updateCell Then
               lastDateCell = updateCell
               updateCell = Target.Offset(, -8) 'This ensures date is not overridden by lesser value
           End If
    End If
    On Error GoTo 0
    Sheets("Flight Log").Protect "Password"
    End Sub
    Private Sub Worksheet_Calculate()
    Sheets("Flight Log").Unprotect "Password"
        If Range("BE1").Value = "No" And Not IsEmpty(Range("BE1")) Then
            Sheets("Flight Log").Visible = xlSheetVeryHidden
        Else
            Sheets("Flight Log").Visible = xlSheetVisible
        End If
    Sheets("Flight Log").Protect "Password"
    End Sub

我知道这件事可能是一团糟,但是我想在课余时间学习这些东西!

您是否尝试过明确声明工作表和工作簿(实际上所有变量都是好的做法),就像链接文章中所建议的那样? 如果我要对第一个子对象执行此操作,则它将如下所示:

Private Sub hideColumnsBasedOnConditionZero()
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Dim FirstColumn As Integer, LastColumn As Integer, i As Integer
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Flight Log")

ws.Unprotect "Password"

FirstColumn = 6 'First Column
LastColumn = 12 'Last Column

For i = FirstColumn To LastColumn 'Looping through each Column
'Hide all the columns with the values as 0 in Row 1
    If ws.Cells(1, i) = 0 And ws.Cells(1, i) <> "" Then ws.Columns(i).EntireColumn.Hidden = True
Next

FirstColumn = 13 'First Column
LastColumn = 25 'Last Column

For i = FirstColumn To LastColumn 'Looping through each Column
'Hide all the columns with the values as 0 in Row 1
    If ws.Cells(1, i) = 0 And ws.Cells(1, i) <> "" Then ws.Columns(i).EntireColumn.Hidden = True
Next

ws.Protect "Password"

End Sub

您可以对所有其他明确声明变量的子应用相同的原理,看看是否有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM