在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。激活