VBA RBG - «Неверное количество аргументов или неверный аргумент свойства» - PullRequest
0 голосов
/ 03 октября 2018

Я знаю, что есть и другие вопросы, связанные с «неправильным числом аргументов или неправильным назначением свойства», но ни один из них не касается этой ошибки, возникающей в базовой строке, присваивающей цвет RGB внутренней части ячейки.

Эта ошибка генерируется в строке 6 ниже.Я не понимаю, как это возможно, поскольку у RGB есть три аргумента.

Единственное, о чем я могу думать, это то, что сегодня ранее я написал макрос в другой (теперь закрытой электронной таблице), где я использовал инициалы «rgb» в качестве имени варианта.Я знаю, что в R можно случайно переопределить базовую функцию, заменив ее на UDF, и мне интересно, возможно, я теперь невольно изменил «rgb» на нечто отличное от функции в базовом коде VBA,Но это не звучит правдоподобно - я никогда не слышал о том, что происходит в VBA, и это скорее язык типа «для чайников», который, как я не думал, даст пользователям такую ​​возможность.

РЕДАКТИРОВАТЬ Да - эта проблема решается путем изменения имени макроса, что является глупой ошибкой.Тем не менее, я хотел бы отметить, что эта ошибка также происходит в другой подпрограмме, которую я не назвал так глупо.Мне нужно будет выяснить, почему это происходит в этой субмарине.

Option Explicit
Sub RGB()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = Sheets("Sheet1")

ws.Range("G20").Interior.Color = RGB(255, 51, 204)
End Sub

1 Ответ

0 голосов
/ 03 октября 2018

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

ранее сегодня, я написал макрос в другой (теперь закрытой электронной таблице), где я использовалинициалы «rgb» в качестве имени варианта.

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


Это будет работать:

Option Explicit

Sub Set_G20_RGB()
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ThisWorkbook
    Set ws = Sheets("Sheet1")   ' should really be Set ws = wb.Sheets("Sheet1")
    ws.Range("G20").Interior.Color = RGB(255, 51, 204)
End Sub

Однако, чтобы сделать этонемного более полезным, вы можете использовать что-то вроде:

Option Explicit

Sub Set_RGB(clr_rng As Range, red_value As Integer, grn_value As Integer, blu_value As Integer)
    clr_rng.Interior.Color = RGB(red_value, grn_value, blu_value)
End Sub

Что можно назвать так:

Set_RGB ThisWorkbook.Sheets("Sheet1").Range("G20"), 255, 51, 204

или ..

Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")

Set_RGB ws.Range("G20"), 255, 51, 204
...