首页 > 解决方案 > Excel VBA 中对象“_Worksheet”的方法“范围”失败?

问题描述

好吧,让我先说我是这方面的菜鸟。我正在关注这个分步视频,但我仍然找到了一种方法来搞砸它。我已经尝试阅读相关问题,但我对 VBA 的了解并不多,无法理解答案。

基本上,我正在尝试(但失败)创建一个“员工经理”。在视频的 9 点 44 分左右,解说员说我们需要创建一个宏来隐藏和显示特定的单元格,具体取决于我们单击的选项卡。

这是我的 Sheet1 代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Not Intersect(Target, Range("E4:H4")) Is Nothing Then
       Range("B2").Value = Target.Column
       Range("F2").Select
       SwitchHTabs
    End If
End Sub

我在模块下有这段代码,宏名为 SwitchHTabs:

Option Explicit

Sub SwitchHTabs()
    Dim SelCol As Long
    Dim FirstRow As Long

    SelCol = ActiveCell.Column

    With Sheet1
        .Range("5:84").EntireRow.Hidden = True
        FirstRow = 5 + ((SelCol - 5) * 20)
        .Range(FirstRow & "." & FirstRow + 19).EntireRow.Hidden = False 'This is the line with the error
    End With
End Sub

当我尝试运行代码时会弹出此错误:
在此处输入图像描述

当我单击 Debug 时,它会突出显示这行代码:
在此处输入图像描述

我哪里搞砸了?我正在使用 Excel 2016。

标签: excelvba

解决方案


比较Range该子中的两行:

.Range("5:84").EntireRow.Hidden = True 'Works
.Range(FirstRow & "." & FirstRow + 19).EntireRow.Hidden = False 'Doesn't Work

为了论证起见,我们假设它FirstRow是 1,然后处理第二行代码:

.Range("5:84").EntireRow.Hidden = True 'Works
.Range("1.20").EntireRow.Hidden = False 'Doesn't Work

希望现在更容易看到您使用句号代替冒号。

(顺便说一句-您可以改用它.Rows("5:84").Hidden来消除对 的需要.EntireRow


推荐阅读