2017-02-14 21 views
2

В настоящее время я копирую форму данных excel в блокнот и успешно использовал функцию excel VBA SendKeys.Копирование данных из Excel в блокнот

Но я ищу любую работу, которая может помочь мне избежать использования sendkeys.

У меня есть этот код, как в данный момент: только

sub test() 

    dim wb as Workbook 
    set wb = "C:\Documents\test.xlsx" 
    wb.Sheets(2).Range("C2:C" & lRow).Copy 
    myApp = Shell("Notepad.exe", vbNormalFocus) 
    SendKeys "^v" 
    Application.CutCopyMode = False 
    wb.Sheets(2).Range("C2:C" & lRow).NumberFormat = "@" 
end sub 

Это одна копия данных из Excel в блокноте, но после того, как делать некоторые исправления в файл Excel, я хочу, чтобы данные копируются в Блокноте скопируйте снова, чтобы преуспеть, начиная с C2.

+2

Есть ли конкретная причина, вы используете блокнота - будет ли текстовый файл можно использовать где-то еще? Если вы просто ищете где-то «хранить» некоторые данные, а вы делаете что-то другое, тогда вы можете лучше помещать их в массив. –

+0

Вы пытаетесь скопировать значения без формул? Я не могу придумать никаких веских оснований для вставки и копирования из «Блокнота». – Slai

+0

@Slai Да, я просто копирую значения и снова вставляю их на лист excel. – ramedju

ответ

2

Вы можете использовать объект файловой системы для записи в текстовый файл:

Dim fso as Object 
Set fso = CreateObject("Scripting.FileSystemObject") 

Dim oFile as Object 
Set oFile = FSO.CreateTextFile(strPath) 

oFile.WriteLine "test" 

oFile.Close 
Set fso = Nothing 
Set oFile = Nothing 

Для получения дополнительной информации смотрите здесь: https://technet.microsoft.com/en-us/library/ee198716.aspx

3

Это альтернативный процесс SendKeys:

  • получает значения из диапазона ячеек на листе

  • копирует в буфер обмена

  • получает содержимое буфера обмена в строку

  • сохраняет эту строку в временный файл

  • открывает Notepad.exe с содержанием временного файла

Код:

Option Explicit 

Sub OpenNotepadWithTempFileWithClipboardContent() 

    Dim rngData As Range 
    Dim strData As String 
    Dim strTempFile As String 

    ' copy some range values 
    Set rngData = Sheet3.Range("B1:B5") 
    rngData.Copy 

    ' get the clipboard data 
    ' magic code for is for early binding to MSForms.DataObject 
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 
     .GetFromClipBoard 
     strData = .GetText 
    End With 

    ' write to temp file 
    strTempFile = "D:\temp.txt" 
    With CreateObject("Scripting.FileSystemObject") 
     ' true to overwrite existing temp file 
     .CreateTextFile(strTempFile, True).Write strData 
    End With 

    ' open notepad with tempfile 
    Shell "cmd /c ""notepad.exe """ & strTempFile & """", vbHide 

End Sub 
1
'This macros may solve your problem 
    Sub SaveMySheetAsTextFile() 
     Sheets("Sheet1").Select 
     ActiveWorkbook.SaveAs Filename:="C:\mynotepadfile.txt", FileFormat:=xlText 
    End Sub 
2

Немного слишком поздно, но вы можете скопировать данные в буфер обмена и вставить его как текст (проверено и работает):

Dim r As Range 
Set r = wb.Sheets(2).Range("C2:C" & lRow) 
r.Copy 

With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 
    .GetFromClipboard 
    Application.CutCopyMode = False 
    .PutInClipboard 
End With 

r.Select 
r.NumberFormat = "@" 
r.Worksheet.PasteSpecial "Text" 
+0

Спасибо. Вот что я сделал :) – ramedju

Смежные вопросы