Excel 我一直给变量赋值,但它保持为空

Excel 我一直给变量赋值,但它保持为空,excel,vba,Excel,Vba,我目前正在编写一个代码,该代码应该为某个变量指定一个值,并打开一个名为该变量的文件。 但是,每次调试代码时,VBA都会警告我,即使文件已成功打开,也不会为变量指定任何值。 以下是我到目前为止的情况: Sub StressTest() Dim index As Integer Dim dateColumn As Integer Dim portfolioName As Variant Dim portfolioDate As String Dim ParametricVar As Double

我目前正在编写一个代码,该代码应该为某个变量指定一个值,并打开一个名为该变量的文件。 但是,每次调试代码时,VBA都会警告我,即使文件已成功打开,也不会为变量指定任何值。 以下是我到目前为止的情况:

Sub StressTest()

Dim index As Integer
Dim dateColumn As Integer
Dim portfolioName As Variant
Dim portfolioDate As String
Dim ParametricVar As Double
Dim AuM As Double


portfolioDate = InputBox("Please enter date under the following form : YYYY-MM", "Date at the time of Stress Test", "Type Here")


For index = 3 To 32

portfolioName = ActiveSheet.Range("A" & index & "").Value

'Error happens on this line vvv
Workbooks.Open "G:\Risk\Risk Reports\VaR-Stress test\" & portfolioDate & "\" & portfolioName & ""

ParametricVar = Workbooks("" & portfolioName & "").Worksheets("VaR Comparison").Range("B19")

AuM = Workbooks("" & portfolioName & "").Worksheets("Holdings - Main View").Range("E11")




Sheet1.Cells(index, dateColumn).Value = ParametricVar / AuM
Sheet1.Cells(index, dateColumn + 2).Value = ParametricVar / AuM

Sheet1.Cells(index, dateColumn + 5).Value = Application.Min(Workbooks("" & portfolioName & "").Worksheets("VaR Comparison").Range("P11:AA11"))
Sheet1.Cells(index, dateColumn + 6).Value = Application.Max(Workbooks("" & portfolioName & "").Worksheets("VaR Comparison").Range("J16:J1000"))


Next index




End Sub




您必须打开
选项Explicit
设置,如所述

在本例中,您会注意到,虽然使用了变量
Sheet1
,但它没有声明。您需要:

  • 声明此变量
  • 或者使用
    ActiveSheet
    工作表(“Sheet1”)
    代替
    Sheet1
  • 或者在您的语言中使用
    Sheet1
    代码名参考,例如俄语:


如果使用突出显示的
1
而不是
Sheet1
,则必须打开
选项Explicit
设置,如所述

在本例中,您会注意到,虽然使用了变量
Sheet1
,但它没有声明。您需要:

  • 声明此变量
  • 或者使用
    ActiveSheet
    工作表(“Sheet1”)
    代替
    Sheet1
  • 或者在您的语言中使用
    Sheet1
    代码名参考,例如俄语:


如果使用突出显示的
1
而不是
Sheet1
将您的代码转换为此,并研究立即窗口(VBA编辑器中的
Ctrl
+
G
),查看生成的文件路径是否正确

Sub-StressTest()
将索引设置为整数
将dateColumn设置为整数
作为变体的暗淡portfolioName
像弦一样的小叶
Dim ParameterVar作为双参数
暗奥姆双倍
将strPath设置为字符串
portfolioDate=InputBox(“请按以下格式输入日期:YYYY-MM”,“压力测试时的日期”)
Debug.Print“InputBox提供的值为:”&portfolioDate
对于索引=3到32
portfolioName=ActiveSheet.Range(“A”和index&“).Value
Debug.Print“ActiveSheet Name is:”&ActiveSheet.Name
Debug.Print“portfolioName值为:”&portfolioName
将strFilePath设置为字符串
strPath=“G:\Risk\Risk Reports\VaR Stress test\”&portfolioDate&“\”&portfolioName&“
调试。打印strPath
工作簿。打开strPath
ParametricVar=工作簿(“&portfolioName&”)。工作表(“VaR比较”)。范围(“B19”)
AuM=工作簿(“&portfolioName&”)。工作表(“控股-主视图”)。范围(“E11”)
Sheet1.单元格(索引,日期列)。值=参数变量/AuM
Sheet1.单元格(索引,dateColumn+2).值=参数值/AuM
Sheet1.单元格(索引,dateColumn+5).值=Application.Min(工作簿(“&portfolioName&”).工作表(“VaR比较”).范围(“P11:AA11”))
Sheet1.单元格(索引,dateColumn+6).值=Application.Max(工作簿(“&portfolioName&”).工作表(“VaR比较”).范围(“J16:J1000”))
下一个索引

将您的代码转换为该格式,然后研究立即窗口(VBA编辑器中的
Ctrl
+
G
),查看生成的文件路径是否正确

Sub-StressTest()
将索引设置为整数
将dateColumn设置为整数
作为变体的暗淡portfolioName
像弦一样的小叶
Dim ParameterVar作为双参数
暗奥姆双倍
将strPath设置为字符串
portfolioDate=InputBox(“请按以下格式输入日期:YYYY-MM”,“压力测试时的日期”)
Debug.Print“InputBox提供的值为:”&portfolioDate
对于索引=3到32
portfolioName=ActiveSheet.Range(“A”和index&“).Value
Debug.Print“ActiveSheet Name is:”&ActiveSheet.Name
Debug.Print“portfolioName值为:”&portfolioName
将strFilePath设置为字符串
strPath=“G:\Risk\Risk Reports\VaR Stress test\”&portfolioDate&“\”&portfolioName&“
调试。打印strPath
工作簿。打开strPath
ParametricVar=工作簿(“&portfolioName&”)。工作表(“VaR比较”)。范围(“B19”)
AuM=工作簿(“&portfolioName&”)。工作表(“控股-主视图”)。范围(“E11”)
Sheet1.单元格(索引,日期列)。值=参数变量/AuM
Sheet1.单元格(索引,dateColumn+2).值=参数值/AuM
Sheet1.单元格(索引,dateColumn+5).值=Application.Min(工作簿(“&portfolioName&”).工作表(“VaR比较”).范围(“P11:AA11”))
Sheet1.单元格(索引,dateColumn+6).值=Application.Max(工作簿(“&portfolioName&”).工作表(“VaR比较”).范围(“J16:J1000”))
下一个索引

您在哪一行收到错误消息?您是否已打开
选项显式
?您可以设置
工作簿的结果。打开
工作簿变量,并使用该变量简化后续代码。错误显示在第行:工作簿。打开“G:\Risk\Risk Reports\VaR Stress test\”&portfolioDate&“\”&portfolioName&“在哪一行您会收到错误消息?”?您是否已打开
选项显式
?您可以设置
工作簿的结果。将
打开到工作簿变量,并使用该变量简化后续代码。错误显示在以下行:工作簿。打开“G:\Risk\Risk Reports\VaR Stress test\”&portfolioDate&“\”&portfolioName&“请参阅,特别是数字3。是,我明白了。我有MS Excel的本地化版本,所以我的代码名是另一种语言,即使不推荐使用,
Sheet1。
不太可能是问题所在。首先,OP明确地引用了他们其中一个变量的值,而他们根本没有把
Sheet1
看作一个变量(因为它实际上不是)
Option Explicit
是一个很好的建议。他可能有MS Excel的本地化版本,就像我的情况一样,因此这将是不可阻挡的。请查看引发错误的行的最新版本。它与
Sheet1
无关。请看,具体数字3。是的,我明白了。我有MS Excel的本地化版本,所以我的代码名是另一种语言,即使不推荐使用,
Sheet1。
不太可能是问题所在。首先,OP是exp