Nano Hash - криптовалюты, майнинг, программирование

макросы excel сохраняют листы в формате csv с определенным разделителем и вложением

Я полный болван в отношении vb и excel, пытался объединить 2 макроса, которые я нашел здесь, в 1, но, очевидно, сделал что-то ужасно неправильно, и теперь я застрял. Сначала я просто использовал этот макрос (сохранил его в качестве личного.xlsb, чтобы иметь возможность использовать его в любой книге)

    Sub CSVFile()

    Dim SrcRg As Range
    Dim CurrRow As Range
    Dim CurrCell As Range
    Dim CurrTextStr As String
    Dim ListSep As String
    Dim FName As Variant
    FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")

    ListSep = ";"
      If Selection.Cells.Count > 1 Then
        Set SrcRg = Selection
      Else
        Set SrcRg = ActiveSheet.UsedRange
      End If
    Open FName For Output As #1
    For Each CurrRow In SrcRg.Rows
      CurrTextStr = ìî
    For Each CurrCell In CurrRow.Cells
      CurrTextStr = CurrTextStr & """" & GetUTF8String(CurrCell.Value) & """" & ListSep
    Next
    While Right(CurrTextStr, 1) = ListSep
      CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
    Wend
    Print #1, CurrTextStr
    Next
    Close #1
    End Sub

Это плюс код функции GetUTF8String. Теперь это работало нормально. Затем я хорошо подумал, почему бы просто не поэкспериментировать с моим ограниченным (это серьезное преуменьшение) пониманием vb, добавил следующий код и изменил подпрограмму CSVFile на функцию, которую я затем вызвал из подпрограммы ниже, с именем выходного файла как параметр (вместо него следует использовать FName = Application.GetSaveAsFilename). Я подумал, что да, этот код автоматически сохраняет все листы, теперь давайте просто удостоверимся, что функция настройки кодирования и разделителя/вложения запускается перед сохранением каждого листа. Это кажется неправильным, но я подумал, почему бы и не попробовать..

Public Sub SaveAllSheetsAsCSV()
On Error GoTo Heaven

' each sheet reference
Dim Sheet As Worksheet
' path to output to
Dim OutputPath As String
' name of each csv
Dim OutputFile As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False

' Save the file in current director
OutputPath = ThisWorkbook.Path


If OutputPath <> "" Then
Application.Calculation = xlCalculationManual

' save for each sheet
For Each Sheet In Sheets

    OutputFile = OutputPath & Application.PathSeparator & Sheet.Name & ".csv"

    ' make a copy to create a new book with this sheet
    ' otherwise you will always only get the first sheet

    Sheet.Copy
    ' this copy will now become active
     CSVFile(OutputFile)
     ActiveWorkbook.SaveAs Filename:=OutputFile, FileFormat:=xlCSV,     CreateBackup:=False
    ActiveWorkbook.Close
Next

Application.Calculation = xlCalculationAutomatic

End If

Finally:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True

Exit Sub

Heaven:
MsgBox "Couldn't save all sheets to CSV." & vbCrLf & _
        "Source: " & Err.Source & " " & vbCrLf & _
        "Number: " & Err.Number & " " & vbCrLf & _
        "Description: " & Err.Description & " " & vbCrLf

GoTo Finally
End Sub

Сохранил это, и с этим мне удалось добиться чего-то совсем другого. При открытии любых книг этот макрос запускается и открывает мои листы из этой конкретной книги в виде CSV-файлов (без их сохранения). Теперь я как Алиса в стране чудес. Почему он работает при открытии файла? Это нежелательно, поэтому я вернулся к коду макроса и изменил его обратно только на подпрограмму csvfile. Ну, это не помогло, понятия не имею, что я там делал, определенно редактировал тот же макрос... Итак, я удалил макрос, модуль, я не могу представить, где он сейчас находится, но он все еще работает + я получаю это предупреждение, что макросы были отключены. Не могу избавиться от этого! Теперь, ребята, извините за полное отсутствие профессионализма с моей стороны, это должно было быть небольшой услугой для клиента, не тратя кучу времени на изучение vb, потому что моему боссу это не нравится... меня конечно интересует как добиться цели сохранения листов автоматически после установки в них деимитера и вложения. И в данный момент меня очень интересует как избавиться от этого макроса и где он прячется.. Что я сделал?! Спасибо за ваше терпение!

13.12.2012

Ответы:


1

Я думаю, что проблема заключается в линии

OutputPath = ThisWorkbook.Path

Поскольку вы запускаете это из своего личного.xlsb, который хранится в вашей папке XLSTART, он создал файлы CSV в том же месте. Когда Excel запустится, он попытается загрузить все файлы, которые найдет в этом месте.

Просто найдите папку XLSTART и удалите все файлы CSV, которые вы там найдете.

Попробуйте использовать

OutputPath = ActiveWorkbook.Path

Расположение папки XLSTART, в зависимости от вашей системы, вероятно, выглядит примерно так:

C:\Users\YOURNAME\AppData\Roaming\Microsoft\Excel\XLSTART
13.12.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..