【问题标题】:How do I use a cell's value to open a specific sheet?如何使用单元格的值打开特定的工作表?
【发布时间】:2020-05-02 15:43:11
【问题描述】:

首先,感谢您的帮助!我正在学习如何使用 VBA 并从中获得乐趣,但现在我遇到了困难,我希望您的专业知识可以在我需要的时候帮助我。

背景:我在表格中有数据,我在其中比较两列 J 和 T。

如果这些值相等,则将该行(第 i 行)复制到具有刚刚检查的单元格名称的工作表中,即 Cell(i, J) Cell (i, T) .

如果这些值相等,则将该行(第 i 行)复制到具有刚刚检查的单元格名称的工作表中,即 Cell(i, J) 单元格 (i, T)。

J 和 T 可以取的值包括 A2B、APL、BGF、CMA 等(见代码)。

示例: 比较 J2 和 T2,

假设 J2=T2=BGF 然后复制第 2 行并粘贴到工作表中(BGF)

接下来,比较J3和T3

假设 J3=BGF 和 T3=CMA,复制第 3 行并粘贴到 sheet(BGF) 和 sheet(CMA)

代码

Sub Sortdata()
'step 1 clear all data
Sheets("A2B").Cells.ClearContents
Sheets("APL").Cells.ClearContents
Sheets("BGF").Cells.ClearContents
Sheets("CMA").Cells.ClearContents
Sheets("K Line").Cells.ClearContents
Sheets("MacAndrews").Cells.ClearContents
Sheets("Maersk").Cells.ClearContents
Sheets("OOCL").Cells.ClearContents
Sheets("OPDR").Cells.ClearContents
Sheets("Samskip").Cells.ClearContents
Sheets("Unifeeder").Cells.ClearContents

' Look at rows J and T, if the values are equal then copy row i to sheet "Cell( i , J )".
' Else, copy row i to sheet(Cell( i , J )) and sheet(Cell ( i , T ))             [Value.Ji and Value.Ti]

Sheets("All Data").Select

Dim i As Integer

For i = 2 To 10000
    If Worksheets("All Data").Range("J" & i) = Worksheets("All Data").Range("T" & i) Then 'if two cells are equal

        Worksheets("All Data").Rows(i).Select 'then select the row
        Selection.Copy
        Worksheets("All Data").Rows(i).Copy 'copy the data
        Worksheets(Sheets("All Data").Range("J" & i).Value).End(xlUp).Select 'open the new worksheet using the cell value Ji as the sheet name
        Selection.Offset(1, 0).Select
        ActiveSheet.PasteSpecial xlPasteValuesAndNumberFormats ' paste the value at the end of the row.

        Else
        Worksheets("All Data").Rows(i).Select
        Selection.Copy
        Worksheets("All Data").Rows(i).Copy
        Worksheets(Sheets("All Data").Range("J" & i).Value).End(xlUp).Select
        Selection.Offset(1, 0).Select
        ActiveSheet.PasteSpecial xlPasteValuesAndNumberFormats

        Worksheets("All Data").Rows(i).Select
        Selection.Copy
        Worksheets("All Data").Rows(i).Copy
        Worksheets(Sheets("All Data").Range("T" & i).Value).End(xlUp).Select
        Selection.Offset(1, 0).Select
        ActiveSheet.PasteSpecial xlPasteValuesAndNumberFormats

    End If
Next i

End Sub

【问题讨论】:

  • 问题:这一切都很好,直到这一行,我无法从“所有数据”表Worksheets(Sheets("All Data").Range("J" & i).Value).End(xlUp).Select中获得引用单元格的正确语法@
  • 该行正在查找根据单元格Sheets("All Data").Range("J" & i).Value 的内容命名的工作表。该单元格是否包含可以解释为工作表名称的内容?如果是这样,则问题是end(xlup) 需要应用于范围而不是工作表。
  • 所以像Worksheets(Sheets("All Data").Range("J" & i).Value).range("A" & rows.count).End(xlUp).Select 这样的东西可以工作,但你应该阅读stackoverflow.com/questions/10714251/…
  • 嗨,SJR,干杯! Else 和 If 情况想要相似,在 If 情况下我只想复制到一张纸上,在 Else 情况下我想将行复制到两张纸上。 Worksheets(Sheets("All Data").Range("J" & i).Value).range("A" & rows.count).End(xlUp).Select 给出 1004,范围类的选择方法失败 :(
  • 是的,这是一个Select 问题。

标签: excel vba reference


【解决方案1】:

看看这是否有效。可以看到avoiding Select可以缩短多少代码。

Sub Sortdata()

'code to clear sheets

Dim i As Long

With Worksheets("All Data")
    For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
        If Len(.Range("J" & i)) > 0 And Len(.Range("T" & i)) > 0 Then
            .Rows(i).Copy
            Worksheets(.Range("J" & i).Value).Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats ' paste the value at the end of the row.
            If .Range("J" & i) <> .Range("T" & i) Then
                .Rows(i).Copy
                Worksheets(.Range("T" & i).Value).Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats
            End If
        End If
    Next i
End With

End Sub

【讨论】:

  • 这段代码现在看起来很漂亮!我现在要试试这个,我也在阅读选择线程。
  • 是的,养成缩进代码的习惯,它看起来更具可读性。这段代码可以缩短,因为第一位可以从 If 中取出。
  • 错误 9: 下标超出范围 Worksheets(.Range("J" &amp; i).Value).Range("A" &amp; Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats 不幸的是它在这里不起作用
  • J中的值不等于文件中的工作表?
  • 工作簿有8张:Home、All Data、A2B、APL、BGF、CMA、K Line、OOCL。 J 列和 T 列的值等于 A2B,APL,BGF,CMA,K Line&OOCL,J 和 T 也可能为空。
猜你喜欢
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 2022-08-19
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多