2016-07-29 2 views
0

Мне нужна ваша помощь. Я новичок в использовании диапазонов в качестве переменных, так что, возможно, что-то очевидное, что мне не хватает, но я не могу найти решение после множества поисковых запросов.Excel VBA Variable Throw Error 1004 - Я нахожусь в

Я форматирую четыре листа данных (заголовки, довольно заполняющий цвет, красивые границы). Все они почти одинаковы, но они имеют различное количество столбцов. Чтобы сохранить повторяющийся код, я написал одну процедуру для форматирования, а другую - для изменения переменных и вызова кода форматирования.

пример кода вызова:

' Set Customer detail variables. 

varGlobalID = Sheets(varWST1Dockets).Cells(2, 13).Value 
varCustomerName = Sheets(varWST1Dockets).Cells(2, 14).Value 

'Формат Подвесной

' Set Variables 

    varReportHeading = "Suspended Dockets Investigation" 

    Set rngDataHeadings = Range("B11", "T11") 

    Range("B1048576").End(xlUp).Select 
    Set rngDataTable = Range(Selection, "T11") 

    Range("B1048576").End(xlUp).Select 
    Set rngData = Range(Selection, "T12") 

' Run Format Reports Procedure 

    Sheets(varWSSuspended).Select 
    Call FormatReports 

образец кода форматирования

' Format Data Headings 

rngDataHeadings.Select 
With Selection.Interior 
    .Pattern = xlSolid 
    .PatternColorIndex = xlAutomatic 
    .Color = -4300032 
    .PatternTintAndShade = 0 
End With 
With Selection.Font 
    .ColorIndex = 2 
    .TintAndShade = 0 
    .Bold = True 
End With 
With Selection 
    .HorizontalAlignment = xlLeft 
    .VerticalAlignment = xlCenter 
    .WrapText = True 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
End With 

' Применить Borders

rngDataTable.Select 

With Selection.Borders(xlEdgeLeft) 
    .LineStyle = xlContinuous 
    .ColorIndex = 2 
    .TintAndShade = 0 
    .Weight = xlMedium 
End With 

Код, похоже, работает на первый запуск переменных, но не на второй. Нужно ли выгружать их перед сбросом? Или я делаю что-то еще глупо, очевидно, неправильно?

Заранее спасибо.

+2

Шаг через него с F8 ... какой линии вы получите ошибку на? – Rodger

+1

Является ли 'varWST1Dockets' строкой или это рабочий лист? –

+2

Если вы следуете [ЭТО] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros), то строго все эти проблемы исчезнут :) –

ответ

1

Set rngDataHeadings = Range("B11", "T11") ссылки B11:T11 из ActiveSheet. Выбор другого рабочего листа и попытаться rngDataHeadings.Select сгенерирует исключение Runtime Error «1004» Выберите метод класса Range не удалось

Это лучше избегать Выберите и Active. Вы должны посмотреть Selecting Cells (Range, Cells, Activecell, End, Offset)

Если у вас есть стандартные таблицы, это будет работать.

Sub FormatTable(wsWorksheet As Worksheet, HeaderAddress As String) 
    Dim rDataBody As Range 
    Dim rHeader As Range 

    With wsWorksheet 
     Set rHeader = .Range(HeaderAddress, .Range(HeaderAddress).End(xlToRight)) 
     Set rDataBody = Range(HeaderAddress).CurrentRegion 
     Set rDataBody = rDataBody.Offset(1).Resize(rDataBody.Rows.Count - 1) 
    End With 
    With rHeader.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = -4300032 
     .PatternTintAndShade = 0 
    End With 
    With rHeader.Font 
     .ColorIndex = 2 
     .TintAndShade = 0 
     .Bold = True 
    End With 
    With rHeader 
     .HorizontalAlignment = xlLeft 
     .VerticalAlignment = xlCenter 
     .WrapText = True 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 

    ' Apply Borders 
    With rDataBody.Borders(xlEdgeLeft) 
     .LineStyle = xlContinuous 
     .ColorIndex = 2 
     .TintAndShade = 0 
     .Weight = xlMedium 
    End With 

End Sub 

Называйте это как этого

FormatTable Таблицах ("Лист1"), "B11"

+0

Спасибо Томас. Думаю, я понимаю, что вы предлагаете. Я отдам его. Я сам преподаю, поэтому есть много чего не знаю: с. –

+0

Спасибо Томас. Это работает очень хорошо. И я многому научился, как вы его настроили.В частности, при выборе диапазонов. У меня есть одна проблема. Хотя, rHeader, кажется, ничего не выбирает. rDataBody работает блестяще. Есть идеи? Эта ссылка была интересной, хотя она охватывала многое из того, что я уже знаю. Я подписался на них, чтобы вернуться и посмотреть. У меня также есть кто-то, кого я учу, и это было бы удобно отправить ее тоже. Благодарю. –

+0

Можете ли вы поместить эту строку кода 'Debug.Print rHeader.Address' после того, как установлен диапазон' rHeader'? Тогда вы можете проверить ближайшее окно для результатов и отправить его мне обратно в комментарии? –