Ошибка выбора всех активных ячеек на листе - PullRequest
0 голосов
/ 23 ноября 2018

За 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

Но при использовании этого он сначала жалуется на.-Ссылку икогда я добавляю 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 голосов
/ 23 ноября 2018

Лично я предпочитаю делать это небольшими шагами, чтобы я мог пройти и посмотреть, все ли работает так, как задумано.Это похоже на вторую версию того, что вы пробовали, но я подумал, что было бы более понятно, если бы вместо tblend использовалось свойство address.Использование блока 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
0 голосов
/ 23 ноября 2018

Все ссылки должны указывать лист, в противном случае они по умолчанию активному листу

 Set rng = Sheets("HAOD").Range("A2",  Sheets("HAOD").Cells( Sheets("HAOD").Range("a1000000").End(xlUp).row,  Sheets("HAOD").Range("xfd1").End(xlToLeft).Column))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...