VBA, чтобы сохранить лист, как CSV ломает существующий модуль - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь создать сабвуфер VBA, который будет копировать лист и сохранять его как CSV.Я использую проверенный и проверенный метод:

1) Копирование листа

2) Открытие новой рабочей книги

3) Вставка скопированных данных в эту новую рабочую книгу

4) Сохранение этой книги в формате CSV

Исходный лист содержит несколько формул и модуль в двух ячейках, поэтому я планировал использовать .PasteSpecial xlPasteValues.Однако при запуске подпрограммы выдается ошибка 1004 и разбиваются модули в исходном листе (они затем отображаются как # ЗНАЧЕНИЕ).

Я попытался пройти по подпрограмме, и проблема, похоже, связана с методом .PasteSpecial/ что-то в исходном листе.Когда я получаю шаг .PasteSpecial, модуль, содержащийся в исходном листе, запускается, а затем я зацикливаюсь.

В качестве примечания, строка Set csvFileName относится к ячейке, которая объединяет значение имени файла перед запуском подпрограммы.Я не думаю, что это вызывает проблему, потому что я удалил ее и увидел то же поведение.

Вот код:

Sub SaveAsCSV()

    Dim csvFileName As String
    Dim ThisWB As Workbook, csvWB As Workbook

    Set ThisWB = ActiveWorkbook

    ThisWB.Sheets("SourceSheet").UsedRange.Copy

    Set csvWB = Application.Workbooks.Add(1)

    csvWB.Sheets(1).Range("A1").PasteSpecial xlPasteValues

    Set csvFileName = ThisWB.Path & "\" & ThisWB.Sheets("Instructions").Range("E10").Value & ".csv"

    Application.DisplayAlerts = False
    csvWB.SaveAs FileName:=csvFileName, FileFormat:=xlCSV, CreateBackup:=False, Local:=True
    csvWB.Close SaveChanges:=False
    Application.DisplayAlerts = True

    MsgBox "File has been Created and Saved"

End Sub

Еще несколько замечаний:

  • Модуль работает нормально, пока не запустится подпрограмма SaveAsCSV.

  • Модуль сохранен на уровне рабочей книги.Это в основном продвинутый vlookup с конкатенацией.Перемещение в пределах одного из листов нарушает его.

  • Подставка SaveAsCSV также находится на уровне рабочей книги.Перемещение на лист «Инструкции» не останавливает поведение.

  • Использование Excel для Mac, версия 16.21.1

Любая помощьБудем очень благодарны !!

Редактировать: 5-23-19

Для справки вот код модуля:

Function MultipleLookupNoRept(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)

Dim i As Long
Dim Result As String

For i = 1 To LookupRange.Columns(1).Cells.Count
  If LookupRange.Cells(i, 1) = Lookupvalue Then
    For J = 1 To i - 1
    If LookupRange.Cells(J, 1) = Lookupvalue Then
      If LookupRange.Cells(J, ColumnNumber) = LookupRange.Cells(i, ColumnNumber) Then
        GoTo Skip
      End If
    End If
    Next J
    Result = Result & " " & LookupRange.Cells(i, ColumnNumber) & ","
Skip:
  End If
Next i

MultipleLookupNoRept = Left(Result, Len(Result) - 1)

End Function

1 Ответ

1 голос
/ 23 мая 2019

Попробуйте это (без копирования / вставки):

Sub SaveAsCSV()

    Dim csvFileName As String
    Dim ThisWB As Workbook, csvWB As Workbook, rngUsed As Range

    Set ThisWB = ActiveWorkbook

    Set rngUsed = ThisWB.Sheets("SourceSheet").UsedRange

    csvFileName = ThisWB.Path & "\" & _
           ThisWB.Sheets("Instructions").Range("E10").Value & ".csv" 'no Set!

    Application.DisplayAlerts = False

    With Application.Workbooks.Add(1)
        .Sheets(1).Range("A1").Resize(rngUsed.Rows.Count, _
                           rngUsed.Columns.Count).Value = rngUsed.Value

        .SaveAs Filename:=csvFileName, FileFormat:=xlCSV, _
                          CreateBackup:=False, Local:=True

        .Close SaveChanges:=False
    End With

    Application.DisplayAlerts = True

    MsgBox "File has been Created and Saved"

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...