【问题标题】:VBA set range for ActiveSheet instead of A1:B2VBA 为 ActiveSheet 设置范围而不是 A1:B2
【发布时间】:2017-06-02 17:29:24
【问题描述】:

我是 VBA 的菜鸟 我的数据范围从 Row1 到 Row 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

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

当我执行 Dim r As Range: Set r = Range("Sheet1") 时,它向我抛出了一个错误,我似乎无法在 SO 上找到我想要的东西。

谁能帮帮我?谢谢你

【问题讨论】:

  • 您是要在不同的工作表上将范围设置为 A1:D4,还是要将范围设置为当前工作表的整个 UsedRange ?
  • 当前工作表的整个使用范围。不管我在数据表中有多少数据。感谢您提出问题。 @YowE3K
  • 您需要找到最后一行,然后构建您的范围。见This链接
  • @YowE3K 你刚刚删除了你的答案吗?
  • 是的 - 我希望@SiddharthRout 即将发布一个避免UsedRange 的帖子:D

标签: vba excel spreadsheet


【解决方案1】:

您需要找到最后一行,然后构建您的范围。见This链接

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

【讨论】:

  • 这次我打败你了吗?几秒钟?
  • @ShaiRado - 但你和 Siddharth 都忘记了还找到最后使用的 - 它可能不是 D :D
  • @YowE3K: 照顾;)
  • 这次比@ShaiRado 快!
  • 我猜我很幸运:P
【解决方案2】:

试试下面的代码,最好在模块顶部使用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

【讨论】:

  • 我的跟进是我的数据行一直到 226
  • 而我想在问题中说的是“无论数据表中有多少数据,我都想分配我的数据表”
  • ++ 是的,你确实打败了我 LMAO
  • @SiddharthRout 但只有 5 秒 :) ,你可能用左手打字 ;)
  • 我什至不会尝试和竞争 - 我只是半醒!
【解决方案3】:

试试:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多