Конкатенация переменных в строку для установки в диапазон в VBA - PullRequest
2 голосов
/ 04 августа 2011

У меня проблема с определенной строкой кода:

ActiveSheet.Range("A" & rowCount & ":" & Mid(alphabet, totHdrLngth, 1) & belowRowCount)

Где алфавит - это строка, содержащая заглавные буквы от A до Z.

Я получаю следующую ошибку:

Run-time error '5':
Invalid Procedure call or argument

Я попытался создать строку «inRange» и изменить код на это:

inRange = "A" & rowCount & ":" & Mid(alphabet, totHdrLngth, 1) & belowRowCount
curRange = ActiveSheet.Range(inRange)

Но это не помогло (как я думал, что это не так).Есть предложения?

Ответы [ 2 ]

4 голосов
/ 07 августа 2011

Несмотря на то, что создание подобных диапазонов в целом не одобряется, способ сделать это с помощью слова SET (как @Gary McGill, указанный в комментариях). Вот пример того, как это сделать:

Sub test()

Dim alphabet As String
Dim totHrdrLngth As Long
Dim belowRowCount As Long
Dim rowCount As Long
Dim inRange As Range

alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
totHrdrLngth = 5
belowRowCount = 10
rowCount = 5

' Gives us A5:E10
Set inRange = Range("A" & rowCount & ":" & range2 & _
                    Mid$(alphabet, totHrdrLngth, 1) & belowRowCount)

End Sub

Этот макрос выполняется в текущем диапазоне, поэтому не нужно указывать ActiveSheet.Range. Надеюсь, это поможет вам достичь того, чего вы пытаетесь достичь.

0 голосов
/ 05 августа 2011

Насколько я могу судить, вы получаете ошибку, потому что ваши типы не совпадают. Я предполагаю, что rowCount является целым числом, как и ниже RowCount. Если вы преобразуете их в строки перед объединением, вы можете это исправить. str () преобразует целое число в строку с пробелом перед ней, а LTrim () удаляет пробел. Попробуйте код как показано ниже:

Dim sRowCount As String
Dim sBelowRowCount As String

и позже

sRowCount = LTrim(Str(RowCount))
sBelowRowCount = LTrim(Str(belowRowCount))

inRange = "A" & sRowCount & ":" & Mid(alphabet, totHdrLngth, 1) & sBelowRowCount
curRange = ActiveSheet.Range(inRange)

Надеюсь, это поможет.

...