Excel VBA:使用单元格值引用另一个工作表

Excel VBA: referencing another worksheet using a cell value

提问人:celia_123 提问时间:11/15/2023 更新时间:11/15/2023 访问量:43

问:

因此,我想在不键入“Wrksheet2”的情况下获取不同工作表(假设 Wrksheet2)中单元格的值。它已经是我主工作表 (Wrksheet1) 上的一个字符串值。我想用几个不同的工作表来做这件事,因为我有一整行工作表名称。

以下是我想做的

Dim SheetNameString as String
Dim SheetWork as Worksheet
Dim i as Integer

for i = 3 to 15
SheetNameString = cells(3,i)
SheetWork = Sheets(SheetNameString)
   If SheetWork.cells(i+4, 8) = blah Then
   Blah blah
   End If

Next

因此,当前工作表 Wrksheet1 第 3 行是我的工作簿中工作表名称的一行。我想遍历这一行,逐个单元格(按工作表名称查看工作表的名称)并访问该工作表以使用该工作表中的值执行 If 语句(例如 Sheets(“Wrksheet2”).cells(1,1) )。

我试图避免做的是输入每个工作表名称,因为我有 ~45。

我不确定如何将单元格值(字符串)输入到 Sheets(“”) 中。以下两种方法均无效:

Dim SheetNameString as String
Dim SheetWork as Worksheet

SheetNameString = cells(3,3)
SheetWork = Sheets(SheetNameString)

Dim SheetNameString as String
Dim SheetWork as Worksheet

SheetNameString = cells(3,3)
SheetWork = Sheets("SheetNameString")
Excel VBA 工作表

评论

0赞 taller 11/15/2023
Set SheetWork = Sheets(SheetNameString)
0赞 celia_123 11/15/2023
@taller不幸的是,当我尝试这样做时,这不起作用
1赞 Tim Williams 11/15/2023
但是,它的作用而不是工作是什么?
0赞 taller 11/15/2023
请在您的帖子中分享您的所有代码和错误信息。
0赞 kcp 11/15/2023
将 SheetNameString 调暗为字符串 将 SheetWork 调暗为工作表 将 i 调暗为整数 For i = 3 到 15 SheetNameString = Cells(3, i)。值 ' 使用 Evaluate 动态引用工作表 Set SheetWork = Worksheets(SheetNameString) ' 检查引用工作表 If SheetWork.Cells(i + 4, 8) 的指定单元格中的条件。值 = “blah” 然后 ' 你的代码在这里 ' 废话 结束 如果下一个 i

答:

2赞 VBasic2008 11/15/2023 #1

循环访问一行工作表名称

enter image description here

Sub LoopThroughRow()

    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim sws As Worksheet: Set sws = wb.Sheets("Master")
    
    Dim srg As Range, scCount As Long
    
    With sws.Range("C3")
        scCount = sws.Cells(.Row, sws.Columns.Count).End(xlToLeft).Column _
            - .Column + 1
        If scCount < 1 Then
            MsgBox "No worksheet names found!", vbExclamation
            Exit Sub
        End If
        Set srg = .Resize(, scCount)
    End With
    
    Dim dws As Worksheet, scell As Range, dwsName As String
    
    For Each scell In srg.Cells
        dwsName = CStr(scell.Value)
        On Error Resume Next
            Set dws = wb.Sheets(dwsName)
        On Error GoTo 0
        If dws Is Nothing Then
            MsgBox "Worksheet """ & dwsName & """ not found!", vbExclamation
        Else
            ' Do your 'Blah' code here e.g.:
            MsgBox "Processing worksheet """ & dwsName & """.", vbInformation
            
            Set dws = Nothing ' reset for the next iteration (worksheet)
        End If
    Next scell
    
End Sub