Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel 为什么没有边界?_Excel_Vba_Border - Fatal编程技术网

Excel 为什么没有边界?

Excel 为什么没有边界?,excel,vba,border,Excel,Vba,Border,我像这样理解我的代码 rng2被分配到活动表上的范围“D:E”。只要没有空白单元格出现,所有单元格都计数为rng2(结束(xlUp)) 对于rng2,我将上述设置分配给我的范围rng2,这些设置是有效的左排列,边界应在连续的Syle框架中,我的rng2-这不起作用 我必须说,D:E的第一个单元格在D1(头)中包含一个值,但在E1(无头)中不包含该值,这是问题所在吗 编辑17.05.21完整代码 Dim rng2 As Range: Set rng2 = ActiveSheet.Range(&

我像这样理解我的代码

  • rng2被分配到活动表上的范围“D:E”。只要没有空白单元格出现,所有单元格都计数为rng2(结束(xlUp))
  • 对于rng2,我将上述设置分配给我的范围rng2,这些设置是有效的左排列,边界应在连续的Syle框架中,我的rng2-这不起作用
我必须说,D:E的第一个单元格在D1(头)中包含一个值,但在E1(无头)中不包含该值,这是问题所在吗

编辑17.05.21完整代码

Dim rng2 As Range:
Set rng2 = ActiveSheet.Range("D:E", ActiveSheet.Cells.End(xlUp))
 
 With rng2
 .HorizontalAlignment = xlLeft
 .Borders.LineStyle = xlContinous
   
 End With

更好的方法应该是这样的:

Sub Duplicate()

Dim nA As Long, nD As Long, i As Long, rc As Long
Dim s As String, j As Long

    Range("A:A").Copy Range("D1")
    Range("B1").Copy Range("E1")
    Range("D:D").RemoveDuplicates Columns:=1, Header:=xlYes
    rc = Rows.Count
    nA = Cells(rc, 2).End(xlUp).Row
    nD = Cells(rc, 4).End(xlUp).Row
    
       For i = 2 To nD
        v = Cells(i, 4)
        V2 = ""
        For j = 2 To nA
         If v = Cells(j, 1) Then
            V2 = V2 & Cells(j, 2) & ","
        End If
            
        Next j
        Cells(i, 5) = Mid(V2, 1)
    Next i

'neu
Dim rng2 As Range
Dim lastrow As Long

lastrow = ActiveSheet.UsedRange.Rows.Count

Set rng2 = ActiveSheet.Range("D1", "E" & lastrow)
 
 With rng2
 .HorizontalAlignment = xlLeft
 .Borders.LineStyle = xlContinuous
   
 End With

Debug.Print

    
End Sub
另外,你的代码有一个输入错误

Dim rng2 As Range
dim lastrow as long

lastrow = ActiveSheet.UsedRange.Rows.Count

Set rng2 = ActiveSheet.Range("D1", "E" & lastrow)
 
 With rng2
 .HorizontalAlignment = xlLeft
 .Borders.LineStyle = xlContinuous
   
 End With
继续针对边界问题对您的行进行排序。假设有两个列的行值不同。F列有8行,H列有5行:

为了获得不同行的lastrow,可以使用以下代码:

xlContinous should be xlContinuous

因此,lastrowCola的debug.print为8,而lastrowColb为5。根据您的情景,您可以进行相应的调整。

哇,好极了使用显式
选项
,节省您的时间!我建议始终激活
Option Explicit
:在VBA编辑器中,转到工具›选项›。是的,这是自我第一天学习VBA以来的默认设置,建议大家都这样做。@kin Siang谢谢:)我刚刚复制了你的代码,我有边界,但我得到的边界远远超出了rng2…我有一个有用的边界直到第6行,边界直到第34行…有什么意义吗。。我的声明确实被取消了…我没有考虑它,因为它是另一个圈。如果你的usedrange.row是6,那么它不太可能发生,但是直到第34行的边界。您可以使用步骤检查变量的值是否正确。或者您可以共享图片中的示例数据,以便我更好地了解结果。请尝试used debug.print以查看usedrange的值,可能您使用的是空行
Sub t()

Dim lastrowCola As Long
Dim lastrowColb As Long

lastrowCola = Sheet1.Range("F1").End(xlDown).Row
Debug.Print lastrowCola

lastrowColb = Sheet1.Range("H1").End(xlDown).Row
Debug.Print lastrowColb

End Sub