在VBA中将变量写入单元格
我需要遵循以下协议:在VBA中将变量写入单元格,vba,excel,excel-2013,Vba,Excel,Excel 2013,我需要遵循以下协议: 我正在扫描Sheet1,并为该工作表上的每个唯一empName选择单个empName工作表。 在单个empName工作表上,捕获O列最后一个单元格中的值 将值存储在变量tper中(它是一个百分比) 选择表1 将标题写入列N1 选择N列中的第一个空单元格(不包括标题) 将tper的值写入N列中的选定单元格 重复此操作,直到已从Sheet1处理完所有empNames 我的语法似乎执行正常,直到这一行lr1=Cells(Rows.Count,13).End(xlUp).Row抛出
我正在扫描Sheet1,并为该工作表上的每个唯一empName选择单个empName工作表。
在单个empName工作表上,捕获O列最后一个单元格中的值
将值存储在变量tper中(它是一个百分比)
选择表1
将标题写入列N1
选择N列中的第一个空单元格(不包括标题)
将tper的值写入N列中的选定单元格
重复此操作,直到已从Sheet1处理完所有empNames
我的语法似乎执行正常,直到这一行
lr1=Cells(Rows.Count,13).End(xlUp).Row
抛出错误
错误无效限定符
为了遵循上述协议,我需要重写什么
Function Test()
Dim lr As Long, i As Long, lr1 As Long, i1 As Long
Dim WS As Worksheet, empName As String, tper As Variant
Set WS = ActiveSheet
lr = Cells(Rows.Count, 2).End(xlUp).Row
For i = 2 To lr
empName = WS.Cells(i, 2).Value
Sheets(empName).Select
tper = "=LOOKUP(2,1/(O:O<>""),O:O)"
Sheets("Sheet1").Select
Range("N1").FormulaR1C1 = "Percent"
lr1 = Cells(Rows.Count, 13).End(xlUp).Row
For i1 = 2 To lr1
lr1.Cells.FormulaR1C1 = tper
Next i1
Next i
End Function
功能测试()
暗lr长,i长,lr1长,i1长
Dim WS作为工作表,empName作为字符串,tper作为变量
设置WS=ActiveSheet
lr=单元格(Rows.Count,2).结束(xlUp).行
对于i=2至lr
empName=WS.Cells(i,2).Value
图纸(名称)。选择
tper=“=查找(2,1/(O:O)”,O:O)”
图纸(“图纸1”)。选择
范围(“N1”)。公式1c1=“百分比”
lr1=单元格(Rows.Count,13).结束(xlUp).行
对于i1=2到lr1
lr1.Cells.FormulaR1C1=tper
下一个i1
接下来我
端函数
我已尝试修改您的代码。看看这是否有效。由于您希望遍历Sheet1中的所有员工(第一个for循环负责),因此我去掉了第二个循环
Sub Test()
Dim empName As String, tper As Variant
Dim WS As Worksheet, empSheet As Worksheet
Set WS = Sheets("Sheet1")
Dim lr As Long
lr = WS.Cells(Rows.Count, 2).End(xlUp).Row
Dim i As Long
For i = 2 To lr
'scanning Sheet1 and for each unique empName
empName = WS.Cells(i, 2).Value
'selecting the individual empName worksheet
'just set to variable. no need to select
Set empSheet = Sheets(empName)
'on the individual empName worksheet capturing the value in the last cell in column O
'Storing the value in variable tper (it's a percentage)
tper = empSheet.Range("O" & Rows.Count).End(xlUp).Value
'Selecting Sheet1
'Writing a header to column N1
WS.Range("N1").FormulaR1C1 = "Percent"
'Selecting the 1st empty cell in column N (excluding the header)
WS.Range("N" & Rows.Count).End(xlUp).Offset(1, 0) = tper
'Repeat until all empNames have been processed from Sheet1
' next i will reapeat for the next employee in sheet 1
Next i
End Sub
你还提到
对于每个唯一的名称
代码没有检查。您将
lr1声明为Long
,因此lr1.Cell.FormulaR1C1=tper
是错误的!您需要完全限定对单元格
和行
的所有调用。您也不需要。选择循环中的任何内容。您只需在empName
和“Sheet1”
之间来回切换,而无需使用empName
选项。-对于这个问题,它比任何单一答案都更有帮助。我还将为Sheet1声明一个变量,并分配set Sheet1=Sheets(“Sheet1”)
。这样,您就可以在需要时引用该工作表,而无需选择该工作表。这基本上就像你点击表单一样1tab@Andy-我该如何补救?我现在看到了这个问题,但没有关于如何解决的线索。@NathanFisher-这样做吗?将图纸1标注为工作表集sheet1=工作表(“图纸1”)集ws=活动图纸sheet1。激活