Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 从基于选定单元格的范围中返回下一个单元格值_Excel_Vba - Fatal编程技术网

Excel 从基于选定单元格的范围中返回下一个单元格值

Excel 从基于选定单元格的范围中返回下一个单元格值,excel,vba,Excel,Vba,我有多张工作表,每张工作表都包含技能细节 我相信这将为您提供一切,只需对图纸编号和预期报告单元格值进行少量编辑 工作表和工作表之间存在差异。表格还包括图表。因此,为了您的目的,请使用工作表。此外,您还必须跳过报告和管理工作表,以便在循环中进行评估。如果您的报表和管理员工作表是(1)和(2),则从3开始循环。如果循环也会评估这些工作表,并且如果在这些工作表中的查找范围(rng)中找到skillname,则这些工作表中的值也会显示在报告中 Private Sub BtnReport_Click()

我有多张工作表,每张工作表都包含技能细节


我相信这将为您提供一切,只需对图纸编号和预期报告单元格值进行少量编辑

工作表和工作表之间存在差异。表格还包括图表。因此,为了您的目的,请使用工作表。此外,您还必须跳过报告和管理工作表,以便在循环中进行评估。如果您的报表和管理员工作表是(1)和(2),则从3开始循环。如果循环也会评估这些工作表,并且如果在这些工作表中的查找范围(rng)中找到skillname,则这些工作表中的值也会显示在报告中

Private Sub BtnReport_Click()
Dim SkillName As String
Dim SkillRng As Range
Dim rng As Range

SkillName = ActiveWorkbook.Worksheets("Admin").Range("L4")

If SkillName = "" Then
MsgBox "Select a skill name"
Exit Sub
End If

Sheets("Report").Select
Sheets("Report").Cells.ClearContents
Sheets("Report").Cells(1, 1) = "Skill Name"
Sheets("Report").Cells(1, 2) = "Resource"

For i = 1 To Worksheets.Count
Set rng = Worksheets(i).Range("B14:C100")
Set SkillRng = rng.Find(What:=SkillName)
k = Sheets("Report").Range("A1").CurrentRegion.Rows.Count + 1
If Not SkillRng Is Nothing Then
Sheets("Report").Cells(k, 1) = SkillName
Sheets("Report").Cells(k, 2) = SkillRng.Value
Sheets("Report").Cells(k, 3) = SkillRng.offset(0,1)
Sheets("Report").Cells(k, 4) = Worksheets(i).name
End If
Next i

End sub

你的帖子里没有截图。此外,给出的代码不足以完全理解。你能发布完整的代码吗?很抱歉纳雷什给我带来了困惑,我已经编辑并重新发布了。谢谢纳雷什,但是报告处于任何位置,因此我加入了“如果没有技巧”。但是,如何根据给定的样本数据,根据技能获得名称的价值?在您的问题中,您希望获得SkiName工作表(资源)的名称?不,资源是报告工作表的列名这是否回答了您的问题?
Private Sub BtnReport_Click()
Dim SkillName As String
Dim SkillRng As Range
Dim rng As Range
'Dim nextblankrow As Long
'Dim lastrow As Long
Dim x As Long
Dim y As Long
Dim val As String

SkillName = ActiveWorkbook.Worksheets("Admin").Range("L4")

If SkillName = "" Then
    MsgBox "Select a skill name"
    Exit Sub
End If

'Sheets(2).Select
'Set rng = Sheets(2).Range("B14:B100").Find(What:=SkillName)
'MsgBox rng.Value

Sheets("Report").Select
Sheets("Report").Cells.ClearContents
Sheets("Report").Cells(1, 1) = "Skill Name"
Sheets("Report").Cells(1, 2) = "Resource"

'''''For i = 1 To Sheets.Count - 1
'''''    Set rng = Sheets(i).Range("B14:C100")
'''''    Set SkillRng = rng.Find(What:=SkillName)
'''''    If Not SkillRng Is Nothing Then
'''''        Sheets("Report").Cells(i + 1, 1) = SkillRng.Value
'''''        MsgBox rng.Cells.Value
''''''        Sheets("Report").Cells(i + 1, 2) = rng.Offset(RowoffSet = 1, Columnoffset = 2).Value
''''''        Sheets("Report").Cells(i + 1, 2) = SkillRng.Cells(Selection.Row, Selection.Column + 1).Value
'''''        Sheets("Report").Cells(i + 1, 3) = ActiveWorkbook.Worksheets(i).name
'''''    End If
'''''Next i
    Set rng = Sheets(2).Range("B14:C100")
    Set SkillRng = rng.Find(What:=SkillName)

    For x = 1 To rng.Rows.Count
        For y = 1 To rng.Columns.Count
            If rng.Cells(x, y) = SkillRng Then
'                Sheets("Report").Cells(2, 2) = rng.Cells(x, y + 1)
                MsgBox SkillRng
                MsgBox x
                MsgBox y
                val = Cells(x, y).Value
 '               val = SkillRng
                MsgBox val
            End If
        Next y
    Next x
Private Sub BtnReport_Click()
Dim SkillName As String
Dim SkillRng As Range
Dim rng As Range

SkillName = ActiveWorkbook.Worksheets("Admin").Range("L4")

If SkillName = "" Then
MsgBox "Select a skill name"
Exit Sub
End If

Sheets("Report").Select
Sheets("Report").Cells.ClearContents
Sheets("Report").Cells(1, 1) = "Skill Name"
Sheets("Report").Cells(1, 2) = "Resource"

For i = 1 To Worksheets.Count
Set rng = Worksheets(i).Range("B14:C100")
Set SkillRng = rng.Find(What:=SkillName)
k = Sheets("Report").Range("A1").CurrentRegion.Rows.Count + 1
If Not SkillRng Is Nothing Then
Sheets("Report").Cells(k, 1) = SkillName
Sheets("Report").Cells(k, 2) = SkillRng.Value
Sheets("Report").Cells(k, 3) = SkillRng.offset(0,1)
Sheets("Report").Cells(k, 4) = Worksheets(i).name
End If
Next i

End sub