LightZ Пользователь Сообщений: 1748 |
Всем привет. Макрос для открытия: Sub test() Application.ScreenUpdating = False Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
LightZ Пользователь Сообщений: 1748 |
Спасибо! Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
LightZ Пользователь Сообщений: 1748 |
К сожалению, не совсем так работает как хотелось бы. Можно как-то решить? Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
LightZ Пользователь Сообщений: 1748 |
По первому пункту разобрался: оставил только часть кода, т.е. к своему добавил True А вот с этими символами (<h2>,<p> и т.д.) — проблема. Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
LightZ Пользователь Сообщений: 1748 |
Сорри, ошибся, по первому пункту проблема актуальна. Ps. Ув. Модераторы, удалите, пожалуйста, мои лишние сообщения. Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Я не знаю какие лишние. Время подскажите. |
egonomist Пользователь Сообщений: 409 |
для csv надо сделать запись макроса, импортировать из текста. End Sub |
LightZ Пользователь Сообщений: 1748 |
Спасибо, но импорт я уже пробовал, так же появляются ненужные знаки. Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Hugo Пользователь Сообщений: 23251 |
Что за знаки? |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
|
LightZ Пользователь Сообщений: 1748 |
Если открыть файл original bd.csv Экселем — данные выстраиваются по столбцам (к примеру столбец K «описание»), а если сделать текстовый импорт или скопировать — столбец K съезжает в столбец A. Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
LightZ Пользователь Сообщений: 1748 |
Это происходит из-за того, что в ячейках столбца K находится текст с символами альт+энтер Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
LightZ Пользователь Сообщений: 1748 |
VBA воспринимает альт+энтер как разделитель и перекидывает текст в столбец А. Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
Hugo Пользователь Сообщений: 23251 |
Можно так пойти: Sub tt() Далее перебираем массив a и бьём по «;», раскладываем по ячейкам. |
nerv Пользователь Сообщений: 3071 |
|
Hugo Пользователь Сообщений: 23251 |
Sub tt() Там в |
Hugo Пользователь Сообщений: 23251 |
nerv, спасибо a = Split(strText, vbCrLf) |
LightZ Пользователь Сообщений: 1748 |
в 2010 не прокатило… сейчас попробую переделать Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
LightZ Пользователь Сообщений: 1748 |
в варианте Hugo съехал текст столбцов влево Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
ratboy Пользователь Сообщений: 138 |
То может я не так задачу понимаю, но у меня вот так получилось. Запускать load_d |
LightZ Пользователь Сообщений: 1748 |
Спасибо, вроде бы всё супер. Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
LightZ Пользователь Сообщений: 1748 |
А нет… рано написал. Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете? |
ratboy Пользователь Сообщений: 138 |
ну это, наверное от того, что точка с запятой разделитель… |
nerv Пользователь Сообщений: 3071 |
Богдан, какой ты привередливый : ) |
На работе у меня XL2002 |
|
‘В проекте должна быть ссылка на библиотеку Microsoft Forms 2.0 ‘Чтение файла в строку S ‘Теперь возможны любые варианты переноса строки на лист _ ‘******* от Шапокляка ‘Строка >> текстовый буфер ‘Перенос на лист новой книги ‘Очистка буфера |
|
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Вопросик: |
Точно! |
|
v__step Гость |
#30 29.04.2012 15:50:13 Тогда можно немножко упростить ‘В проекте должна быть ссылка на библиотеку Microsoft Forms 2.0 ‘Чтение файла в строку S ‘Теперь возможны любые варианты переноса строки на лист _ ‘******* от Шапокляка ‘Строка >> буфер |
Здравствуйте!
Полагаю мой вопрос больше подходит в эту тему по содержанию.
Кто-нибудь сталкивался с вопросом зяпатой в качестве разделителя на столбцы при сохранении .xls в .csv?
Поясню. У меня есть эксель файлы которые мы редактируюем и сохраняем в формате csv, который понятен для промышленного оборудования. Теперь я хочу делать редатирование и сохранение кодом. При сохраниении .xls в .csv кодом пояляется нежелательный разделитель столбцов — запятая. Промышленное оборудование не понимает такое разделение столбцов.
Вот так выглядит первая строка в CSV-файле, открытым в эксель, сохраненный вручную: ImportASCII
Вот так выглядит первая строка в CSV-файле, открытым в эксель, сохраненный кодом: Import,ASCII,,,,,,,,,,,,,,,
Можно ли добавить какой-то параметр в строчку сохранения, чтобы избежать появления запятых?
.SaveAs Filename:=MyFileName, FileFormat:=xlCSV, CreateBackup:=False
Любопытно, что если октрыть CSV файлы в OpenOffice, то оба (сохраненный вручную и кодом) читаются нормально и при сохранении и последующем открытии в Excel запятые исчезают.
Выложил на всякий случай файл с кодом. Кто-нибудь знает как обойти такую проблему.
wondering if you can help out with a VBA issue. I pieced together the following without really knowing what I was doing:
Sub Import_Raw_Stripe_data()
Dim fileDialog As fileDialog
Dim strPathFile As String
Dim strFileName As String
Dim strPath As String
Dim dialogTitle As String
Dim Tworkbook As Workbook
Dim Sworkbook As Workbook
dialogueTitle = "Select File to Import"
Set fileDialogue = Application.fileDialog(msoFileDialogFilePicker)
With fileDialogue
.InitialFileName = "L:Downloads"
.AllowMultiSelect = False
.Filters.Clear
.Title = dialogueTitle
If .Show = False Then
MsgBox "No file selected."
Exit Sub
End If
strPathFile = .SelectedItems(1)
End With
Set Sworkbook = Workbooks.Open(fileName:=strPathFile)
Set Tworkbook = ThisWorkbook
End Sub
Which, as far as I can tell opens a file dialog in excel, allows a user to choose a document and then opens it.
What I would like to do is the following:
1) Open a file dialogue and select a .csv file to import data from (complete?) into a .xlsm master file (with multiple sheets).
2) Select certain columns from the .csv (column A, Q, R and S in this case), copy them and import them into the second sheet of the master excel file entitled «Raw Stripe Data».
Any help in the matter would be greatly appreciated.
Update: I managed to find the following code:
Sub load_csv()
Dim fStr As String
With Application.fileDialog(msoFileDialogFilePicker)
.Show
If .SelectedItems.Count = 0 Then
MsgBox "Cancel Selected"
Exit Sub
End If
'fStr is the file path and name of the file you selected.
fStr = .SelectedItems(1)
End With
With ThisWorkbook.Sheets("Stripe Raw Data").QueryTables.Add(Connection:= _
"TEXT;" & fStr, Destination:=ThisWorkbook.Sheets("Stripe Raw Data").Range("$A$1"))
.Name = "CAPTURE"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
ActiveWorkbook.Save
End With
End Sub
This works great — but is there anyway to have it not override the data already imported? (for example, if i use it twice, the second import overrides the first).
Уважаемое сообщество, доброго времени суток.
Опять недостаток знаний вынудил меня обратиться к вам за советом. Итак, в чём суть проблемы:
Имеется файл формата csv, данные из которого подлежат дальнейшему анализу в Excel. Этот файл открывается автоматически, когда запускается соответствующий макрос и вроде бы всё работает дальше, но писал я код открытия и конвертации данного файла только с помощью уже имеющихся у меня знаний. И вот, ожидаемо, вчера обнаружил, что не все данные отображаются корректно. Во вложении 2 файла: *.xlsm (в котором и находится та часть кода, которую я «наваял») и файл *.сsv (для примера).
Заранее прошу не смеяться над моим «решением» данной задачи, и прошу подсказать, как это нужно делать корректно.
P.S. Я день потратил на чтение разнообразных ответов на данный вопрос на разных форумах и в интернете, но, к сожалению, так и не решил эту задачу.
Заранее спасибо.
Функция TextFile2Array предназначена для преобразования файла CSV в двумерный массив
Очень часто при работе с текстовыми файлами (и, в частности, с файлами CSV) приходится их загружать на лист Excel, предварительно производя фильтрацию данных в этом файле.
Чтобы упростить весь процесс — от выбора файла CSV в диалоговом окне, до разбиения загруженного из файла текста в двумерный массив, и была написана эта функция.
В качестве параметров функции можно задать разделители строк и столбцов текстового файла, так что при помощи этой функции можно загружать данные не только из файлов CSV, но и из любых других текстовых файлов, имеющих аналогичную структуру.
Пример использования функции для загрузки данных из файла CSV:
Sub ЗагрузкаДанныхИзCSV() ' выбор файла по умолчанию предлагается в той же папке, ' где расположен текущий файл Excel CSVarr = TextFile2Array(, ThisWorkbook.Path, , "*.csv") ' проверка результата загрузки данных (выход из макроса, если данные не загружены) If Not IsArray(CSVarr) Then MsgBox "Файл CSV не обработан", vbCritical, "Ошибка": Exit Sub ' ваш код обработки двумерного массива Debug.Print "Загружен двумерный массив размерами " & _ UBound(CSVarr, 1) & " строк на " & UBound(CSVarr, 2) & " столбцов" End Sub
Результат в окне Immediate:
Загружен двумерный массив размерами 1244 строк на 9 столбцов
Код функции TextFile2Array:
Function TextFile2Array(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:", _ Optional ByVal FilterDescription As String = "Текстовые файлы", _ Optional ByVal FilterExtention As String = "*.*", _ Optional ByVal ColumnsSeparator$ = ";", _ Optional ByVal RowsSeparator$ = vbNewLine) As Variant ' Функция запрашивает имя файла (текстового, CSV, и т.п.), и обрабатывает его содержимое ' В качестве параметров можно задать разделители строк и столбцов для разбиваемой строки ' Возвращает двумерный массив - результат преобразования текстового файла в двумерный массив On Error Resume Next With Application.FileDialog(msoFileDialogOpen) ' диалоговое окно выбора файла CSV .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function Filename$ = .SelectedItems(1) End With Set fso = CreateObject("scripting.filesystemobject") ' читаем текст из выбранного файла Set ts = fso.OpenTextFile(Filename$, 1, True): txt$ = ts.ReadAll: ts.Close Set ts = Nothing: Set fso = Nothing txt = Trim(txt): Err.Clear ' разделяем текст на строки и столбцы If txt Like "*" & RowsSeparator$ Then txt = Left(txt, Len(txt) - Len(RowsSeparator$)) tmpArr1 = Split(txt, RowsSeparator$): RowsCount = UBound(tmpArr1) + 1 ColumnsCount = UBound(Split(tmpArr1(0), ColumnsSeparator$)) + 1 If Err.Number > 0 Then MsgBox "Строка не может быть разбита на двумерный массив", vbCritical: End ReDim arr(1 To RowsCount, 1 To ColumnsCount) For i = LBound(tmpArr1) To UBound(tmpArr1) tmpArr2 = Split(Trim(tmpArr1(i)), ColumnsSeparator$) For j = 1 To UBound(tmpArr2)+1 arr(i + 1, j) = tmpArr2(j - 1) Next j Next i TextFile2Array = arr ' возвращаем результат в виде двумерного массива End Function
Ещё одна функция, — без вывода диалогового окна выбора файла
Function LoadArrayFromTextFile(ByVal filename$, Optional ByVal FirstRow& = 1, _ Optional ByVal ColumnsSeparator$ = ";", Optional ByVal RowsSeparator$ = vbNewLine) As Variant ' Функция открывает текстовый (CSV) файл filename$, ' и загружает макссив данных, начиная со строки FirstRow& ' В качестве параметров можно задать разделители строк и столбцов для разбиваемой строки ' Возвращает двумерный массив - результат преобразования текстового файла в двумерный массив On Error Resume Next Set FSO = CreateObject("scripting.filesystemobject") ' читаем текст из выбранного файла Set ts = FSO.OpenTextFile(filename$, 1, True): txt$ = ts.ReadAll: ts.Close Set ts = Nothing: Set FSO = Nothing txt = Trim(txt): Err.Clear ' разделяем текст на строки и столбцы If txt Like "*" & RowsSeparator$ Then txt = Left(txt, Len(txt) - Len(RowsSeparator$)) If FirstRow& > 1 Then ' обрезаем ненужные строки txt = Split(txt, RowsSeparator$, FirstRow&)(FirstRow& - 1) End If Err.Clear: tmpArr1 = Split(txt, RowsSeparator$): RowsCount = UBound(tmpArr1) + 1 ColumnsCount = UBound(Split(tmpArr1(0), ColumnsSeparator$)) + 1 If Err.Number > 0 Then MsgBox "Текст файла " & Dir(filename$, vbNormal) & _ " не может быть считан в двумерный массив", vbCritical: Exit Function ReDim arr(1 To RowsCount, 1 To ColumnsCount) For i = LBound(tmpArr1) To UBound(tmpArr1) tmpArr2 = Split(Trim(tmpArr1(i)), ColumnsSeparator$) For j = 1 To UBound(tmpArr2) + 1 arr(i + 1, j) = tmpArr2(j - 1) Next j Next i LoadArrayFromTextFile = arr ' возвращаем результат в виде двумерного массива End Function