excel VBA|将定义的名称与公式一起使用

of1yzvn4  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(117)

我是新来的。
我尝试在函数中使用已定义名称的值。下面的代码没有抛出错误,但它显示我的变量不包含值,而是表达式,如图所示。

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim segunda As String
  3. segunda = ActiveWorkbook.Names("Week5_FirstDay").RefersTo
  4. MsgBox segunda
  5. End Sub

字符串


的数据
我试图将segunda定义为一个range对象,结果抛出了下面的错误。考虑到Week5_FirstDay是如何定义的,我认为这是有道理的。

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim segunda As Range
  3. segunda = ActiveWorkbook.Names("Week5_FirstDay").RefersToRange
  4. MsgBox segunda.Value
  5. End Sub



我也尝试使用Evaluate函数,但没有成功。

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim segunda As String
  3. segunda = ActiveWorkbook.Names("Week5_FirstDay").RefersTo
  4. MsgBox Evaluate(segunda)
  5. End Sub



我也读过Eval方法,但Excel不承认它。
这就是我在工作簿中定义名称的方式。

以下是名称Week1_FirstDay的计算方法:

  1. DATE(ano;MONTH(DATEVALUE(mes&"1"));8-WEEKDAY(DATE(ano;MONTH(DATEVALUE(mes&"1"));1);12))


Ano和Mes对应于在两个单元格中定义的年和月。

nfeuvbwi

nfeuvbwi1#

  • RefersTo返回一个字符串,Evaluate可以很好地处理它
  • RefersToRange返回一个范围对象,如果它是可用的。如果你试图使用ActiveWorkbook.Names("Week5_FirstDay").RefersToRange,它会引发错误1004,因为它是一个公式而不是一个范围。
  1. Option Explicit
  2. Sub demo()
  3. Dim segunda As String
  4. Dim rngseg As Range
  5. segunda = ActiveWorkbook.Names("Week5_FirstDay").RefersTo
  6. Debug.Print segunda
  7. Debug.Print Format(Application.Evaluate(segunda), "yyyy/mm/dd")
  8. Set rngseg = ActiveWorkbook.Names("Week4_FirstDay").RefersToRange
  9. Debug.Print rngseg.Address
  10. End Sub

字符串
输出

  1. =Week4_FirstDay+7
  2. 2023/11/11
  3. $A$1


的数据
复制OP的公式和定义的名称,Evaluate工作良好


展开查看全部

相关问题