[英]Excel VBA code works on some PCs, but errors on others
我对VBA还不够流畅,无法确定我的代码在哪里损坏了。
它既可以在我的计算机上工作,也可以在我妻子的计算机上工作。
但是与我共享文件的那些文件却遇到了(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.