声明要在Excel中使用但在外部定义的变量

时间:2017-11-03 20:11:13

标签: excel

我在一个工作簿中有几个excel函数,它们重复使用一个值。我经常需要更改值,因此我计划用变量:MyVal替换该值的所有实例,以便我可以在下次更改MyVal的值,而不必遍历该值的所有实例。我知道我可以通过使用该值命名一个单元格来创建一个变量。

但是,我希望让其他人能够更改MyVal 的值,而无需授予他们访问Excel工作表的权限。有什么办法可以在外部文件中定义MyVal吗? (我希望在.properties文件中这样做,因为这是一个更大的Java项目的一部分)。到目前为止我找到的所有解决方案都只讨论了在表格中定义变量。

1 个答案:

答案 0 :(得分:1)

您不能在单元格公式中引用外部存储的值(在任何有意义的意义上)。但是......您可以从文本文件中选择workbook_open事件的值,然后将单元格设置为您找到的值。

这看起来像是:

  1. 创建一个类似ini的文件,该值将由用户

    更新

    C:\的my.ini:

    someVar=10
     myValue=9.82
     someothervar=pete

  2. 在锁定的Excel工作表中,您的公式可以引用一些命名范围(我们称之为myValue,它将引用Sheet1!A1)。

  3. 您可以创建一个将在Workbook Open上运行的VBA子例程,以获取存储在您的ini文件中的值并填充Sheet!A1单元格(或引用命名范围)值,以便公式引用命名范围“myValue”将具有新的价值。
  4. 步骤3看起来像

    Private Sub Workbook_Open()
    
        Dim fileName As String
        Dim textRow As String
        Dim fileNo As Integer
        Dim param As String
    
        fileName = "C:\my.ini"
        fileNo = FreeFile 'Get first free file number
    
        Open fileName For Input As #fileNo
        Do While Not EOF(fileNo)
           Line Input #fileNo, textRow
    
           'Check to see if it's the value we are looking for
           'assuming it's in the file as
           'myValue=9.82
           param = Split(textRow, "=")(0)
           myValue = Split(textRow, "=")(1)
           If param = "myValue" Then
                Range("myValue").Value2 = myValue
           End If
        Loop
        Close #fileNo
    
    
    End Sub
    

    该子程序必须进入工作簿的代码页(双击VBA项目窗格中的“ThisWorkbook”)

    或者,也许有一些Java库可以弹出一个工作簿并更新一个单元格中的值,然后在那里完成所有代码(不确定它是多么可行)。