2017-01-16 26 views
0

Я начал использовать макросы в эти выходные (я, как правило, быстро поднимаюсь в отношении компьютеров). До сих пор я мог пройти с поиском ответов, когда у меня есть вопросы, но мое понимание настолько ограничено. Я до такой степени, что я больше не понимаю ответы. Я пишу функцию с помощью VBA для Excel. Я хотел бы, чтобы функция приводила к диапазону, который позже может быть использован как переменная для другой функции. Это код, который у меня есть:Объект, требуемый Ошибка Функция VBA

Function StartingCell() As Range 

Dim cNum As Integer 
Dim R As Integer 
Dim C As Variant 

C = InputBox("Starting Column:") 
R = InputBox("Starting Row:") 

cNum = Range(C & 1).Column 

Cells(R, cNum).Select 

Код до этого работает. Он выбирает ячейку, и все хорошо в мире.

Set StartingCell = Range(Cell.Address) 
End Function 

Я полагаю, что не знаю, как сохранить это местоположение как StartingCell(). Я использовал тот же код, что и в другой очень похожей ситуации с «= Range (Cell.Address)». Но это не работает. Есть идеи? Мне нужно предоставить больше информации для справки? Спасибо за ваш вклад!

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



Спасибо A.S.H & Шай Rado

Я обновил код:

Function selectQuadrant() As Range 

Dim myRange As Range 
Set myRange = Application.InputBox(Prompt:="Enter a range: ", Type:=8) 

Set selectQuadrant = myRange 


End Function 

Это работает хорошо. (Похоже, что текст должен показывать «Введите диапазон:», но он только показал «Вход» для InputBox. Возможно, это может быть из-за того, что я нахожусь на Mac?

Во всяком случае, мне удалось позвонить и установите его в новую переменную в моем другом коде. Но я делаю что-то похожее, чтобы установить длинный (для цвета), чтобы я мог выбирать ячейки определенного цвета в пределах диапазона, но я получаю все виды объектов ошибки здесь тоже. Я действительно этого не понимаю. (И я думаю, что у меня больше проблем, потому что, находясь на Mac, у меня нет обычного окна для редактирования моих макросов. Только я, в основном текст ящик и интернет.

Итак, здесь также есть функция для цвета и суб, которые используют функции. (Я отредактировал так много, я не уверен, где я начал или где e ошибка.)

Я использую функции и устанавливаю переменные равными результатам функции.

Sub SelectQuadrantAndPlanets() 

Dim quadrant As Range 
Dim planetColor As Long 

Set quadrant = selectQuadrant() 
Set planetColor = selectPlanetColor() '<This is the row that highlights as an error 

Call selectAllPlanets(quadrant, planetColor) 

End Sub 

Это функция, я использую, чтобы выбрать цвет, который я хочу, чтобы выделить в моем диапазоне
я попеременно быть в порядке с использованием внутреннего цвета из диапазона, который я выбираю, но Я не знал, как установить цвет интерьера как переменную, поэтому вместо этого я пошел с 1, 2 или 3 в поле ввода.

Function selectPlanetColor() As Long 

Dim Color As Integer 

Color = InputBox("What Color" _ 
& vbNewLine & "1 = Large Planets" _ 
& vbNewLine & "2 = Medium Planets" _ 
& vbNewLine & "3 = Small Planets") 

Dim LargePlanet As Long 
Dim MediumPLanet As Long 
Dim smallPlanet As Long 
    LargePlanet = 5475797 
    MediumPlanet = 9620956 
    smallPlanet = 12893591 


If Color = 1 Then 
    selectPlanetColor = LargePlanet 
Else 
    If Color = 2 Then 
     selectPlanetColor = MediumPlanet 
    Else 
     If Color = 3 Then 
      selectPlanetColor = smallPlanet 
     End If 
    End If 
End If 


End Function 

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

+2

Что такое 'Cell.Address'? Вы хотите использовать выбранную ячейку? Как «Set StartingCell = Cells (R, cNum) .Address'? Или, '... = Диапазон (ячейки (R, cNum), ячейки (R, cNum))'? Кроме того, лучше использовать [.Select'/'.Activate'] (https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros). в VBA. Edit: Кроме того, я думаю, что вы хотите 'cNum = Range (C &:: 1"). Столбец ', предполагающий' C', является Lettter – BruceWayne

+0

Я, честно говоря, только что видел его (Cell.Address), который использовался в другом месте и думал, может быть, он что-то сделал Мне было нужно. Я крайний newb (я начал, как 2 дня назад) – jessmariemetal

+0

@jessmariemetal вы проверили какие-либо из ответов ниже? любая обратная связь? –

ответ

0

Это намного проще.Только

Set StartingCell = Cells(R, C) 

после получения ввода, затем End Function.

Магия метода Cells принимается за его второй параметр как номер или знак. То есть:

Cells(3, 4) < =>Cells(3, "D")

и

Cells(1, 28) < =>Cells(3, "AB")

Еще одна вещь, вы можете предложить пользователю непосредственно ввести диапазон, с помощью только одного ввода , например:

Dim myRange as Range 
Set myRange = Application.InputBox(Prompt:="Enter a range: ", Type:=8) 

Type:=8 указывает, что введенный запрос является диапазоном.

Последняя вещь, так как вы находитесь в процессе обучения VBA, избежать как можно больше:

  • используя Select и Activate материал

  • используя неквалифицированных диапазоны. Это относится везде, где методы Cells(..) или Range(..) появляются без точки . перед ними. Это обычно приводит к некоторым случайным проблемам, потому что они относятся к ActiveSheet, что означает, что поведение подпрограммы будет зависеть от того, что является активным листом в момент их запуска. Избегайте этого и всегда указывайте явно, из которого вы определяете диапазон.

0

Продолжая вашу линию мысли выбора диапазона BU Выбор столбца и строки с помощью InputBox, используйте Application.InputBox и добавьте Type в конце, чтобы ограничить возможности пользователя к типу вы хотите (Type:= 1 >> String, Type:= 2 >> Номер).

Функция StartingCell Код

Function StartingCell() As Range 

Dim cNum As Integer 
Dim R As Integer 
Dim C As Variant 

C = Application.InputBox(prompt:="Starting Column:", Type:=2) '<-- type 2 inidcates a String 
R = Application.InputBox(prompt:="Starting Row:", Type:=1) '<-- type 1 inidcates a Number 

Set StartingCell = Range(Cells(R, C), Cells(R, C)) 

End Function 

Sub TestFunc Код (для проверки функции)

Sub TestFunc() 

Dim StartCell As Range 
Dim StartCellAddress As String 

Set StartCell = StartingCell '<-- set the Range address to a variable (using the function) 
StartCellAddress = StartCell.Address '<-- read the Range address to a String 

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