【问题标题】:How to a formula in a Text value cell to another workbook?如何将文本值单元格中的公式转换为另一个工作簿?
【发布时间】:2019-05-14 00:33:30
【问题描述】:

我有一个需要定期格式化的数据的数据库转储。我正在尝试为此制作一个宏,并且大约有 90% 在那里.... 数据转储在其他地方的 CSV 中。我的宏在工作簿 (Toolwb) 中,包含几个宏、一个查找表 (LookUpSheet) 和一个带有一些公式的表 (FormulaSheet)。

我遇到了一个问题,我从我的 FormulaSheet 复制的公式在我的 LookUpSheet 上使用VLOOKUP。由于我在不同的工作簿上运行代码,我需要复制公式并在其中引用 Toolwb ......据我所知,Toolwb 不喜欢在公式中指定 Toolwk 的公式。它只是将它们编辑出来,然后在 vba 将其复制到数据转储时中断。所以为了解决这个问题,我将单元格更改为文本类型而不是一般类型。完美的!复制得很好......但是......一旦它在数据转储单元格中,我似乎无法让公式“刷新”。我必须打开单元格并按 Enter 键才能刷新和评估数据。

我尝试在粘贴后更改单元格 General,然后将其设置为自动计算。我也试过公式刷新按钮。我错过了什么?

我很乐意从 vba 而不是单元格中粘贴此内容,但我很难在语法中获取引号。

=RIGHT(VLOOKUP(VALUE(CONCATENATE(B2,".",IF(LEN(C2)<2,CONCATENATE("0",C2),C2))),'[Toolwb]LookUpSheet'!$C$2:$D$4419,2,TRUE),LEN(VLOOKUP(VALUE(CONCATENATE(B2,".",IF(LEN(C2)<2,CONCATENATE("0",C2),C2))),'[Toolwb.xlsm]LookUpSheet'!$C$2:$D$4419,2,TRUE))-6)

【问题讨论】:

  • 你试过VBA newWorkbook.Sheets("Sheet1").Range("A2").Formula = formulaWorkbook.Sheets("FormulaSheet").Formula吗?
  • 这个!这完全有效,非常感谢。

标签: excel vba


【解决方案1】:
  • "." 可以替换为 CHAR(46)
  • CONCATENATE(0,C2)CONCATENATE("0",C2) 相同。结果仍然是带有前导零的字符串。
  • .Address(External:=True) 将生成一个完全合格的工作簿/工作表/范围引用作为地址字符串,包括任何必要的标点符号。
  • 我有点不清楚为什么需要指定 $C$2:$D$4419 而不是 $C:$D
  • IF(LEN(C2)&lt;2,CONCATENATE("0",C2),C2)RIGHT("00"&amp;C2, 2) 更简单

代码:

dim Toolwb as workbook, Toolws as worksheet, Toolrng as range

set Toolwb = workbooks("some workbook")
set Toolws = Toolwb.worksheets("LookUpSheet")
set Toolrng = Toolws.Range("C2:D4419")

Range("A1").Formula = _
  "=RIGHT(VLOOKUP(VALUE(CONCATENATE(B2, CHAR(46), RIGHT(""00""&C2, 2))), " & Toolrng.Address(External:=True) & ", 2, TRUE), LEN(VLOOKUP(VALUE(CONCATENATE(B2, CHAR(46), RIGHT(""00""&C2, 2))), " & Toolrng.Address(External:=True) & ", 2, TRUE))-6)"

我还没有测试过,但看起来不错。

您也可以尝试使用 REPLACE 进行这种修改,它会删除前 6 个字符并有效地将您的公式减半。

Range("A1").Formula = _
  "=REPLACE(VLOOKUP(VALUE(CONCATENATE(B2, CHAR(46), RIGHT(""00""&C2, 2))), " & Toolrng.Address(External:=True) & ", 2, TRUE), 1, 6, """")"

【讨论】:

    【解决方案2】:

    Ricardo A 在评论中为我解决了这个问题。

    "你试过VBA newWorkbook.Sheets("Sheet1").Range("A2").Formula = formulaWorkbook.Sheets("FormulaSheet").Formula"

    完美运行!

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 2017-08-18
      • 2020-09-05
      • 2022-09-27
      相关资源
      最近更新 更多