Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于FOR循环索引的单元引用_Excel_Vba - Fatal编程技术网

Excel 基于FOR循环索引的单元引用

Excel 基于FOR循环索引的单元引用,excel,vba,Excel,Vba,以下是我的一些代码: Dim wbX As Workbook Dim wbY As Workbook Set wbX = Application.Workbooks.Open("C:\Converter\aaa.xls") Set wbY = Application.Workbooks.Open("C:\Converter\bbb.xlsx") For i = 1 To wbX.Sheets.Count wbY.Sheets(1).Activate Range("Y" & i + 2)

以下是我的一些代码:

Dim wbX As Workbook
Dim wbY As Workbook
Set wbX = Application.Workbooks.Open("C:\Converter\aaa.xls")
Set wbY = Application.Workbooks.Open("C:\Converter\bbb.xlsx")

For i = 1 To wbX.Sheets.Count
wbY.Sheets(1).Activate
Range("Y" & i + 2).Select
ActiveSheet.Range("Y" & i + 2).Formula = "=RIGHT(("S" & i + 2); 4)"

问题是(“S”&i+2)未被识别为单元格-VBA会抛出语法错误。

此示例可能有助于您:

Option Explicit

Sub test()
    Dim rngC As Range
    For Each rngC In Range("C2:C100")
        rngC.Offset(0, 4) = Right(rngC, 4)
    Next
End Sub
表达式
“Y”&i+2
无法生成有效的单元格引用,因为您将数字连接到字符串。必须将数值表达式转换为字符串:

"Y" & Str(i + 2)
从您的评论中我了解到,作业应写为:

"=LEFT(S" & Trim(Str(i + 2)) & "; 4)"    ' yields e.g.: =LEFT(S3; 4)

(LEFT函数从字符串中获取第一个字符。这假设您引用的单元格包含字符串,或者VB首先将值转换为字符串。在这里,您必须使用
Trim(Str(i+2))
,因为您正在构造一个字符串作为公式放在单元格中。)

不幸的是,不,我是一个初学者,所以我希望有人能修改一下我的代码。(“Y”&I+2)被认为很好-VBA选择了正确的单元格。当我在右函数中插入(“S”&I+2)时,问题出现了。然后(“S”&i+2)不再被识别为单元。仅供参考,正确函数的正确语法是“=RIGHT(你的单元格;4)”,我认为你没有正确理解这一点。对于i=1到wbX.Sheets.Count,计算文件(“C:\Converter\aaa.xls”)中工作表的数量。(“Y”&i+2)根据wbX+2中的图纸数量选择单元格Y+编号。如果wbX中的张数等于10(“Y”&i+2)部分将选择Y3,然后选择Y4,然后选择Y5。。。一直到Y13。我想要Y3,Y4,Y5的最后四个字符。。。出现在S3、S4、S5等中。这里的问题是我不希望这是一个公式——它必须是一个值。仍然没有。我复制了你的代码,但仍然得到一个错误:(“一个错误”听起来有点模糊。什么错误?你检查了结果公式了吗?应用程序定义的或对象定义的错误。ActiveSheet.Range(“Y”&I+2)。公式=“=RIGHT(S”&Trim(Str(I+2))&”;4)行高亮显示。我没有得到公式。VBA在将任何内容插入Y单元格之前停止。