2016-03-22 25 views
1

"E-posta" sayfasındaki Hücre E8'yi bir dinamik aralıklı bir Dizin Eşleme formülüyle atamaya çalışıyorum. Aralık "Veri"Çalışma Zamanı Hatası 5, geçersiz yordam veya çağrı bağımsız değişkeni

'dan alınmıştır. Son satır (LR) ve son sütunu (lc) buldum. çalışma zamanı hatası son satırında oluşur: The Cell ("E8") formülü = "= ...." Bu kodudur

. Sen sarmak için tek tırnak kullanan

Sub report() 
    Dim LR As Long, lc As Long, first As Long, proxy As String 

    Sheets("Data").Select 

    'Finding the first filled cell by moving down from A1 
    first = Sheets("Data").Range("A1").End(xlDown).Row 

    'The first row has column headers: Name, ID number, etc... SO I assign it to the next row where the first data entry is 
    first = first + 1 

    LR = Sheets("Data").Range("A" & first).End(xlDown).Row 
    lc = Sheets("Data").Range("A" & first).End(xlToRight).Column 

    Sheets("Report").Select 
    proxy = "=IFERROR(INDEX(Data!$A$10:" & Cells(LR, lc).Address & ",MATCH(Report!$C$3,Data!$A$10:" & Cells(LR, 1).Address & ",0),MATCH(Report!$C8,Data!A$9:" & Cells(9, lc).Address & ",0)),'N/A')" 

    Cells("E8").Formula = proxy 
End Sub 
+0

'Veriler $ A $ "& ilk & ":" & ... 'yerine' Veriler $ A $ 10:!" & ...'? – Jeeped

cevap

0

'N/A'. Çifte alıntılara ihtiyacınız var ve bunlar tırnak içine alınmış bir tırnak içinde alıntı yapıyorlar, onları ikiye katlamanız gerekiyor. Ayrıca, Range.Cells property, Range object'un yaptığı aynı hücre adresi başvurusu stilini kabul etmez. İşte

proxy = "=IFERROR(INDEX(Data!$A$10:" & Cells(LR, lc).Address & _ 
       ",MATCH(Report!$C$3,Data!$A$10:" & Cells(LR, 1).Address & _ 
       ",0),MATCH(Report!$C8,Data!A$9:" & Cells(9, lc).Address & _ 
       ",0)),""N/A"")" 
Sheets("Report").Select 
Range("E8").Formula = proxy 

Worksheet.Select ¹ yöntem ve örtük ActiveSheet property kullanarak uzak alır hızlı bir yeniden yazılmış halidir.

Sub report() 
    Dim lr As Long, lc As Long, first As Long, proxy As String 

    With Worksheets("Data") 

     'Finding the first filled cell by moving down from A1 
     first = .Range("A1").End(xlDown).Row 

     'The first row has column headers: Name, ID number, etc... SO I assign it to the next row where the first data entry is 
     first = first + 1 

     lr = .Range("A" & first).End(xlDown).Row 
     lc = .Range("A" & first).End(xlToRight).Column 

    End With 

    proxy = "=IFERROR(INDEX(Data!$A$10:" & Cells(lr, lc).Address & _ 
        ",MATCH(Report!$C$3,Data!$A$10:" & Cells(lr, 1).Address & _ 
        ",0),MATCH(Report!$C8,Data!A$9:" & Cells(9, lc).Address & _ 
        ",0)),""NA"")" 

    With Worksheets("Report") 
     .Range("E8").Formula = proxy 
     'alternate with .Cells as one of these 
     '.Cells(8, "E").Formula = proxy 
     '.Cells(8, 5).Formula = proxy 
    End With 
End Sub 

seçme güvenerek uzak alma konusunda daha fazla yöntemler için How to avoid using Select in Excel VBA macros bakın ve hedeflerinizi gerçekleştirmek için aktif hale getirin. Olması gerekmiyor

+0

Hücreler ("E8") Range ile değiştirilmelidir çünkü Gözetleme hatası gibi görünüyor. – Sixthsense

+0

Altıncı'yı yakaladığınız için teşekkürler. Hızlı bir yeniden yazmak için kodlara geri dönmeyi planlıyorum ve sadece anlatımdaki Hücreler/Menzil'den söz ettim, kodun içinde kaybolma eksikti. – Jeeped

1
Sub report() 
    Dim LR As Long, lc As Long, first As Long, proxy As String 

    With Sheets("Data") 
     'Finding the first filled cell by moving down from A1 
     first = .Range("A1").End(xlDown).Row 

     'The first row has column headers: Name, ID number, etc... SO I assign it to the next row where the first data entry is 
     first = first + 1 

     LR = .Range("A" & Rows.Count).End(xlUp).Row 
     lc = .Range("A" & first - 1).End(xlToRight).Column 
    End With 

    proxy = "=IFERROR(INDEX(Data!$A$10:" & Cells(LR, lc).Address & ",MATCH(Report!$C$3,Data!$A$10:" & Cells(LR, 1).Address & ",0),MATCH(Report!$C8,Data!A$9:" & Cells(9, lc).Address & ",0)),""N/A"")" 
    Sheets("Report").Range("E8").Formula = proxy 
End Sub 
İlgili konular