将数据从Excel复制到记事本

我目前正在复制数据表格Excel到记事本,并成功使用SendKeys excel VBAfunction。

但我正在寻找任何可以帮助我避免使用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复制到excel。

这可能是一个很好的工作:

  1. 将其复制到不同的工作表: wb.Sheets(2).Range("C2:C" & lRow).Copy
  2. 将此工作表另存为*.csv文件: 使用VB将Excel工作表保存为具有文件名+工作表名称的CSV文件
  3. 然后* .csv文件是一个记事本文件。 🙂

您可以使用文件系统对象写入文本文件:

 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

这是SendKeys一个替代过程:

  • 从工作表上的一系列单元格中获取值

  • 复制到剪贴板

  • 将剪贴板内容获取到一个string中

  • 将该string保存到临时文件

  • 打开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 
  'This macros may solve your problem Sub SaveMySheetAsTextFile() Sheets("Sheet1").Select ActiveWorkbook.SaveAs Filename:="C:\mynotepadfile.txt", FileFormat:=xlText End Sub 

有点太晚了,但是你可以将数据复制到剪贴板并粘贴为文本(testing和工作):

 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"