VBA两层嵌套循环代码无法正常编译问题求助
VBA代码问题排查及修复方案
核心错误点
- Cells对象属性调用顺序错误:VBA中Cells的语法为
Cells(行索引, 列索引).属性,原代码将Value、Text、Formula属性放在了参数括号前,属于语法错误,直接触发编译报错。 - BDH公式拼接格式不符合要求:
- 日期参数直接拼接VBA日期变量时,未加双引号包裹,Excel会将日期识别为除法运算(例如2024/5/20会被计算为2024÷5÷20的数值),不符合BDH函数的参数规则。
- 若基金代码参数为字符串而非单元格引用,拼接时缺少双引号包裹,会导致公式将代码识别为自定义名称而非参数值;若需沿用你示例中引用第一行单元格的写法,需取单元格的绝对地址而非文本值。
- 可选优化:注释块中插入行的代码未指定工作表,取消注释后会操作当前激活的工作表,易出现数据错位。
修复后完整代码
Sub Test() Dim lastdate As Date Dim Raw As Worksheet Set Raw = Sheets("Raw") lastdate = Raw.Range("A3").Value ' 已修复指定工作表插入行 'If lastdate < Date And Date - lastdate < 51 Then ' Do Until lastdate = Date ' lastdate = lastdate + 1 ' If Weekday(lastdate, vbMonday) < 6 Then ' Raw.Rows(3).Insert ' Raw.Range("A3") = lastdate ' End If ' Loop 'End If ' 基础公式参考:=BDH($B$1, "PX_LAST", $A$13, $A$13) Dim vardate As Date Dim varfund As String Dim i As Integer '行号 Dim j As Integer '列号 For i = 1 To 50 For j = 1 To 100 ' 修复Cells属性顺序 vardate = Raw.Cells(i + 2, 1).Value ' 取第一行对应列的绝对引用地址,符合基础公式的单元格引用逻辑 varfund = Raw.Cells(1, j + 1).Address(RowAbsolute:=True, ColumnAbsolute:=True) ' 先判断单元格值为空再写入公式 If Raw.Cells(i + 2, j + 1).Value = "" And varfund <> "" Then ' 日期参数加双引号转义,符合BDH参数格式要求 Raw.Cells(i + 2, j + 1).Formula = "=BDH(" & varfund & ",""PX_LAST"", """ & Format(vardate, "yyyy-mm-dd") & """, """ & Format(vardate, "yyyy-mm-dd") & """)" End If Next j Next i End Sub
补充说明
如果你的基金代码是直接存储在第一行单元格的字符串(例如"123456.OF")而非需要引用单元格,只需将varfund的赋值语句替换为varfund = Raw.Cells(1, j + 1).Value,同时公式拼接处将"=BDH(" & varfund & ","修改为"=BDH(""" & varfund & ""","即可。
内容的提问来源于stack exchange,提问作者Hamizanz
相关产品推荐
相关产品推荐

