Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2010, 10:58   #1
imber
Новичок
Джуниор
 
Регистрация: 29.04.2010
Сообщений: 2
По умолчанию Из буфера в файл txt

Подскажите, пожалуйста, как из буфера вставить в файл txt с помощью vba
уже отчаялся найти.
...............................
Selection.Copy
Shell "NOTEPAD.EXE", vbNormalFocus
AppActivate "Блокнот"
' Здесь вставка не срабатывает
Selection.Paste
imber вне форума Ответить с цитированием
Старый 31.07.2010, 15:30   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а какая задача стоит?
И зачем Вам блокнот? Пишите в файл напрямую.
Например, так:
Код:
Sub SaveSelection()
  Dim c As Range
  Open "C:\Temp\Сохранение.txt" For Output As #2
  For Each c In Selection
    Print #2, c.Value
  Next
  Close #2
  MsgBox "Содержимое выделенных ячеек сохранено в файл C:\Temp\Сохранение.txt"
End Sub
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.07.2010, 15:49   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Для записи в текстовый файл совсем необязательно запускать NOTEPAD.
И буфер обмена использовать не надо.

Сначала в переменную поместите текст выделенного диапазона: http://excelvba.ru/code/Range2TXT
а потом текст из этой переменной запишите в файл: http://excelvba.ru/code/txt

Если объединить эти 2 функции, получится вот что:
(перед нажатием на кнопку выделите диапазон ячеек)



Код:
Sub ОсновнойМакрос()
    txt = Range2TXT(Selection)
    SaveTXTfile "C:\Текст диапазона.txt", txt
End Sub

Function Range2TXT(ByRef ra As Range, Optional ByVal ColumnsSeparator$ = vbTab, _
                   Optional ByVal RowsSeparator$ = vbNewLine) As String
    If ra.Cells.Count = 1 Then Range2TXT = ra.Value & RowsSeparator$: Exit Function
    If ra.Areas.Count > 1 Then
        Dim ar As Range
        For Each ar In ra.Areas
            Range2TXT = Range2TXT & Range2TXT(ar, ColumnsSeparator$, RowsSeparator$)
        Next ar
        Exit Function
    End If
    arr = ra.Value
    For i = LBound(arr, 1) To UBound(arr, 1)
        txt = "": For j = LBound(arr, 2) To UBound(arr, 2): txt = txt & ColumnsSeparator$ & arr(i, j): Next j
        Range2TXT = Range2TXT & Mid(txt, Len(ColumnsSeparator$) + 1) & RowsSeparator$
    Next i
End Function

Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
    On Error Resume Next: Err.Clear
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.CreateTextFile(filename, True)
    ts.Write txt: ts.Close
    SaveTXTfile = Err = 0
    Set ts = Nothing: Set fso = Nothing
End Function

Последний раз редактировалось EducatedFool; 31.07.2010 в 16:11.
EducatedFool вне форума Ответить с цитированием
Старый 31.07.2010, 16:09   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

EducatedFool, посмотрите мой ответ тут:
Из буфера в файл txt

p.s. заметьте, я раньше написал!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.07.2010, 16:15   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. заметьте, я раньше написал!
Вот как всегда - сначала ответил в теме, а потом обнаружил её дубль с ответом))
Да уж, Serge, в этот раз вам удалось меня опередить))

PS: Темы объединил.
EducatedFool вне форума Ответить с цитированием
Старый 01.08.2010, 09:41   #6
imber
Новичок
Джуниор
 
Регистрация: 29.04.2010
Сообщений: 2
По умолчанию

Мне не надо писать в файл, вопрос задан как пример,
а файл может быть jpg, bmp, psd
imber вне форума Ответить с цитированием
Старый 01.08.2010, 10:55   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
' Здесь вставка не срабатывает
Selection.Paste
А она и не будет работать.
Объект Selection относится к приложению Excel, а команда Paste - к стороннему приложению.

Попробуйте посылать приложению комбинацию клавиш Ctrl + V
В виде кода это выглядит так: (проверил - всё работает)

Код:
Sub test()
    Selection.Copy
    Shell "NOTEPAD.EXE", vbNormalFocus
    For i = 1 To 1000: DoEvents: Next ' ждём, пока приложение запустится
    Application.SendKeys "^v" ' вставка из буфера обмена в активное приложение
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 16.09.2014, 14:35   #8
Evgeniy_Rindya
Новичок
Джуниор
 
Регистрация: 16.09.2014
Сообщений: 1
По умолчанию

Добрый день, уважаемые форумчане!

Есть столбец с данными, например 150 тыс. значений, а нужно, чтоб данные из этого столбца, сохранялись в файл txt по 3 тыс. значений.
Т.е. чтоб на выходе получить 50 файлов, в каждом из которых 3 тыс. строк.

Можно это сделать автоматически?

Я пока смог сделать только вот так:


Код:
Sub Макрос1()  
  
    Range("A2:A3000").Select  
    Range("A3000").Activate  
    Selection.Copy  
      
    Shell "NOTEPAD.EXE", vbNormalFocus  
    For i = 1 To 1000: DoEvents: Next ' ждем пока приложение запустится  
    Application.SendKeys "^v" ' вставка из буфера обмена в активное приложение  
    
    Rows("2:3000").Select  
    Application.CutCopyMode = False  
    Selection.Delete Shift:=xlUp  
    Range("B2").Select  
End Sub

Но получившийся txt нужно сохранять вручную, а можно, чтоб автоматически создавались txt документы, например с названием 1.txt, 2.txt ... n.txt и в них автоматически происходила запись данных в столбец?

Последний раз редактировалось Evgeniy_Rindya; 16.09.2014 в 14:46.
Evgeniy_Rindya вне форума Ответить с цитированием
Старый 16.09.2014, 15:07   #9
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Нечто похожее мне также было нужно, решение Здесь
Может что либо подскажет!!!
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запись с буфера в файл Garic_ Помощь студентам 0 29.05.2010 17:47
txt файл pinch000 Общие вопросы C/C++ 0 04.04.2010 15:46
Записать содержимое буфера обмена в файл. sw3n Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 17.07.2009 02:39
Сохранение картинки из буфера обмена в файл. viter.alex Microsoft Office Word 1 21.02.2009 13:12
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01