【问题标题】:Excel VBA Coincatenate Cells containing - & : [duplicate]Excel VBA Coincatenate 包含 - & 的单元格:[重复]
【发布时间】:2017-07-12 18:30:07
【问题描述】:

我正在修改一些代码,在汇总表和成本核算表之间添加链接。我正在尝试将以下公式编码到单元格 C1 中的每个 CS 表中。 =CONCATENATE(SUMMARY!L9," - ",SUMMARY!M9," : ",SUMMARY!N9),其中行将更改。我在语法上有问题。实现这一目标的最简单方法是什么?

下面的代码(几乎可以工作,但没有将所需的 " 放入公式中

Sub CSrefs()
'
' Adds links from Summary Sheet to CS Sheets: - Updated 29/09/15 PRS

Dim i As Integer, iOffset As Integer, intCount As Integer
Dim intCS1_Index As Integer, intCSCount As Integer, nonCSSheets As Integer
Dim sFormulaText As String, sDash As String, sDots As String

Application.ScreenUpdating = False

    intCount = ActiveWorkbook.Sheets.Count      'Find total number of workbook sheets
    intCS1_Index = Sheets("CS1").Index          'CS1 Sheet index
    intCSCount = intCount - (intCS1_Index - 1)  'Find total number of CS sheets
    nonCSSheets = intCount - intCSCount         'Find total number of Non-CS sheets
    sDash = " - "
    sDots = " : "

For i = 1 To intCSCount 'number of sheets

    iOffset = i + 8    'Start of Summary Sheet CS Rows
        With Sheets("CS" & i)
            sFormulaText = "=CONCATENATE(SUMMARY!L" & iOffset & "," & sDash & ",SUMMARY!M" & iOffset & "," & sDots & ",SUMMARY!N" & iOffset & ")"
'            .Range("B1").Formula = sFormulaText
            .Range("A1").Hyperlinks.Add Anchor:=.Range("A1"), Address:="", SubAddress:="Summary!D" & iOffset, TextToDisplay:="SUMMARY" 'Go to Summary Sheet hyperlink
            .Range("A1").Font.Size = 8
            .Range("G1").Formula = "=SUMMARY!O" & iOffset ' UOM
            .Range("E1").Formula = "=SUMMARY!P" & iOffset 'SOR Qty
            .Range("I1").Formula = "=SUMMARY!R" & iOffset 'Cable Average
'            .Range("H10").Formula = "=SUMMARY!C" & iOffset 'Sage Code
            .Range("N17").Formula = "=SUMMARY!AC" & iOffset 'Materials GP%
            .Range("P17").Formula = "=SUMMARY!AP" & iOffset 'Materials MCD GP%
            .Range("N42").Formula = "=SUMMARY!AD" & iOffset 'Misc GP%
            .Range("P42").Formula = "=SUMMARY!AP" & iOffset 'Misc MCD GP%
            .Range("N67").Formula = "=SUMMARY!AE" & iOffset 'Labour GP
            .Range("P67").Formula = "=SUMMARY!AP" & iOffset 'Labour MCD GP%
            .Range("N92").Formula = "=SUMMARY!AF" & iOffset '3rd Party GP%
            .Range("P92").Formula = "=SUMMARY!AP" & iOffset '3rd Party MCD GP%
            .Range("N117").Formula = "=SUMMARY!AG" & iOffset 'PM&PL GP%
            .Range("P117").Formula = "=SUMMARY!AP" & iOffset 'PM&PL MCD GP%
            .Range("N142").Formula = "=SUMMARY!AH" & iOffset 'Bond GP%
            .Range("P142").Formula = "=SUMMARY!AP" & iOffset 'Bond MCD GP%
            .Range("N152").Formula = "=SUMMARY!AG" & iOffset 'Support GP%
            .Range("P152").Formula = "=SUMMARY!AP" & iOffset 'Support MCD GP%
            .Range("N177").Formula = "=SUMMARY!AH" & iOffset 'Day Works GP%
            .Range("P177").Formula = "=SUMMARY!AP" & iOffset 'Day Works MCD GP%
        End With

Next i

    Sheets("Summary").Select
    Application.ScreenUpdating = True

End Sub

【问题讨论】:

  • 哪一行是有问题的? sFormulaText 分配?尽量减少您在帖子中放置的代码量通常是一个好主意。旁注,您可能应该从环境设置中获取 list separator 字符,而不是对其进行硬编码 - 如果 list separator 是,硬编码的逗号会使您的代码失败曾经在运行此宏的机器上更改为逗号以外的任何内容。
  • 谢谢@Mat's Mug。这是 sFormulaText 赋值。我在哪里可以找到您的原始答案?
  • 问题顶部有一个链接。 JiheL 的回答也是正确的,而不是他的代码(请参阅我的评论)。
  • 谢谢@Mats Mug。出现编译错误的复制和粘贴 - 第一次出现 ""-""" 时预期语句结束,
  • @Paul_S 我只是再次更改并测试了它!现在工作

标签: vba excel


【解决方案1】:

在双引号内使用两次双引号,使一个双引号出现

sFormulaText = "=CONCATENATE(SUMMARY!L" & iOffset & ",""-"",SUMMARY!M" & iOffset & ", "":"",SUMMARY!N" & iOffset & ")"

不确定双引号和破折号/点之间是否需要空格,但您可以自己添加:)

【讨论】:

  • 谢谢@Jihel。我试过了,但它出现了类型不匹配错误
  • 引号不匹配。应该是sFormulaText = "=CONCATENATE(SUMMARY!L" & iOffset & ","""-""","SUMMARY!M" & iOffset & ", """:""","SUMMARY!N" & iOffset & ")"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
相关资源
最近更新 更多