мой компьютер ругается "run time error..." вроде бы на вот эту строку макроса (подсвечивает желтым). Value = Application.Transpose(Arr) Как поправить правильно эту строку я не знаю, поискала ещё в интернете.
Нашла вот такой макрос
Скрытый текст
Sub OpenRtfAndPasteToSheets() Dim wd As Object Dim ns As Worksheet
On Error Resume Next 'запускаем Word Set wd = GetObject("", "Word.Application" If Err.Number <> 0 Then Err.Clear Set wd = CreateObject("Word.Application" If Err.Number <> 0 Then Exit Sub End If
On Error GoTo BAD
Do 'получаем имя файла f = Application.GetOpenFilename("Файлы RTF, *.rtf,Все файлы, *.*" If TypeName(f) = "Boolean" Then Exit Do 'если Отмена, то выход 'откроем выбранный файл Set wdd = wd.Documents.Open(f) ' wd.Visible = True 'копируем содержимое всего документа t = wdd.Content.Copy 'создаем новый лист для этого документа Set ns = ActiveWorkbook.Worksheets.Add 'вставляем скопированные данные в новый лист ns.Paste Destination:=ns.Cells(1, 1) 'немного отформатируем ns.Cells.WrapText = False ns.Columns.AutoFit ns.Rows.AutoFit wdd.Close Loop wd.Quit Set wd = Nothing Exit Sub BAD: MsgBox Err.Description On Error Resume Next wd.Quit Set wd = Nothing End End Sub
Пробовала его запустить, безрезультатно.
Ещё один вопрос, макрос для rtf подойдет для txt ? Спасибо заранее.
1) Я не нашел в вашем макросе строку Value = Application.Transpose(Arr) А ругается, скорее всего, потому, что массив Arr - пустой. (видимо, данные не загрузились)
2) Макрос для txt, конечно, можно приспособить, но зачем мучить Word обработкой текстовых файлов, когда данные из файла TXT намного проще и быстрее загрузить напрямую, не запуская Word.
Добрый день. Игорь, спасибо за ответ. Вечером попробую Ваши коды.
Честно говоря, я в VBA ничего не понимаю, с необходимостью применить макросы столкнулась буквально в прошлом месяце, подыскиваю себе понятную литературу, немного читала Гарнаева.
Насчет моих вопросов. Вопрос №2 я немного некорректно сформулировала, имелось в виду, подойдет ли макрос, импортирующий из rtf в Excel для такой же цели для файла в формате txt (импорта txt в Excel)
' Импорт строк в Excel из RTF Sub ToExcelFromWord()
' --> Менять только здесь Const MyFile = "C:\1.rtf" ' <-- Путь, имя, тип файла RTF Const Destination = "J4" ' <-- Адрес первой ячейки импорта ' <--
Dim wdApp As Object, wdDoc As Object, IsNewApp As Boolean Dim txt$, i&, Arr, wdWSm, x
' Открыть RTF On Error Resume Next Set wdApp = GetObject(, "Word.Application") If Err <> 0 Then Err.Clear Set wdApp = CreateObject("Word.Application") IsNewApp = True Else With wdApp i = .Documents.Count .ScreenUpdating = False wdWS = .WindowState If wdWS <> 0 Then .WindowState = 0 End With End If Set wdDoc = wdApp.Documents.Open(MyFile, , True) If Err <> 0 Then MsgBox "Не найден файл: " & MyFile, vbExclamation: Err.Clear: GoTo exit_ On Error GoTo 0 'exit_
' Скопировать из Word в масссив Arr txt = wdDoc.Content txt = Replace(wdDoc.Range.Text, Chr(7), "") Arr = Split(txt, vbCr) ' Заморозить Excel With Application .EnableEvents = False .ScreenUpdating = False .Calculation = xlCalculationManual End With ' Скопировать из масссива Arr - в Excel With Range(Destination) ' Очистить Set x = Cells(Rows.Count, .Column).End(xlUp) If x.Row >= .Row Then Range(.Offset(0), x).ClearContents ' Скопировать With .Resize(UBound(Arr), 1) .NumberFormat = "@" .Font.Name = "Courier New" .Font.Size = 10 .Value = Application.Transpose(Arr) .Columns.AutoFit End With End With
exit_: ' Поймать ошибку If Err <> 0 Then MsgBox Err.Description ' Закрыть RTF wdDoc.Close 0 Set wdDoc = Nothing ' Закрыть приложение Word или оживить его (если ранее был открыт) With wdApp If IsNewApp Then .Quit Else If .Documents.Count < i Then .Documents.Add .WindowState = wdWS .ScreenUpdating = True End If End With Set wdApp = Nothing ' Отморозить Excel With Application .EnableEvents = True .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub
может быть кто-то сможет подсказать как перевести функцию
Код
Private Sub
Button1_Click(ByVal
sender As System.Object, ByVal
e As System.EventArgs)
Handles Button1.Click
Dim Mass()
Dim STR As String
Mass = IO.File.ReadAllLines("D:\1.csv")
STR = Split(Mass(2), ",")(3)
MsgBox(STR)
End Sub
Dim nn As Long
Dim la() As String
Dim lr() As String
Dim n As String
nn = 1
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("D:\file.csv")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
запись в файл происходит тут (всё работает) , но как прочитать по столбцам в массив? Почему не срабатывает функция TextFile2Array c выгрузкой уже записанного ранее файла?
Код
Function txt_write_from_Mas(m As Variant, n%)
Dim i#, ii#, s$
For i = 1 To UBound(m)
s = m(i, 1)
For ii = 2 To UBound(m, 2)
s = s & vbTab & m(i, ii)
Next
Print #n, s ' Write #n, sf
Next
Kuzmich, там задача расписана в теме "Задача описана в теме "RunTime Error 7 - Out of Memory"", а в ручную я и так каждую неделю делаю...нужен кусок кода, чтобы вставить его в другой кусок кода..... и .т.д.
Kuzmich, ты вообще представляешь , что при считывании с каждой строки листа при объёме в 300 000 строк Excel просто повиснит? Зачем ты мне файл прислал без макроса? у меня его считывать некуда....