Как создать правильные циклы в VB (макро)

Я записал и отполировал следующий макрос, который должен создать дополнительный лист с гипертекстовыми ссылками, указывающими на начальную ячейку каждой таблицы в исходном листе, называемом «All_tables». В этом листе каждая отдельная таблица разделяется символом хеша (#). Смотрите скриншот :

Sub Create_list_of_tables() Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = "list of tables" ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _ "All_Tables!A22", TextToDisplay:="some variable pointing at the table name" Range("A2").Select End Sub 

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

 Sub Create_list_of_tables() Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = "list of tables" Const cStrDivider As String = "#" Dim rMyCell As Range Dim table_number As Long table_number = 0 Do Until table_number = 10 Set rMyCell = Range("cStrDivider").Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _ "All_Tables!&rMyCell", TextToDisplay:="some variable pointing at the table name" ActiveCell.Offset(1, 0).Select table_number = table_number + 1 Loop End Sub 

И это не сработает. Я совершенно не знаком с программированием на макро и VB, поэтому я был бы очень рад, если бы вы могли хотя бы показать мне направление. Является ли мой подход совершенно неправильным?

огромное спасибо

Я не уверен, где именно вы хотите указать гиперссылку, но это должно стать хорошим началом. Что нужно посмотреть:

  • Не используйте инструкции Select или Select . Они медленны и могут вызывать нежелательные последствия. Вместо этого используйте очень явные инструкции, которые не зависят от положения курсора, но rater абсолютная позиция, где вы знаете, что это такое.
  • Используйте метод Find и FindNext объекта диапазона для поиска строк. Когда FindNext ничего не может найти, он ничего не возвращает. Хорошо проверить вместо того, чтобы делать ваш цикл table_number.

обновленный

 Sub Create_list_of_tables() Const cStrDivider As String = "#" Dim sht As Worksheet, rMyCell As Range, rSearchRange As Range Dim testSht As Worksheet, firstMyCell As Range Set sht = ActiveSheet On Error Resume Next Set testSht = ActiveWorkbook.Sheets("All_Tables") If Err.Number <> 9 Then Application.DisplayAlerts = False testSht.Delete Application.DisplayAlerts = True 'important to set back to true! End If On Error GoTo 0 ActiveWorkbook.Sheets.Add After:=Sheets(Sheets.Count) ActiveWorkbook.Sheets(Sheets.Count).Name = "All_Tables" Set rSearchRange = sht.Range("A:A") 'do initial "Find" Set rMyCell = rSearchRange.Find(cStrDivider) Set firstMyCell = rMyCell Do sht.Hyperlinks.Add Anchor:=rMyCell.Offset(0, 1), Address:="All_Tables!" & rMyCell.Address, _ TextToDisplay:="Link" 'get the next "MyCell" to use from the master range to search Set rMyCell = rSearchRange.FindNext(rMyCell) 'increment your table counter (if you want to do this you can still table_number = table_number + 1 Debug.Print firstMyCell.Address Debug.Print rMyCell.Address Loop While firstMyCell.Address <> rMyCell.Address End Sub 

Посмотрите, как это работает.

Interesting Posts

POI поврежденный файл xlsm после вызова XSSFWorkbook.createName

Переменная Excel (одно значение) для заполнения многозначного поля доступа к базе данных

Скопировать более 65000 символов

Excel 2013 VBA Очистить все фильтры фильтров

Excel: оптимизация группы очень тяжелых SUMIFS

Как вы находите и заменяете слово / фразу в excel с помощью C #

Получение события, вызванного после загрузки документа

Транспонирование кадра данных при сохранении информации о типе класса / данных

MySQL-код для преобразования даты и времени Excel

Как рассчитать среднее значение в Excel для ячеек, разделенных на 102 строки?

Присоединение к выражению, которое не поддерживается, произошло, когда осталось присоединиться к двум листам из двух разных книг

Слияние двух столбцов в сводной таблице

Экспортная диаграмма Excel VBA

Когда диалоговое окно loop and solver (Excel VBA)

Вычислить время, прошедшее с помощью Excel

Давайте будем гением компьютера.