Стереть массивы с переменной - PullRequest
0 голосов
/ 29 мая 2020

Я создаю макрос с таблицей данных, содержащей 185 столбцов. Мне нужно захватить данные в каждом столбце для общего количества строк в листе данных (может быть, 800).

Я хочу захватить все данные, поэтому я создал такие переменные, чтобы число соответствовало номер столбца:

Public vVar1() as string
Public vVar2() as string
Public vVar3() as string
Public vVar4() as string.....etc.

Я хочу стереть массив и пытаюсь сделать что-то вроде этого:

vCnt = 1
 vTmp = ""

 Do Until vCnt = 186
      DoEvents
      vTmp = "vVar"
      vTmp = vTmp & vCnt

      Erase vTmp

      vCnt = vCnt + 1

Loop

Однако я получаю «Ожидаемый массив» сообщение об ошибке в строке «Erase vTmp». Я пытался сделать это таким образом, вместо того, чтобы использовать ERASE vTMP1, ERASE vTmp2 ..... еще 183 раза.

Есть способ сделать это? Спасибо ...... Любые предложения были бы весьма признательны. Еще раз спасибо.

1 Ответ

1 голос
/ 30 мая 2020
Erase vTmp

vTmp здесь Variant/String, а не массив. Тот факт, что строка соответствует имени программного идентификатора c, не делает ее волшебной строкой, которая произвольно становится фактическим идентификатором в зависимости от контекста, как это было бы в PHP - и это очень и очень хорошо.

Проблема реальная состоит в том, что нужно очистить в первую очередь 185 массивов. Всякий раз, когда вы чувствуете необходимость что-то пронумеровать - что-нибудь - существует 99% вероятности, что вы оказались не в том месте и вместо этого вам нужно подумать о структуре данных. Как сказал Тим, массив из 185 элементов, которые сами по себе являются массивами, имеет гораздо больший смысл, чем наличие 185 переменных , которые go именами от vVar1 до vVar185.

И тогда вы можете Erase их, потому что теперь вы имеете дело с массивами, а не со строками:

For i = 0 To 184
    Erase allArrays(i)
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...