簡體   English   中英

VBA:帶循環的引用單元格地址

[英]VBA: Reference cell address with a loop

我有一本大約 40 張的工作簿。 我在 sheet1 上的一個表內工作,編譯整個工作簿中的數據。

A 列中的每個單元格值在工作簿中的某處都有對應的同名工作表。

我試圖遍歷列並為每個單元格 1) 找到相應的工作表 2) 復制單個單元格值 3) 將該值粘貼回原始表格的右側。

我目前的嘗試如下。 我不斷收到(錯誤 91)Object 變量未設置。 任何調試技巧或一般建議將不勝感激!

Sub LoopColumn()
 
Dim cell As Range
Dim ws As Worksheet
Dim ws_num As Integer
Dim CellName As String
Dim CellLocation As Range


ws_num = ThisWorkbook.Worksheets.Count
Worksheets(1).Select

For Each cell In Range("A:A")
    CellName = ActiveCell.Value
    CellLocation = ActiveCell.Address
   
        
        For i = 1 To ws_num

            If ws.Name = CellName Then
                ThisWorkbook.Worksheets(i).Activate

                ActiveSheet.Range("L1").Select
                Selection.Copy
                ActiveSheet.Paste Destination:=Worksheets(1).Range(CellLocation.Offset(0, 4))
            
            End If
        Next i
    
    Worksheets(1).Select
Next cell
 
 
End Sub

一些建議:

Sub LoopColumn()
 
    Dim c As Range, ws As Worksheet, wsList As Worksheet
    
    Set wsList = ThisWorkbook.Worksheets(1)
    
    'only loop cells in the used range of ColA
    For Each c In wsList.Range("A1:A" & wsList.Cells(Rows.Count, 1).End(xlUp).Row).Cells
        If c.Value <> "" Then
            Set ws = Nothing
            On Error Resume Next 'ignore error if no sheet with this name
            Set ws = ThisWorkbook.Worksheets(c.Value) 'try to get the sheet
            On Error GoTo 0      'stop ignoring errors
            If Not ws Is Nothing Then
                ws.Range("L1").Copy c.Offset(0, 4) 'no need to activate anything
            End If
        End If
    Next c
    
End Sub

如果您需要一般調試建議

  1. 使用F8逐行運行代碼並找出出錯的行(如果代碼很短)
  2. 使用breakpoint (代碼一側的紅點)提前停止代碼並查看錯誤前的變量值
  3. 在代碼之上使用Option Explicit強制您正確地聲明每個變量

有了一些使用斷點和調試運行代碼的經驗,您很可能能夠找到錯誤發生的位置和原因。 它會讓您更輕松地在線查看或在 Stack 上更好地提問!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM