2013-12-21 3 views
0

Я получаю сообщения об ошибках i, которые определяют, что переменная не определена. И VB окрашивает этот код в красный цвет. Если LCase (wb.Range («Q» & i) = «y» Затем .AutoFilter и я не знаю почему.Получение сообщений об ошибках в диапазонах

Очень важно, что только строки с «y» в столбце Q в каждом диапазоне приклеивается, а не все остальное.

Мне пришлось изменить i на 2 до 500 и j = 2 до 20, но я беспокоюсь, что могу получить столбцы, которые я не хочу вставлять в Sheet2 (Materials_Estimate). Я просто хочу, чтобы столбцы диапазона были вставлены.

Диапазоны включают информацию Sheet2, как показано на рисунке ниже (B = текст, c = текст, D = текст, F = до 3 цифр , G = буква y, H = текст, I = расчет, скопированный из листа 1 стоимости qty *)

Может ли кто-нибудь мне помочь?

[Код]

Option Explicit

Sub Estimating2() Application.ScreenUpdating = False

'naming the workbook and worksheets and ranges 
Dim ProjectBudgeting1 As Workbook 
Dim Materials_Budget As Worksheet 
Dim Materials_Estimate As Worksheet 
Dim LowesFax As Worksheet 
Dim HomeDepotFax As Worksheet 
Dim SBath1 As Range 
Dim SBath2 As Range 
Dim SBed1 As Range 
Dim SBed2 As Range 
Dim SBed3 As Range 
Dim SBed4 As Range 
Dim SHall As Range 
Dim SFP As Range 
Dim SRP As Range 
Dim SKit As Range 
Dim SGar As Range 
Dim BuyOA As Range 
Dim SFlorida As Range 
Dim TargetRange As Range 
Dim ActiveWorksheet As Worksheet 


'naming the worksheets and ranges in code 
Set ProjectBudgeting1 = ActiveWorkbook 
Set Materials_Budget = Worksheets("Materials_Budget") 
Set Materials_Estimate = Worksheets("Materials_Estimate") 
Set LowesFax = Worksheets("LowesFax") 
Set HomeDepotFax = Worksheets("HomeDepotFax") 
Set SBath1 = Range("Materials_Budget!Supplies_Bathroom1") 
Set SBath2 = Range("Materials_Budget!Supplies_Bathroom2") 
Set SBed1 = Range("Materials_Budget!Supplies_Bedroom1") 
Set SBed2 = Range("Materials_Budget!Supplies_Bedroom2") 
Set SBed3 = Range("Materials_Budget!Supplies_Bedroom3") 
Set SBed4 = Range("Materials_Budget!Supplies_Bedroom4") 
Set SHall = Range("Materials_Budget!Supplies_Hallway") 
Set SFP = Range("Materials_Budget!Supplies_FrontPorch") 
Set SRP = Range("Materials_Budget!Supplies_RearPorch") 
Set SKit = Range("Materials_Budget!Supplies_Kitchen") 
Set SGar = Range("Materials_Budget!Supplies_Garage") 
Set SFlorida = Range("Materials_Budget!Supplies_Florida") 
'Here I'm calling out the column q and looking for a "Y" 
Set BuyOA = Range("Materials_Budget!Buy_OrderApproval") 
'Here I'm naming the source of the information that gets copied into other sheets 
Set ActiveWorksheet = Materials_Budget 
'Here is the sheet where the source cells are pasted 
Set TargetRange = Range("Materials_Estimate!EstimateTableArea1") 

'Looking for the "Y" in column q for duplicating and printing corresponding rows (i) and columns (j) 
For i = 12 To 520 
     Cells("Q", i) = "Row " & i & " Col " & j 
For j = 2 To 20 
If LCase(wb.Range("Q" & i) = "y" Then .AutoFilter 
i = i + 1 
    Range("Q" & i).Select 
    i = i - 1 
Next q 
Next i 

    For j = 1 To 5 
     Cells(i, j) = "Row " & i & " Col " & j 

End Sub

Application.ScreenUpdating = True 

End With 

End Sub

[Код /]

+0

Изменение 'Set SBath1 = Range ("Materials_Budget! Supplies_Bathroom1")' на 'Set SBath1 = Range ("Supplies_Bathroom1")' и аналогично для других. И не говоря уже о том, что вы уменьшаете эти объекты как «Range» –

ответ

1

Я вижу много ошибок.

A) Вы не указали свои объекты. Например, вам нужно объявить SBath1, SBath2 etc.. в диапазоне

B) Вы объявили ProjectBudgeting1 как книгу, но тогда вы используете его в качестве объекта рабочего листа.

C) При установке диапазона, полностью квалифицировать их

D) Ваш wb объект необъявленной. Я бы настоятельно рекомендую использовать Option Explicit в верхней части кода

E) У вас есть дополнительный кронштейн ) в wb.Range("Q12:Q" & LastRow))

F) Избегайте использование .SelectINTERESTING READ

G) Наконец, я очень рекомендую забыть одно слово в vba и использовать End, чтобы остановить код. Причина довольно проста. Это похоже на «Переключение компьютера» с помощью кнопки POWER OFF. Оператор End прекращает выполнение кода. Также недействительны ссылки на объекты (если они есть) другими программами.

Вот основная суть того, как ваш код должен выглядеть

Sub Estimating2() 
    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim rng1 As Range, rng2 As Range 

    Set wb = ActiveWorkbook '~~> Or ThisWorkbook? 

    Set ws = wb.Sheets("Sheet1") 

    With ws 
     Set rng1 = .Range("Supplies_Bathroom1") 
     Set rng2 = .Range("Supplies_Bathroom2") 

     ' 
     '~~> And so on 
     ' 

    End With 
End Sub 
+0

Я все еще получаю сообщения об ошибках, когда система просматривает код. – user3097333

+0

Я использовал ваш код выше, но получаю ошибку времени выполнения 9, используя: Установите ws = ProjectBudgeting1.Sheets («Materials_Budget, Materials_Estimate, LowesFax, HomeDepotFax») Или я получаю ошибку времени выполнения 424 при использовании вашего оператора as is Set ws = wb.Sheets («Таблицы1») Можете ли вы помочь? – user3097333

+0

'1'' ws' - ​​это рабочий лист. Вы не можете хранить в нем несколько листов. '2' Относительно" Установить ws = wb.Sheets ("Sheets1") ", как вы определили' ws' и 'wb'? –

Смежные вопросы