【问题标题】:I have an Excel VBA macro that copies/paste and Excel formula to another file. The formula is this:我有一个 Excel VBA 宏,可以将 Excel 公式复制/粘贴到另一个文件中。公式是这样的:
【发布时间】:2017-08-29 13:53:18
【问题描述】:

问题的高级摘要:VBA 将双引号括在从 Excel 复制的字符串周围,这是我不想要的。我相信这段字符串 ($billtyp,) 导致 VBA 在它周围加上双引号。特别是末尾的逗号。我绝不是程序员。只是为了让我们办公室的一位女士的一些工作自动化。我非常感谢您的帮助!

要遵循的 VBA 代码。 Excel 值和公式如下:

What I want:
ADDLABEL -files zTestCo.cli -labelrec $billtyp,Test1 -log I:\LOG\29-08-2017-Add Label-zTestCo.txt

What I get:
"ADDLABEL -files zTestCo.cli -labelrec $billtyp,Test1 -log I:\LOG\29-08-2017-Add Label-zTestCo.txt"

Excel公式:

="ADDLABEL -files "&$C$1&".cli -labelrec $"&LOWER(B3)&","&C3&" -log I:\LOG\"&TEXT(NOW(),"dd-mm-yyyy")&"-Add Label-"&$C$1&".txt"

VBA 代码:

Sub SetCustomLabels()

Dim wbSource As Workbook
Dim wsSource As Worksheet
Dim wbDest As Workbook
Dim fName As String

'References
Set wbSource = ActiveWorkbook
Set wsSource = ActiveSheet
Set wbDest = Workbooks.Add

'Copy range on original sheet
wsSource.Range("J3:J50").Copy

'----------------------------
'Save in new workbook
wbDest.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False

'Get file name and location from user
fName = Application.GetSaveAsFilename(InitialFileName:="I:\Axys3\auto\addLabel.scr", FileFilter:="Script Files (*.scr), *.scr", Title:="Save As")
If fName = "" Then Exit Sub '//user cancelled

'Save new tab delimited file
wbDest.SaveAs fName, xlText

wbDest.Close SaveChanges:=True

End Sub

【问题讨论】:

  • 尝试把xlPasteValuesAndNumberFormats改成xlPasteFormulas
  • 我尝试了您的建议,但没有奏效。我也试过 xlPasteValues。感谢您的帮助!

标签: excel vba


【解决方案1】:

这个测试似乎可以在我的电脑上运行。更改另存为的格式:

来自

wbDest.SaveAs fName, xlText

wbDest.SaveAs fName, xlTextPrinter

【讨论】:

  • 成功了!!!太感谢了。我早上早起,试图弄清楚发生了什么。
【解决方案2】:

我有一个廉价而肮脏的解决方案 - 写下以下公式,它会完全如你所愿:

=MID(C10,2,LEN(C10)-2)

C10 中的值将从开始到结束被分割为 1 个字符。

【讨论】:

  • Excel 中不显示双引号。当 VBA 粘贴它们时,它会显示出来。只是奇怪。
【解决方案3】:

当您在 Excel 中使用剪贴板时,您会看到此行为。事实上,Excel 正在尽最大努力保存您的数据。如果字符串包含特殊字符(如制表符、回车符或换行符),它将自动将您复制的字符串封装在双引号中,这样当它粘贴到单元格时,字符串不会被拆分。

作为剪贴板的替代方案,您可以将“粘贴”范围的值设置为“复制”范围的值,例如:

wbDest.Worksheets(1).Range("A1:A47") = wsSource.Range("J3:J50").value2

这将代替您的 .copy.pastespecial 行。

如果您还必须带上数字格式,您可以保留现有的 .copy.pastespecial 行并将特殊粘贴更改为 xlPasteNumberFormats(我认为这是常量名称)

【讨论】:

  • 我试过这个,我得到 Range 类的 PasteSpecial 方法失败。我将 wbDest 范围调整为 A1:A48 (47 rows) 以匹配 WsSource (47 rows) ,但这没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多