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