【问题标题】:Error selecting all active cells in a sheet选择工作表中的所有活动单元格时出错
【发布时间】:2018-11-23 13:31:48
【问题描述】:

10 年来没有做过任何编程,现在正在尝试自动化一些管理工作。我需要从某个数据集创建一个 CSV 文件。 使用此代码单独运行以下代码以选择范围:

Set rng = Sheets("HAOD").Range("A2", Cells(Range("a1000000").End(xlUp).row, Range("xfd1").End(xlToLeft).Column))

工作正常,但如果我从我的主程序中调用子程序,我会收到错误 1004,并且调试器指向我的范围选择。我尝试使用此代码进行范围选择,我在网上找到的 VBA vlookup 函数中使用它,它在那里完美运行:

rng = .Range("A2:" & tblEnd & .Cells(.Rows.Count, tblEnd).End(xlUp).row).Value

但是当使用它时,它首先抱怨 .-reference 并且当我添加 Sheets("HAOD") 时,我再次收到 1004 错误。这一次即使是在单独运行子时也是如此。我做错了什么?

Sub CreateCheckITfile()

    Call PopulateHAODtab
    Call SaveAsCSV

End Sub

Sub SaveAsCSV()

Dim myFile As String
Dim rng As Range
Dim cellValue As Variant
Dim i As Integer
Dim j As Integer

myFile = Application.DefaultFilePath & "\HAOD.csv"

Set rng = Sheets("HAOD").Range("A2", Cells(Range("a1000000").End(xlUp).row, Range("xfd1").End(xlToLeft).Column))

Open myFile For Output Lock Write As #1

For i = 1 To rng.Rows.Count
    Dim fileRow As String
    fileRow = ""
    For j = 1 To rng.Columns.Count
        cellValue = rng.Cells(i, j).Value

        If j = rng.Columns.Count Then
            fileRow = fileRow & cellValue
            Print #1, fileRow
        Else
            fileRow = fileRow & cellValue & ","
        End If
    Next j
Next i

Close #1
End Sub

【问题讨论】:

  • 使用点意味着一个With语句With Sheets("HAOD")你的`rng定义看起来不对,你有三个范围?

标签: excel vba


【解决方案1】:

所有引用都需要指定工作表,否则默认为活动工作表

 Set rng = Sheets("HAOD").Range("A2",  Sheets("HAOD").Cells( Sheets("HAOD").Range("a1000000").End(xlUp).row,  Sheets("HAOD").Range("xfd1").End(xlToLeft).Column))

【讨论】:

  • 谢谢,但是当我尝试对更漂亮的 Set rng = Sheets("HAOD").Range("A2:" & tblEnd & Sheets("HAOD").Cells(Sheets("HAOD").Rows.Count, tblEnd).End(xlUp).row).Value 做同样的事情时,我仍然收到 1004 错误
  • tblEnd的实际值是多少?
  • 该死的我错过了它应该是“L”。添加它会给出错误 424:Object required 错误。我只是想找到一种方法来选择工作表中的所有活动单元格。必须是一种不需要给出最后一列等的聪明方法
【解决方案2】:

就我个人而言,我更喜欢分步执行,这样我就可以逐步完成,看看一切是否按预期工作。这有点类似于您尝试的第二个版本,但我认为如果使用address 属性而不是tblend 会更清楚。使用With 块也有助于使其看起来更整洁。

尝试将您的 set 语句替换为:

With Sheets("HAOD")
    lastrow = .Range("A" & .Rows.Count).End(xlUp).Row
    lastcol = .Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
    Set Rng = .Range("A2:" & .Cells(lastrow, lastcol).Address)
End With

【讨论】:

  • 感谢布罗托!非常整洁,它就像一个魅力。感谢大家的支持!非常感谢。
猜你喜欢
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 2020-12-09
相关资源
最近更新 更多