从单元格读取常量

时间:2014-09-24 08:13:46

标签: excel vba

我正在编写一个VBA代码来读取一些文本文件,我希望直接从excel中的单元格中读取文件名。 我使用了以下代码

 Sub ImportFile()
 Const textFilePath As String = "C:\Desktop\"
 Const textFileName As String = "File1.txt"
 Const newTextFileName As String = "NewFile1.txt"

我想要像

这样的东西
Sub ImportFile()
Const textFilePath As String = Range("A2").value
Const textFileName As String = Range("A3").value
Const newTextFileName As String = Range("A4").value

我尝试了不同的组合,但它似乎不喜欢为单元格值赋值,任何解决方法?

由于

P.S我不知道如何在这个网站上以正确的方式编写代码,我试着在代码行之前添加4个空格,但似乎没有用,不知道为什么?

2 个答案:

答案 0 :(得分:0)

我认为您无法从范围中分配常量,因为范围值可能会在代码执行期间发生变化。我在这段代码中尝试了你的声明:

Option Explicit

Sub ImportFile()
Const textFilePath As String = Range("A2").Value
Const textFileName As String = Range("A3").Value
Const newTextFileName As String = Range("A4").Value
End Sub

在IDE中的Debug..Compile上我得到了这个错误

enter image description here

如果您将代码更改为

Option Explicit

Sub ImportFile()
Dim textFilePath As String
Dim textFileName As String
Dim newTextFileName As String
textFilePath = Range("A2").Value
textFileName = Range("A3").Value
newTextFileName = Range("A4").Value
End Sub

你会发现它编译好了。

除非您正在谈论"通用(物理)常数"例如PI,c或G,常量很少是常数。我发现有一个命名范围,可能在隐藏的工作表上,并填充该命名范围的变量,这使得用户很容易维护,几乎没有VBA经验。当然,你需要跟踪那些"常数"维持他们,但至少你不需要VBA经验。

答案 1 :(得分:0)

你不能在vba中这样做,因为你的常量变量可能会改变。但是,我认为您希望声明并初始化路径变量一次,以便稍后如果您决定更改它们,则可以在初始化变量的同一行中的一个位置执行此操作。所以,如果我是你,我会使用像

这样的东西
       Option Explicit

       sub macro()

       Dim FILEPATH As String: FILEPATH = Range("A1").Value

       MsgBox FILEPATH

       end sub