Excel 我一直给变量赋值,但它保持为空
我目前正在编写一个代码,该代码应该为某个变量指定一个值,并打开一个名为该变量的文件。 但是,每次调试代码时,VBA都会警告我,即使文件已成功打开,也不会为变量指定任何值。 以下是我到目前为止的情况: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
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