2017-01-30 81 views
3

我需要一些帮助来创建一个批处理文件,并从excel中粘贴一定范围到它,但保持文本,因为它显示在Excel中。
为例:(这是我想粘贴到一个批处理文件中的单元格的内容)从excel粘贴到记事本单元格内容?

"pushd N:\contracte\CONTRACTE NEVOI PERSONALE\Contracte nevoi personale 102501N - 105000N\ 
for /f ""delims="" %%a in ('dir /b /s ^| find ""104020""') do (
cd .. 
xcopy ""%%a"" ""C:\Users\agrigoriu\Desktop\COPIERE\"" /E /D /Y) 
@ECHO ---" 

问题1:所有内容将这样被显示在一个单一的线路: pushd N:\ contracte \ CONTRACTE NEVOI PERSONALE \ Contracte nevoi personale 102501N - 105000N \ for/f“”delims =“”%% a in('dir/b/s^| find“”104020“”')do cd .. xcopy“”%% a“”“”C:\ Users \ agrigoriu \ Desktop \ COPIERE \“”/ E/D/Y)@ECHO ---“

问题2:它加倍每逗号有在原文

这是我到目前为止的代码并将其仅粘贴从范围的信息到一个记事本(与上文所述的问题):

Sub test() 
    'The range that contains the values 
    Range("D:D").Copy 
    'Start Notepad And let it recieve focus 
    Shell "notepad.exe", vbNormalFocus 
    'Send the keys CTRL+V To Notepad (i.e the window that has focus) 
    SendKeys "^V" 
End Sub 

想法:一个“解决方案”将首先粘贴到Word中,然后再次复制并粘贴到记事本中,但这必须适用于所有标准计算机,并且我发现没有多少人在vba上使用Word应用程序默认开启。

回答

2

最好是将文本写入文件,然后在记事本中打开该文件,这样您就可以控制格式,而且不会丢弃用户在剪贴板中可能存在的任何内容。

Dim hF As Integer: hF = FreeFile() 
'// get temp file name 
Dim path As String: path = Environ$("TEMP") & "\DUMP.TXT" 

Open path For Output As #hF 
    Print #hF, Replace$(Range("D1").Text, vbLf, vbCrLf) 
Close #hF 

Shell "NOTEPAD.EXE " & path, vbNormalFocus 

(这将替换\ n存在与\ r \ n中的电池是出现在一行一切事业内的新线)

+0

谢谢,但我得到错误55:文件已经打开。 (我不明白,什么文件已经打开?!)。我用dump.txt制作了一个记事本... – MisterA

+0

关闭那些打开文件的代码,代码会自动创建它。 –

+0

我没有看到任何打开的东西(还查看进程列表以结束任务)。 – MisterA

0

基于亚历克斯ķ答案,这与一系列:

Sub test() 

Dim hF As Integer: hF = FreeFile() 
Dim output As String 

'// get temp file name 
Dim path As String: path = Environ$("TEMP") & "\DUMP.TXT" 
    Range("D2:D2000").Select 
Open path For Output As #hF 
    For Each c In Selection 
     Print #hF, Replace(c.Value, vbLf, vbCrLf) 
     Next c 
Close #hF 

Shell "NOTEPAD.EXE " & path, vbNormalFocus 
End Sub 
相关问题