An exception occurred as described below source tmacv6 error 9 subscript out of range

Ошибка выполнения макроса Runtime Error 9: Subscript Out of Range VBA Решение и ответ на вопрос 913143
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
Sub Statistika()
 SearchingPath = Application.GetOpenFilename("Ôàéëû Microsoft Office Excel (*.xls), *.xls", _
 Title:="Ïîèñê ôàéëîâ äëÿ áàçû äàííûõ (Car*.xls)")
 
 'Ìåõàíèçì âûäåëåíèÿ ïóòè ê ïàïêå èç ïîëíîãî ïóòè ê ôàéëó
 k = InStr(1, StrReverse(SearchingPath), "")
 SearchingPath = Left(SearchingPath, Len(SearchingPath) - k + 1)
 
 Application.ScreenUpdating = False
 
 'Íîâûé ñïîñîá çàäàíèÿ ïàïêè ñ ôàéëàìè
 'With Application.FileDialog(msoFileDialogFolderPicker)
 '    .Show
 '    SearchingPath = .SelectedItems(1)
 'End With
 
 Set DataCell = Workbooks("statistika").Sheets("Ñóììû").Range("A1")
 With Application.FileSearch
   .LookIn = SearchingPath
   '.Filename = SearchingPath
   .Filename = "Car*.xls"
   .Execute
   NumOfFiles = .Execute
   For i = 1 To .FoundFiles.Count
  'ïðîâåðêà íàõîæäåíèÿ îáðàáîòàííîãî ôàéëà â áàçå äàííûõ
    Do
     
     'ìåõàíèçì âûäåëåíèÿ íàçâàíèÿ ôàéëà èç ïîëíîãî ïóòè ê íåìó
     FullName = .FoundFiles(i)
     k = InStr(1, StrReverse(FullName), "")
     Path = Left(FullName, Len(FullName) - k + 1)
     Filename = Right(FullName, k - 1)
     
     
     'DataCell.Range("I2").FormulaR1C1 = _
      '  "=MID(R[0]C[-1],4,2)&"".""&MID(R[0]C[-1],6,2)&"".99"""
     'DataCell.Range("G1").Copy
     Set NameCell = Workbooks("statistika").Sheets("Ñóììû").Range("C9900")
     Do
      Set NameCell = NameCell.Offset(1, 0)
      s = NameCell.Address
      d = NameCell.Value
      If NameCell.Value = Filename Then
        'MsgBox ("Ôàéë " & FileName & " óæå îáðàáàòûâàëñÿ")
        i = i + 1
      End If
     Loop Until IsEmpty(NameCell.Offset(0, -1)) Or (NameCell.Value = Filename)
    Loop Until IsEmpty(NameCell.Offset(0, -1)) Or i > .FoundFiles.Count
    
    If Not (i > .FoundFiles.Count) Then
     Workbooks.Open (.FoundFiles(i))
     'Sheets("Car").Activate
     Set CarCell = Sheets("Car").Range("A1")
    'Íàõîæäåíèå ïåðâîé ïóñòîé ÿ÷åéêè â òàáëèöå
     Set DataCell = Workbooks("statistika").Sheets("Ñóììû").Range("A1")
     Do
       Set DataCell = DataCell.Offset(1, 0)
     Loop Until IsEmpty(DataCell.Range("B1")) And IsEmpty(DataCell.Range("C1"))
     
     s = DataCell.Address
     With DataCell
     'Ïåðåíîñ "øàïêè" (îáùèõ äàííûõ) â áàçó
        .Range("C1").Value = Filename
        .Range("B1").FormulaR1C1 = _
        "=MID(R[0]C[1],4,2)&"".""&MID(R[0]C[1],6,2)&"".07"""
        .Range("G1").Copy
        
        
     'ñôîðìèðîâàííàÿ ñòðîêà ÿâëÿåòñÿ øàáëîíîì îáùèõ äàííûõ. Îíà óäàëÿåòñÿ
        Set ShablonRow = _
         Workbooks("statistika").Sheets("Ñóììû").Range(DataCell.Row & ":" & DataCell.Row)
     'Ïåðåíîñ äàííûõ î òîâàðå â áàçó
        Set CarCell = Workbooks(Filename).Sheets("Car").Range("A1")
        
        Do
         If Not (CarCell.Column > 20) Then
           Set CarCell = CarCell.Offset(0, 1)
         Else
           Set CarCell = CarCell.Offset(1, -20)
         End If
        Loop Until (CarCell.Value = "òîâàð") Or (CarCell.Row > 50)
        
       If Not (CarCell.Value = "òîâàð") Then
        MsgBox ("ÿ÷åéêè ñî çíà÷åíèåì ""òîâàð"" â ôàéëå " & Filename & " íåò")
       Else
        Set BegCell = CarCell
        s = CarCell.Address
        
        Do
         If Not (CarCell.Column > 20) Then
            Set CarCell = CarCell.Offset(0, 1)
         Else
            Set CarCell = CarCell.Offset(1, -20)
         End If
         If IsEmpty(CarCell) Then
          n = n + 1
         Else
          n = 0
         End If
         s = CarCell.Address
        Loop Until (CarCell.Value = "Âñåãî:") Or (n > 20 * 20)
        
       If Not (CarCell.Value = "Âñåãî:") Then
        MsgBox ("ÿ÷åéêè ñî çíà÷åíèåì ""Âñåãî:"" â ôàéëå " & Filename & " íåò")
       Else
        Set EndCell = CarCell
        s = EndCell.Address
        Set CarCell = Workbooks(Filename).Sheets("Car").Range("A1")
        Set CarCell = BegCell.Offset(1, -1) 'ñòðîêà ïîñëå BegCell, ñòîëáåö À
        Do
         With CarCell
         'ïîñòàâùèê
          s = CarCell.Address
          If Not IsEmpty(.Range("B1")) And ((.Range("B1").Font.ColorIndex = 3) Or _
          (.Range("B1").Font.ColorIndex = 10) Or (.Range("B1").Font.ColorIndex = 43)) And _
          IsEmpty(.Range("A1")) Then
           vFirma = .Range("B1").Value
           Set CarCell = CarCell.Offset(1, 0)
           s = CarCell.Address
           bool = False
           Do
            With CarCell
             If Not IsEmpty(.Range("H1")) And ((.Range("H1").Font.ColorIndex = 3) Or _
              (.Range("H1").Font.ColorIndex = 10) Or (.Range("H1").Font.ColorIndex = 43)) _
              And IsEmpty(.Range("A1")) Then
               vSumma = .Range("H1").Value
               Set DataCell = DataCell.Offset(1, 0)
               ShablonRow.Copy
               DataCell.Range("1:1").PasteSpecial
               DataCell.Range("F1").Value = vSumma
               DataCell.Range("G1").Value = vFirma
               bool = True
               Set CarCell = CarCell.Offset(-2, 0)
               s = CarCell.Address
             End If
             Set CarCell = CarCell.Offset(1, 0)
             s = CarCell.Address
            End With
           Loop Until bool
          End If
          Set CarCell = CarCell.Offset(1, 0)
          s = CarCell.Address
         End With
        Loop Until CarCell.Row = EndCell.Row - 1
       End If 'âñåãî:
       End If 'òîâàð
     End With
     ShablonRow.Delete shift:=xlUp
     .Filename = .FoundFiles(i)
     Workbooks(Filename).Close SaveChanges:=False
     'MsgBox ("Çàêîí÷åíà îáðàáîòêà ôàéëà " & .FileName)
     'Workbooks("statistika").Save
    End If ' not(i > .FoundFiles.Count)
   Next i
   'MsgBox ("Îáðàáîòêà äàííûõ çàêîí÷åíà")
   Application.ScreenUpdating = True
 End With
 
 
 
End Sub
 

tgg

Пользователь

Сообщений: 12
Регистрация: 23.02.2014

Добрый вечер знатоки. Простой макрос стал прерываться ошибка runtime error 9 subscript out of range, долго искал причину.. а оказалось дело в следующем. При открытии другой Книги, или работая в другой книге в момент когда запускаются макросы (2 шт.каждые 60сек) в Книге1 и вылетает error

Изменено: tgg16.03.2018 10:48:28

 

А где собственно вопрос?

С уважением,
Федор/Все_просто

 

tgg

Пользователь

Сообщений: 12
Регистрация: 23.02.2014

#3

27.03.2015 20:31:46

На строке With Worksheets(«Лист1») всё и происходит!
Что надо изменить в коде (?) для работы одновременно в разных Книгах EXCEL

Код
Sub ShowWatch()     
ThisWorkbook.Sheets(1).Range("F1").Value = Now - Date     
Application.OnTime Now + TimeSerial(0, 0, 60), "ShowWatch"     
Application.OnTime Now + TimeSerial(0, 0, 60), "Proverka" 
End Sub 

Private Sub "Proverka"() 
With Worksheets("Лист1")             
If [I2] = "a" Then                 
Exit Sub             
 End If             
If [J2] <> "Ok" Then                 
Exit Sub             
 End If 
OtpravkaPisma     
[I2] = "a"     
[G2] = [D139]     
[G2].Value = [G2].Value         
End With End Sub

Изменено: tgg31.03.2015 22:50:24

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#4

27.03.2015 20:46:12

Начало второй процедуры:

Код
Private Sub Proverka()
With ThisWorkbook.Worksheets("Лист1")
  If .Range("I2") = "a" Then

Аналогично переделайте все квадратные скобки.

 

tgg

Пользователь

Сообщений: 12
Регистрация: 23.02.2014

Вот в чём вопрос??
Пол часа полёт нормальный!
Спасибо огромное, все работает.
Но мучает вопрос, в чем косяк случился?

Изменено: tgg31.03.2015 22:50:35

 

1. Worksheets(«Лист1»)  — без указания принадлежности к книге, относится к активной в момент запуска макроса книге. Видимо, в ней нет листа Лист1.
2. Оператор With фактически не работает, т.к. нигде нет обращения к свойству или методу, начинающегося с точки.
3. [I2], т.е. Range(«I2») — без указания листа, относится к активному в момент запуска макроса листу.

 

tgg

Пользователь

Сообщений: 12
Регистрация: 23.02.2014

Еще раз огромное спасибо!!

 

Юрий М

Модератор

Сообщений: 60383
Регистрация: 14.09.2012

Контакты см. в профиле

tgg, два момента:
1. Свои коды оформляйте соответствующим тегом — посмотрите, как выглядит код у Казанского.
2. Не нужно цитировать всё подряд.

 

tgg

Пользователь

Сообщений: 12
Регистрация: 23.02.2014

#9

19.06.2015 22:03:22

Доброго времени суток! Не прошло и полгода …. Я к Вам с поклоном и вопросом.
Макрос в модуле листа из этой темы (

http://www.planetaexcel.ru/forum/?FID=8&PAGE_NAME=read&TID=30902

), с той лишь разностью, что работает с диапазоном — If Not Intersect(ActiveCell, Range(«E18:E27»)) Is Nothing Then. Вот собственно сам макрос:

Код
Option Explicit 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Not Intersect(ActiveCell, Range("E18:E27")) Is Nothing Then 
        Call Module1.Spravka 
    End If 
End Sub 

Но старая песня, опять при открытии другой книги excel этот макрос зачем-то срабатывает и встаёт на 2 строке.
Подскажите пожалуйста, как его поправить!?!
Спасибо!

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

Когда открывается книга, то она становится активной, и поэтому Ваш диапазон Range(«E18:E27») относится уже к ОТКРЫТОЙ книге.

There is no knowledge that is not power

 

tgg

Пользователь

Сообщений: 12
Регистрация: 23.02.2014

Пробовались разные варианты, это первый вариант макроса, с указанием листа и принадлежности к книге. Но результат всегда был один и тот же.

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#12

19.06.2015 22:20:38

Цитата
tgg написал: Пробовались разные варианты

Ну так покажите эти «разные» варианты.

There is no knowledge that is not power

 

tgg

Пользователь

Сообщений: 12
Регистрация: 23.02.2014

Так они ведь не работают как надо!

 

Rjn

Пользователь

Сообщений: 6
Регистрация: 16.03.2018

#14

16.03.2018 09:08:30

Добрый день!
В макросах новичок, второй день разбираюсь.
Подскажите  пожалуйста.
Есть макрос который из одного файла переносит информацию в другой файл.
Другой файл называется «Система прогнозирования свободных остатков_пробный.xlsm»
Если этот файл открыт, то  данные переносятся, если файл закрыт, то данные не переносятся и выходит ошибка subscript out of range
Ниже макрос

Код
Dim sbor As Range

Sub PerenosSbor()
   Dim lStart As Long, lEnd As Long, lLastRow As Long

   Application.ScreenUpdating = False
   Application.EnableEvents = False

  Workbooks("Система прогнозирования свободных остатков_пробный.xlsm").Save

   Application.Wait (Now + TimeValue("0:00:3"))

   '1. Определение первой ячейки с данными в столбце "A".
   'After:=Cells(Rows.Count, "A") указывает, с какой ячейки начать поиск.
   'Если не указывать, то поиск ведётся с ячейки "A1" и первой просматриватся
   'ячейка "A2". Если данные уже есть в ячейке "A1", то результат
   'будет неправильным. Поэтому нужно указать ячейку, с которой начинается поиск.

   lStart = Columns("A").Find(What:="?", After:=Cells(1, "A"), _
       LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
       SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row

   '2. Определение последней ячейки с данными в столбце "A".

   lEnd = Columns("A").Find(What:="?", LookIn:=xlValues, LookAt:=xlPart, _
       SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
       MatchCase:=False, SearchFormat:=False).Row

   '3. Выделение диапазона с данными в столбце "A".

  Set sbor = Range("A" & lStart & ":G" & lEnd)

With Workbooks("Система прогнозирования свободных остатков_пробный.xlsm").Worksheets("1.СБОР")
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
On Error Resume Next
.ShowAllData
sbor.Copy
.Range("A" & lLastRow).PasteSpecial xlPasteValuesAndNumberFormats
End With

Workbooks("Система прогнозирования свободных остатков_пробный.xlsm").Save
   Application.ScreenUpdating = True
   Application.EnableEvents = True
End Sub
 

Rjn

Пользователь

Сообщений: 6
Регистрация: 16.03.2018

В чем ошибка???
На сколько я знаю  историю создания макроса, данный макрос так же  писал не профи)

 

Hugo

Пользователь

Сообщений: 23134
Регистрация: 22.12.2012

Ведь естественно — если файл закрыт, то при попытке его сохранения должна быть ошибка.

 

Sanja

Пользователь

Сообщений: 14837
Регистрация: 10.01.2013

#17

16.03.2018 09:19:33

Цитата
Rjn написал: В чем ошибка?

Вы же выше сами написали, что

Цитата
Rjn написал: Если этот файл открыт, то  данные переносятся, если файл закрыт, то данные не переносятся

Макрос написан именно так, что файл должен быть предварительно открыт

Согласие есть продукт при полном непротивлении сторон.

 

Rjn

Пользователь

Сообщений: 6
Регистрация: 16.03.2018

А где и как исправить макрос, что бы он работал при закрытом  файле?

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

1. Код в сообщении  следует оформлять кнопкой <…>
2. Не нужно форматировать шрифт мелким. Стандартный нормально смотрится.

 

vsahno

Пользователь

Сообщений: 42
Регистрация: 22.07.2017

#20

21.02.2019 19:08:28

Цитата
tgg написал:
Так они ведь не работают как надо!

У меня не были прописаны ПОЛНЫЕ ИМЕНА ФАЙЛОВ! — только название, без расширения:
Workbooks(«Авторизация»).Worksheets(«Лист8»)
НА моем компе макросы работали как надо! НО при установке у клиента … как там — …»runtime error 9 subscript out of range». Главное у них и по сети на 1 компе все прекрасно работало!!!
Пока додумался до: Workbooks(«Авторизация.xlsm»).Worksheets(«Лист8») —  больше часа убил и вспотел! :)

Подстрочный индекс Excel VBA вне допустимого диапазона

Индекс вне диапазона — это ошибка, с которой мы сталкиваемся в VBA, когда пытаемся сослаться на что-то или на переменную, которая не существует в коде, например, предположим, что у нас нет переменной с именем x, но мы используем функцию msgbox для x, которую мы столкнется с ошибкой нижнего индекса вне диапазона.

Ошибка VBA Subscript out of range возникает из-за того, что объект, к которому мы пытаемся получить доступ, не существует. Это тип ошибки в Кодирование VBAКод VBA относится к набору инструкций, написанных пользователем на языке программирования приложений Visual Basic в редакторе Visual Basic (VBE) для выполнения определенной задачи.читать далее, и это «Ошибка времени выполнения 9». Важно понимать принципы написания эффективного кода, и еще более важно понимать ошибка вашего кода VBAОбработка ошибок VBA относится к устранению различных ошибок, возникающих при работе с VBA. читать далее для эффективной отладки кода.

Если ваша ошибка кодирования, и вы не знаете, что это за ошибка, когда вы ушли.

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

На аналогичном примечании в этой статье мы увидим одну из важных ошибок, с которыми мы обычно сталкиваемся регулярно, то есть ошибку «Нижний индекс вне диапазона» в Excel VBA.

Нижний индекс VBA вне допустимого диапазона

Вы можете использовать это изображение на своем веб-сайте, в шаблонах и т. д. Пожалуйста, предоставьте нам ссылку на авторствоСсылка на статью должна быть гиперссылкой
Например:
Источник: Нижний индекс VBA вне допустимого диапазона (wallstreetmojo.com)

Что такое ошибка нижнего индекса вне диапазона в Excel VBA?

Например, если вы обращаетесь к листу, которого нет в рабочей тетради, то мы получаем Ошибка времени выполнения 9: «Нижний индекс вне диапазона».

Индекс вне диапазона

Если вы нажмете кнопку «Конец», подпроцедура завершится, если вы нажмете «Отладка», вы перейдете к строке кода, где произошла ошибка, а справка приведет вас на страницу веб-сайта Microsoft.

Почему возникает ошибка Subscript Out of Range?

Как я сказал как врач важно найти покойника, прежде чем думать о лекарстве. Ошибка VBA Subscript out of range возникает, когда строка кода не читает введенный нами объект.

Например, посмотрите на изображение ниже. У меня есть три листа с именами Лист1, Лист2, Лист3.

Субскрипт VBA вне допустимого диапазона, пример 1

Теперь в коде я написал код для выбора листа «Продажи».

Код:

Sub Macro2()

   Sheets("Sales").Select

End Sub

Субскрипт VBA вне допустимого диапазона Пример 1-1

Если я запущу этот код с помощью клавиши F5 или вручную, я получу Ошибка времени выполнения 9: «Нижний индекс вне диапазона».

Субскрипт VBA вне допустимого диапазона Пример 1-2

Это потому, что я пытался получить доступ к объекту рабочего листа «Продажи», который не существует в рабочей книге. Это ошибка времени выполнения, поскольку эта ошибка возникла при выполнении кода.

Другая распространенная ошибка нижнего индекса, которую мы получаем, — это когда мы ссылаемся на книгу, которой там нет. Например, посмотрите на приведенный ниже код.

Код:

Sub Macro1()

  Dim Wb As Workbook

  Set Wb = Workbooks("Salary Sheet.xlsx")

End Sub

Субскрипт VBA вне допустимого диапазона Пример 1-3

Приведенный выше код говорит, что переменная WB должна быть равна рабочей книге «Salary Sheet.xlsx». На данный момент эта книга не открывается на моем компьютере. Если я запущу этот код вручную или через клавишу F5, я получу Ошибка времени выполнения 9: «Нижний индекс вне диапазона».

Субскрипт VBA вне допустимого диапазона Пример 1-4

Это связано с книгой, о которой я говорю, которая либо не открыта, либо вообще не существует.

Ошибка индекса VBA в массивах

Когда вы объявляете массив как динамический массив и не используете слово DIM или РЕДИМ в VBAОператор VBA Redim увеличивает или уменьшает объем памяти, доступный для переменной или массива. Если с этим оператором используется Preserve, создается новый массив другого размера; в противном случае изменяется размер массива текущей переменной.читать далее чтобы определить длину массива, мы обычно получаем ошибку VBA Subscript out of range. Например, посмотрите на приведенный ниже код.

Код:

Sub Macro3()

   Dim MyArray() As Long

   MyArray(1) = 25

End Sub

Субскрипт VBA вне допустимого диапазона, пример 2

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

Если я запущу этот код с помощью клавиши F5 или вручную, мы получим Ошибка времени выполнения 9: «Нижний индекс вне диапазона».

Пример диапазона 2-1

Чтобы решить эту проблему, мне нужно присвоить длину массива с помощью слова Redim.

Код:

Sub Macro3()

   Dim MyArray() As Long
   ReDim MyArray(1 To 5)

   MyArray(1) = 25

End Sub

Пример диапазона 2-2

Этот код не выдает никаких ошибок.

Как показать ошибки в конце кода VBA?

Если вы не хотите видеть ошибку, пока код запущен и работает, но вам нужен список ошибок в конце, вам нужно использовать обработчик ошибок «On Error Resume». Посмотрите на приведенный ниже код.

Код:

Sub Macro1()

Dim Wb As Workbook
On Error Resume Next
Set Wb = Workbooks("Salary Sheet.xlsx")

MsgBox Err.Description

End Sub

Вне диапазона Пример 3

Как мы видели, этот код выдает Ошибка времени выполнения 9: «Нижний индекс вне диапазона в экселе VBA. Но я должен использовать обработчик ошибок При ошибке продолжить дальше в VBAОператор VBA On Error Resume — это аспект обработки ошибок, используемый для игнорирования строки кода, из-за которой возникла ошибка, и продолжения со следующей строки сразу после строки кода с ошибкой.читать далее во время выполнения кода. Никаких сообщений об ошибках мы не получим. Скорее в конце окна сообщения отображается описание ошибки, подобное этому.

Субскрипт вне допустимого диапазона Пример 3-1

Вы можете скачать шаблон подписки Excel VBA вне диапазона здесь: — Подстрочный индекс VBA вне шаблона диапазона

УЗНАТЬ БОЛЬШЕ >>

Post Views: 693

I have a problem in excel Vba when I try to run this code, I have an error of subscript out of range:

Private Sub UserForm_Initialize()
  n_users = Worksheets(Aux).Range("C1").Value

  Debug.Print Worksheets(Aux).Range("B1:B" & n_users).Value

  ListBox1.RowSource = Worksheets(Aux).Range("B1:B" & n_users).Value

  ComboBox1.RowSource = Worksheets(Aux).Range("B1:B" & n_users).Value
  ComboBox2.RowSource = Worksheets(Aux).Range("B1:B" & n_users).Value

End Sub

And Debug.Print works well, so the only problem is in Range(«B1:B» & n_users).Value.

asked Oct 19, 2013 at 15:15

user2898085's user avatar

user2898085user2898085

492 gold badges4 silver badges14 bronze badges

5

If the name of your sheet is «Aux», change each Worksheets(Aux) reference to Worksheets("Aux"). Unless you make Aux a string variable, for example:

Dim Aux As String  
Aux = "YourWorksheetName"
n_users = Worksheets(Aux).Range(C1).Value

you must use quatations around sheet references.

answered Oct 19, 2013 at 16:36

ARich's user avatar

ARichARich

3,2004 gold badges30 silver badges56 bronze badges

1

Firstly, unless you have Aux defined somewhere in the actual code, this will not work. The sheet-name reference must be a string value, not an empty variable (which ARich explains in his answer).

Second, the way in which you are trying to populate the rowsource value is incorrect. The rowsource property of a combobox is set using a string value that references the target range. By this I mean the same string value you would use in an excel formula to reference a cell in another sheet. For instance, if your worksheet is named «Aux» then this would be your code:

ComboBox1.RowSource = "Aux!B1:B" & n_users

I think you can also use named ranges. This link explains it a little.

answered Oct 19, 2013 at 18:13

Ross Brasseaux's user avatar

Ross BrasseauxRoss Brasseaux

3,8411 gold badge27 silver badges46 bronze badges

2

I can’t see how you can get an Error 9 on that line. As others have pointed out repeatedly, the place you’ll get it is if the variable Aux doesn’t have a string value representing the name of a worksheet. That aside, I’m afraid that there is a LOT wrong with that code. See the comments in the below revision of it, which as near as I can figure is what you’re trying to get to:

Private Sub UserForm_Initialize()

  'See below re this.
  aux = "Sheet2"

  'You should always use error handling.
  On Error GoTo ErrorHandler

  'As others have pointed out, THIS is where you'll get a
  'subscript out of range if you don't have "aux" defined previously.
  'I'm also not a fan of NOT using Option Explicit, which
  'would force you to declare exactly what n_users is.
  '(And if you DO have it declared elsewhere, I'm not a fan of using
  'public variables when module level ones will do, or module
  'level ones when local will do.)

  n_users = Worksheets(aux).Range("C1").Value

  'Now, I would assume that C1 contains a value giving the number of
  'rows in the range in column B. However this:

  '*****Debug.Print Worksheets(aux).Range("B1:B" & n_users).Value
   'will only work for the unique case where that value is 1.
   'Why? Because CELLS have values. Multi-cell ranges, as a whole,
   'do not have single values. So let's get rid of that.

  'Have you consulted the online Help (woeful though
  'it is in current versions) about what the RowSource property
  'actually accepts? It is a STRING, which should be the address
  'of the relevant range. So again, unless
  'Range("B1:B" & n_users) is a SINGLE CELL that contains such a string
  '(in which case there's no point having n_users as a variable)
  'this will fail as well when you get to it. Let's get rid of it.
  '****ListBox1.RowSource = Worksheets(aux).Range("B1:B" & n_users).Value

  'I presume that this is just playing around so we'll
  'ignore these for the moment.
  'ComboBox1.RowSource = Worksheets(aux).Range("B1:B" & n_users).Value
  'ComboBox2.RowSource = Worksheets(aux).Range("B1:B" & n_users).Value

  'This should get you what you want. I'm assigning to
  'variables just for clarity; you can skip that if you want.

    Dim l_UsersValue As Long
    Dim s_Address As String
    l_UsersValue = 0
    s_Address = ""

    'Try to get the n_users value and test for validity
    On Error Resume Next
    l_UsersValue = Worksheets(aux).Range("C1").Value
    On Error GoTo ErrorHandler

    l_UsersValue = CLng(l_UsersValue)

    If l_UsersValue < 1 Or l_UsersValue > Worksheets(aux).Rows.Count Then
        Err.Raise vbObjectError + 20000, , "User number range is outside acceptable boundaries. " _
        & "It must be from 1 to the number of rows on the sheet."
    End If

    'Returns the cell address
    s_Address = Worksheets(aux).Range("B1:B" & n_users).Address

    'Add the sheet name to qualify the range address
    s_Address = aux & "!" & s_Address

    'And now that we have a string representing the address, we can assign it.

    ListBox1.RowSource = s_Address

ExitPoint:

   Exit Sub

ErrorHandler:

MsgBox "Error: " & Err.Description

Resume ExitPoint

End Sub

answered Oct 19, 2013 at 20:09

Alan K's user avatar

Alan KAlan K

1,9473 gold badges19 silver badges30 bronze badges

5

Понравилась статья? Поделить с друзьями:
  • An internal exception occurred address themida ошибка
  • An internal error occurred wxwidgets assertion failure please report this problem to us
  • An internal error occurred wxwidgets assertion failure corona
  • An error was encountered while modifying the quorum settings
  • An error was encountered while handling the remote login перевод