2015-02-23 8 views
2

Я попытался найти эту проблему, но не нашел аналогичной проблемы.Excel VBA Как выбрать диапазон переменных ячеек

Я все еще новичок в VBA, и я пытаюсь создать макрос, который выбирает диапазон ячеек в зависимости от ввода пользователя, а затем создает выделенную сетку из выбранных ячеек.

У меня есть две кнопки ActiveX в моей книге Excel, которые позволяют пользователю вводить, насколько велика сетка, которую они хотят использовать (Ширина & Высота). Я изо всех сил стараюсь включить вышеупомянутую ширину и высоту в свой код. Вот код для кнопок (ничего не ясно о них):

Private Sub Height_Click() 
Dim Height As Integer 
Height = InputBox("Syötä ruudukon korkeus", "Ruudukon korkeus", "Syötä tähän") 
Range("E5") = Height 
End Sub 

И ширина кнопки:

Private Sub Width_Click() 
Dim Width As Integer 
Width = InputBox("Syötä ruudukon leveys", "Ruudukon leveys", "Syötä tähän") 
Range("E2") = Width 
End Sub 

Я хочу, чтобы моя сетка начать с ячейки «G2» и расширить правую & оттуда вниз и изменить размер выбранных ячеек. Однако код, который я написал, не работает вообще (как я думал). Вот код:

Private Sub CreateGrid_Click() 
Columns("G:G+E2").Select 
    Selection.ColumnWidth = 1 
Rows("2:2+E5").Select 
    Selection.RowHeight = 1 
End Sub 

Cells «E2» и «Е5» имеют значения ширины и высоты печатного соответственно. Ничего не происходит, когда я нажимаю кнопку CreateGrid. Любые идеи, как я могу заставить этот код работать? Большое спасибо за все ответы.

-Teemu

ответ

1

EDIT:

Private Sub CreateGrid_Click() 
Range("G2:" & Range("G2").Offset(Range("E5").Value,Range("E2").Value).Addresslocal).Select 
End Sub 

Если это не делать то, что вы ожидаете, пожалуйста, дайте мне знать, и я постараюсь помочь исправить это.

+0

Привет, спасибо за ваш ответ. Я попробовал ваше предложение, но это не сработало. Он выбрал только столбец/строку назначения, которая представляет собой диапазон «E2» и «E5», от ячейки G2. Таким образом, с шириной 24 и высотой 30 пострадавшие районы были столбиком AE вплоть до 1048576 и 30-й точкой вплоть до XFD. –

+0

Вы хотите выбрать весь диапазон ячеек, G2: AE30? – Kyle

+0

Да, весь диапазон от G2: AE30 –

0

команда, которую вы ищете, Range().Select но вам нужно, чтобы создать строку, которая идет в круглых скобках. Итак, если я правильно понял, вы сохранили в переменных количество строк и количество столбцов, которые вы хотите скорректировать из G2 вправо?

Для того, чтобы получить письмо столбца, вы можете использовать функцию, поставляемый майкрософт here

Function ConvertToLetter(iCol As Integer) As String 
    Dim iAlpha As Integer 
    Dim iRemainder As Integer 
    iAlpha = Int(iCol/27) 
    iRemainder = iCol - (iAlpha * 26) 
    If iAlpha > 0 Then 
     ConvertToLetter = Chr(iAlpha + 64) 
    End If 
    If iRemainder > 0 Then 
     ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64) 
    End If 
End Function 

, но так как вы начинаете с G вы должны вызвать функцию так:

ConvertToLetter(7+numerColumns) 

ваш окончательный код будет выглядеть

Range("G" & 2 + numberLines & ":" & ConvertToLetter(7+numberCols) & numberLines).Select 

где оцепенелого erLines - количество строк для смещения и numberCols количество столбцов.

EDIT: Более короткий путь, как отметил @Kyle, будет использовать:

Range("G2").Offset(numberLines,numberCols).Select 
+1

Это хороший ответ. вы также можете напрямую ссылаться на ячейку G2 и использовать свойство .Offset(), чтобы выбрать другую границу вашей сетки. – Kyle

+0

@Teemu Niskanen это будет выглядеть так: 'Range (" G2 "). Offset (numberLine, numberCols). Выберите 'as showd [здесь] (https://msdn.microsoft.com/en-us/library/office/ ff840060.aspx) –

+0

Я отправил ответ ниже с кодом, реализованным в предыдущей процедуре Teemu. При этом будет расширяться только строка и столбец, которые соответствуют «Шире» и «Высота», введенным пользователем. Что-то еще должно произойти в сетке? – Kyle

2

Хитрость заключается в использовании кнопки записи макроса. Эта функция будет записывать всю инструкцию, которую вы делаете с книгой Excel, при записи Пример: 1.- Запустите макрос записи и введите имя для своего макроса. 2.- Выберите любую ячейку и введите значение 3.- выберите диапазон ячеек, который вы хотите 4.- Нажмите запись макроса остановки. 5.- Нажмите Alt + F11, и вы увидите, что excel генерирует код того, что вы сделали в excel, когда включена запись макроса, даже вы можете знать, как ввести значение внутри ячейки или выбрать его диапазон ,

+0

Я не могу создать рабочий макрос этого путем записи, так как мне нужно добавить переменные из ячеек «E2» и «E5» в параметры диапазона выбора и, по крайней мере, я не знаю, как вы можете включить эту информацию без написания собственного кода в VBA. Спасибо в любом случае за ваш провокационный совет. –