Excel 方法';范围';对象的'_全球';失败。错误

Excel 方法';范围';对象的'_全球';失败。错误,excel,vba,Excel,Vba,我试图让Excel找出工作表中哪些列是空白的。最终的想法是让它删除完全空白的列。 以下是我目前掌握的代码: Sub Macro2() ' ' Macro2 Macro ' Dim totalCols As Integer Dim totalRows As Integer totalCols = ActiveSheet.UsedRange.Columns.Count totalRows = ActiveSheet.UsedRange.Rows.Count Dim i As Integer Di

我试图让Excel找出工作表中哪些列是空白的。最终的想法是让它删除完全空白的列。 以下是我目前掌握的代码:

Sub Macro2()
'
' Macro2 Macro
'
Dim totalCols As Integer
Dim totalRows As Integer

totalCols = ActiveSheet.UsedRange.Columns.Count
totalRows = ActiveSheet.UsedRange.Rows.Count

Dim i As Integer
Dim j As Integer
Dim numNull As Integer

For i = 1 To totalCols
    For j = 2 To totalRows
        Dim location As String
        location = "R" & i & ":" & "C" & j
        If Range(location).Select = "" Then
            numNull = numNull + 1
        End If
    Next j
    If numNull = totalRows - 1 Then
        MsgBox ("Column " & i & "is null")
    End If
Next i

End Sub
最后检查
numNull
(行中的空条目数)=totalRows减去标题。我让它一直工作到语句
If Range(location)。选择=“”
。现在编译器说:

对象“\u Global”的方法“Range”失败


有人知道这意味着什么,或者我如何修复它吗?

您的代码正在使用
。请在应该使用
时选择
。Value

但这可能更快:

Sub Tester()

    Dim col As Range, ur As Range
    Dim numRows As Long, numCols As Long, i As Long, awf

    Set awf = Application.WorksheetFunction
    Set ur = ActiveSheet.UsedRange

    numRows = ur.Rows.Count
    numCols = ur.Columns.Count

    'edit: account for header row...
    Set ur = ur.Offset(1,0).Resize(numRows-1, numCols)
    numRows = numRows - 1

    For i = numCols To 1 Step -1
        Set col = ur.Columns(i)
        If awf.CountBlank(col) = numRows Then
            MsgBox "Column #" & col.Column & " is empty"
            'col.EntireColumn.Delete
        End If
    Next i

End Sub

此时,“范围”并不指实例化的对象。Range类不能以这种方式静态使用-您必须实例化Range对象,通常是通过调用适当对象的工厂方法。可能还有其他方法,但我通常称之为ActiveSheet.Range

正如上面Tim Williams所指出的,您可能应该使用.Value而不是.Select;我完全不确定是什么。Select返回,MSDN引用只显示数据类型变量

我没有在Windows计算机上进行测试,但请尝试:

If ActiveSheet.Range(location).Value = "" Then

嗯……这似乎不对。因为现在它只返回所有条目都已填充的列。我认为关键字.Select会从字面上选择文档中的一系列单元格。例如,如果您说:
ActiveSheet.Range(SomeRange)。选择
vba将突出显示位于SomeRange中的值。如果location不是
location=“R”&i&“:C”&j
alas,中间有冒号?@oneindelik是的,我相信是的,这将使它成为一个合适的excel范围。将相应地进行编辑。