Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 选择A列中最后使用的单元格,然后将其扩展到H列_Vba_Excel - Fatal编程技术网

Vba 选择A列中最后使用的单元格,然后将其扩展到H列

Vba 选择A列中最后使用的单元格,然后将其扩展到H列,vba,excel,Vba,Excel,您好,我正在尝试选择一个范围“A2:H2”,根据列a(因此在这种情况下,它应该选择“A2:H59”)。范围不是固定的,因此不能用精确的数字定义。我有下面的代码,但它选择了第402行的所有内容,即使工作表中除了“A59”之外没有数据。知道发生了什么吗?谢谢你的帮助 Global ssaw As Worksheet Global trckr As Worksheet Sub DataF() Dim myRange As Range Dim myCell As Range Set ssaw

您好,我正在尝试选择一个范围
“A2:H2”
,根据
列a
(因此在这种情况下,它应该选择
“A2:H59”
)。范围不是固定的,因此不能用精确的数字定义。我有下面的代码,但它选择了第402行的所有内容,即使工作表中除了
“A59”
之外没有数据。知道发生了什么吗?谢谢你的帮助

Global ssaw As Worksheet
Global trckr As Worksheet
Sub DataF()
Dim myRange As Range
Dim myCell As Range

    Set ssaw = Sheets("SSAW_DATA")
    Set trckr = Sheets("SQL_DATA_FEED")
    Set myRange = trckr.Range("A2:H2").end(xlDown)


        With myRange
            .SpecialCells(xlCellTypeBlanks).Interior.Color = RGB(255, 102, 102)
            .SpecialCells(xlCellTypeBlanks).Value = "#missing#"
        End With

End Sub

如果我们假设A列中最后使用的单元格是
A59
,那么

……这

Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown))
将选择A2:A59,然后

.Resize(ColumnSize:=8)
将调整其大小,使其具有8列宽度,即
A2:H59

因此,我们一起得到:

Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown)).Resize(ColumnSize:=8)

用这个

trckr.Range("A" & trckr.Rows.Count).End(xlUp) 
或者,如果在A列中有空单元格,则在A列中查找最后使用的单元格:

Set myRange = trckr.Range("A2", trckr.Range("A" & trckr.Rows.Count).End(xlUp)).Resize(ColumnSize:=8)

如果我们假设A列中最后使用的单元格是
A59
,那么

……这

Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown))
将选择A2:A59,然后

.Resize(ColumnSize:=8)
将调整其大小,使其具有8列宽度,即
A2:H59

因此,我们一起得到:

Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown)).Resize(ColumnSize:=8)

用这个

trckr.Range("A" & trckr.Rows.Count).End(xlUp) 
或者,如果在A列中有空单元格,则在A列中查找最后使用的单元格:

Set myRange = trckr.Range("A2", trckr.Range("A" & trckr.Rows.Count).End(xlUp)).Resize(ColumnSize:=8)

利用
Range(cell1,cell2)
等同于
Range(cell2,cell1)

如果要选择从A2:H2到a列最后一个非空单元格的范围(即沿a列在第一个和最后一个非空单元格之间包括空单元格):


利用
Range(cell1,cell2)
等同于
Range(cell2,cell1)

如果要选择从A2:H2到a列最后一个非空单元格的范围(即沿a列在第一个和最后一个非空单元格之间包括空单元格):


我建议使用以下代码

Option Explicit

Function LastRowInColumn(colName As String)
    Dim lastRow As Long
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, colName).End(xlUp).Row
    End With
    LastRowInColumn = lastRow
End Function


Sub SelectRg()
Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long

    lastRow = LastRowInColumn("A")
    Debug.Print lastRow

    If lastRow = 1 Then
        ' do nothing
    Else
        Set wks = ActiveSheet
        With wks
            Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
            rg.Select
        End With
    End If

End Sub
代码确定A列中最后一个填充行,并根据此信息选择H列的所有内容

编辑功能改进

Function LastRowInColumn(ByVal wks As Worksheet, ByVal colName As String) As Long
    With wks
        LastRowInColumn = .Cells(.Rows.Count, colName).End(xlUp).Row
    End With
End Function
EDIT2如果不想使用额外的功能,可以这样做

Sub SetRg()

Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long

    Set wks = ActiveSheet
    With wks
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        'lastRow = LastRowInColumn(wks, "A")
        If lastRow > 1 Then
            Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
        End If
    End With

End Sub

我建议使用以下代码

Option Explicit

Function LastRowInColumn(colName As String)
    Dim lastRow As Long
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, colName).End(xlUp).Row
    End With
    LastRowInColumn = lastRow
End Function


Sub SelectRg()
Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long

    lastRow = LastRowInColumn("A")
    Debug.Print lastRow

    If lastRow = 1 Then
        ' do nothing
    Else
        Set wks = ActiveSheet
        With wks
            Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
            rg.Select
        End With
    End If

End Sub
代码确定A列中最后一个填充行,并根据此信息选择H列的所有内容

编辑功能改进

Function LastRowInColumn(ByVal wks As Worksheet, ByVal colName As String) As Long
    With wks
        LastRowInColumn = .Cells(.Rows.Count, colName).End(xlUp).Row
    End With
End Function
EDIT2如果不想使用额外的功能,可以这样做

Sub SetRg()

Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long

    Set wks = ActiveSheet
    With wks
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        'lastRow = LastRowInColumn(wks, "A")
        If lastRow > 1 Then
            Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
        End If
    End With

End Sub


使用
设置LastCellA=trckr.Range(“A”&Rows.Count).End(xlUp)
时会得到什么?请尝试在电子表格中选择A2,然后按Ctrl+ArrowDown。发生了什么事?这些单元格中有一些内容,可能是空格等。选择第一个空行,下至第402行,然后点击键盘上的删除按钮,然后重试。使用
Set LastCellA=trckr.Range(“a”&Rows.Count)。End(xlUp)
?尝试在电子表格中选择A2,然后按Ctrl+ArrowDown。发生了什么事?这些单元格中有一些内容,可能是空格,等等。选择第一个空白行,下到第402行,然后点击键盘上的删除按钮,然后重试。是的,这一行效果很好,谢谢:)这里没有奇怪的402行选择!是的,这一个创造了奇迹,谢谢:)这里没有奇怪的402行选择!不错,我真的很喜欢那个。你需要仔细考虑一下,这样使用
调整大小
可能会更方便,但这确实得到了我的观点。有趣的方法,仍然试图让我的头围绕着它哈哈。@Rhyfelwr,它可以归结为“一个矩形可以被它的任何两个相反的角识别”很好的一个,我真的很喜欢那个。你需要仔细考虑一下,这样使用
调整大小
可能会更方便,但这确实得到了我的观点。有趣的方法,仍然试图让我的头围绕着它哈哈。@Rhyfelwr,它可以归结为“一个矩形可以被它的任何两个相反的角识别”谢谢,你的版本也可以工作,我只是想让它保持简单。你建议20行代码,其中一行就足够解决它了?你真的应该重新考虑这是否是个好主意。你认为你的代码比设置myRange=trckr.range(trckr.range(“A2”).End(xlDown),“H2”)更可读吗?如果“more”与它的长度有关,那么是的。只要几个指针,我认为不需要
函数来获取最后一行。它只是一条单行语句,可用于主
(在本例中为
SelectRg
)。更值得关注的是
ActiveSheet
的使用。我在这里看到如此多的问题是因为不合格的工作表。使用
ActiveSheet
的问题在于它可能是您想要交互的工作表,也可能不是。我建议您对床单进行鉴定。将
一起使用是一种很好的方法,因为这样就不需要在对象中限定图纸。您可以使用
语句在
中直接引用它。希望它能让人感觉到,对吧,我只是太仓促了。我据此编辑了函数谢谢,你的版本也可以,我只是想保持简单。你建议20行代码,其中一行就足够解决它了?你真的应该重新考虑这是否是个好主意。你认为你的代码比设置myRange=trckr.range(trckr.range(“A2”).End(xlDown),“H2”)更可读吗?如果“more”与它的长度有关,那么是的。只要几个指针,我认为不需要
函数来获取最后一行。它只是一条单行语句,可用于主
(在本例中为
SelectRg
)。更值得关注的是
ActiveSheet
的使用。我在这里看到如此多的问题是因为不合格的工作表。使用
ActiveSheet
的问题在于它可能是您想要交互的工作表,也可能不是。我建议您对床单进行鉴定。将
一起使用是一种很好的方法,因为这样就不需要在对象中限定图纸。您可以在