VBA为ActiveSheet设置范围而不是A1:B2

我是VBA的noob我有从Row1到行226的数据范围,试图导出为逗号分隔csv文件。

Sub Comma() Dim r As Range: Set r = Range("A1:D4") Dim buffer As String, delimiter As String, c As Range Dim i As Long 

我想将范围设置为当前工作表“Sheet1”

当我做Dim r As Range: Set r = Range("Sheet1") ,它抛出了一个错误,我似乎无法find我想要的东西。

谁能帮帮我吗? 谢谢

你需要find最后一行,然后构build你的范围。 请参阅此链接

 Sub Sample() Dim ws As Worksheet Dim lastrow As Long Dim rng As Range Set ws = Sheets("Sheet1") With ws If Application.WorksheetFunction.CountA(.Cells) <> 0 Then lastrow = .Cells.Find(What:="*", _ After:=.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row Else lastrow = 1 End If Set rng = .Range("A1:D" & lastrow) End With End Sub 

如果你的最后一列也没有解决,那就用这个

 Sub Sample() Dim ws As Worksheet Dim lastrow As Long, lastCol As Long Dim rng As Range Dim colName As String Set ws = Sheets("Sheet1") With ws If Application.WorksheetFunction.CountA(.Cells) <> 0 Then lastrow = .Cells.Find(What:="*", _ After:=.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row lastCol = .Cells.Find(What:="*", _ After:=.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Column Else lastrow = 1: lastCol = 1 End If colName = Split(Cells(, lastCol).Address, "$")(1) Set rng = .Range("A1:" & colName & lastrow) End With End Sub 

尝试下面的代码,因为良好的做法总是在模块的顶部使用Option Explicit

 Option Explicit Sub Comma() Dim r As Range Dim LastCell As Range Dim LastRow As Long Dim buffer As String, delimiter As String, c As Range Dim i As Long With Worksheets("Sheet1") ' get dynamic last row Set LastCell = .Cells.Find(What:="*", After:=Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False) If Not LastCell Is Nothing Then LastRow = LastCell.Row ' get last Row with data End If Set r = Worksheets("Sheet1").Range("A1:D" & LastRow) '<-- set Range to "Sheet1" End With End Sub 

尝试:

 Dim r As Range: Set r = Sheets("Sheet1").Range("A1:D4")