将数据从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。
这可能是一个很好的工作:
- 将其复制到不同的工作表:
wb.Sheets(2).Range("C2:C" & lRow).Copy
- 将此工作表另存为
*.csv
文件: 使用VB将Excel工作表保存为具有文件名+工作表名称的CSV文件 - 然后* .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"