选择工作表中所有活动单元格时出错

时间:2018-11-23 13:31:49

标签: excel vba excel-vba

十年来没有进行任何编程,现在正在尝试使一些管理工作自动化。我需要根据特定数据集创建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

2 个答案:

答案 0 :(得分:1)

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

M

答案 1 :(得分:0)

我个人而言,我宁愿一步一步地完成它,这样我就可以逐步了解所有工作是否按预期进行。这有点类似于您尝试的第二个版本,但是我认为如果使用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