формула, возвращающая #NAME внутри цикла через выбор из поля ввода - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть маленький макрос, и я хотел бы, чтобы он выполнял следующее: в первом поле ввода пользователю предлагается выбрать пустой диапазон, в котором он хочет, чтобы в каждой ячейке этого диапазона был дебет / кредит… Второе поле ввода попросите пользователя выбрать диапазон сумм (каждая сумма в каждой ячейке этого диапазона может быть как отрицательной, так и положительной). Затем из этих 2 выборок я хотел бы, чтобы он возвращал «D» (дебет) или «C» (кредит) в каждой ячейке, где был выбран диапазон первого поля ввода. К сожалению, мой макрос не работает должным образом, действительно, когда я пытаюсь выполнить его, он возвращает мне #NAME? (вместо «C» или «D») В каждой ячейке диапазона, выбранного через мое первое поле ввода. Например, на рисунке ниже я выбрал в своем 1-м поле ввода диапазон K2: K5 (как пустой диапазон), а через мой второй блок ввода - диапазон C2: C5, после выполнения макроса он возвращает мне #NAME в каждой ячейке диапазона К2: К5. Большое спасибо заранее за вашу помощь. Хави Пожалуйста, найдите мой код VBA ниже:

Sub ReturncorrectCreditdebitcolumnbasedonselectioninputbox()
Dim c As Range
Dim WorkRng2 As Range
Dim WorkRng As Range
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Please select the range where you want your Dedit/Credit", xTitleId, WorkRng.Address, Type:=8)
Set WorkRng2 = Application.Selection
Set WorkRng2 = Application.InputBox("Please select the range of amounts", xTitleId, WorkRng.Address, Type:=8)
For Each c In WorkRng
c.FormulaR1C1 = _
 "=If(WorkRng2.Value>0, ""D"",""C"")"
 Next c
End Sub

enter image description here

1 Ответ

0 голосов
/ 14 ноября 2018

Невозможно сравнить значение нескольких ячеек за один раз, поэтому оно будет работать только в том случае, если WorkRng2 - это одна ячейка. Попробуйте нижеприведенное, что является моим лучшим предположением о том, что вы пытаетесь сделать.

Sub ReturncorrectCreditdebitcolumnbasedonselectioninputbox()

Dim c As Long
Dim WorkRng2 As Range
Dim WorkRng As Range

Set WorkRng = Application.InputBox("Please select the range where you want your Dedit/Credit", , , Type:=8)
Set WorkRng2 = Application.InputBox("Please select the range of amounts", , , Type:=8)

If WorkRng.Count <> WorkRng2.Count Then
    MsgBox "Ranges must be same size"
Else
    For c = 1 To WorkRng.Count
        WorkRng.Cells(c).Formula = "=If(" & WorkRng2.Cells(c).Value & ">0, ""D"",""C"")"
    Next c
End If

End Sub
...