2013-08-19 4 views
0

Я разрабатываю макрос, чтобы исключить пустые строки из листа, который используется для ввода настраиваемых заказов. Допустим, что строки 7,8,9 и 12 имеют содержимое. Я хочу переместить содержимое строки 12 в строку 10.Работа с массивами VBA Excel

До сих пор я располагал последнюю занятую строку в столбце c, а затем определял, является ли ячейка в строке в столбце e пустой или нет.

Теперь я хочу поместить значение в массив либо 0 (пустой), либо 1 (занятый). Я получаю ошибку (объект требуется) в строке кода, которая устанавливает значение камней (1) в 1 или 0.

Что происходит не так?

Dim ws As Worksheet 
Dim rng1 As Range 
Set ws = Sheets("Belmont") 
Set rng1 = ws.Columns("c").Find("*", ws.[c1], xlValues, , xlByRows, xlPrevious) 
Dim zen As String 
zen = rng1.Address(0, 0) 
Range(zen).Select 
Set ruby = Window.ActiveCell.Row - 11 
Dim stones() As Boolean 
ReDim stones(1 To ruby) 
If IsEmpty(ActiveCell.Offset(2, 0)) Then 
Set stones(1) = 0 
Else 
Set stones(1) = 1 
End If 
msg55 = MsgBox(stones(1), vbDefaultButton1, "Gekko") 

ответ

2

Мое предположение, что вы делаете это для целей обучения, а не практичности:

Вы можете Google VBA массивы и получить множество материалов на эту тему. Я хотел бы начать здесь: http://www.cpearson.com/excel/vbaarrays.htm

Вы бы объявить массив следующим образом:

Dim stones(1 To 10) As Double 

Вы собираетесь должны перебирать каждую ячейку в вашем диапазоне. Вы можете нагуглить, как сделать это, а также:

Loop through each cell in a range of cells when given a Range object

Вы можете установить значение 5-го элемента массива со значением 10, как так:

stones(5) = 10 

Это действительно походит вам нужно сделать некоторые базовые учебники по программированию VBA. Вы могли бы начать здесь:

http://www.mrexcel.com/forum/excel-questions/667818-tutorials-excel-macros-visual-basic-applications.html

+0

Спасибо, Степан! Теперь я отредактировал свой вопрос, что получил больше ответа от вашего ответа. Мне интересно, почему я получаю объект, требуемый при установке элемента массива в значение ... –

+1

@RichardPullman Похоже, вы поняли, как использовать массивы. В начале учебного руководства обычно есть целая глава, посвященная внедрению массивов. Похоже, что вы достигли определенного прогресса - вы изменили тип массива от double до boolean (что имеет больше смысла для вашей ситуации, потому что вы просто сохраняете 1 и 0). - Но вы действительно захотите изучить, как использовать массивы. Любой может пропустить вас, как их использовать, но вам лучше просто прочитать учебник. Вам захочется узнать, как итерации. Однако, если вы просто хотите это сделать, вам не нужны массивы. – Stepan1010

+0

Да, спасибо. Хороший человек. Я должен получить лучшее понимание по теме, прежде чем я приду сюда с вопросами. –

1

Если вы пытаетесь избавиться от пустых ячеек в листе «» Бельмона колонке C, то это должно работать для вас:

Sub tgr() 

    Dim rngBlanks As Range 

    With Sheets("Belmont").Range("C1", Sheets("Belmont").Cells(Rows.Count, "C").End(xlUp)) 
     On Error Resume Next 
     Set rngBlanks = .SpecialCells(xlCellTypeBlanks) 
     On Error GoTo 0 
     If Not rngBlanks Is Nothing Then rngBlanks.EntireRow.Delete 
    End With 

    Set rngBlanks = Nothing 

End Sub 
+0

Сложнее. Я хочу переместить содержимое ячеек в верхнюю часть листа в первый незанятый столбец.Если есть содержимое в строках 5,6,7 и 12, я хочу переместить содержимое строки 12 в строку 8. –

+1

Так что оставьте .EntireRow так, чтобы строка: 'If Not rngBlanks is Nothing Then rngBlanks. delete' – tigeravatar

1

Если вы хотите чтобы удалить все строки, в которых столбец с является пустым, то:

Sub dural() 
    Dim r As Range 
    Set r = Range("C:C").Cells.SpecialCells(xlCellTypeBlanks).EntireRow 
    r.Delete 
End Sub 

выполнит это без цикла.

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