Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/КАК найти все Label на форме и присвоить им название с файла - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
КАК найти все Label на форме и присвоить им название с файла
leskris Дата: Понедельник, 26.01.2015, 11:29 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
Вообщем я написал код который меняет язык на форме.
Вот его алгоритм:
1) присваиваю всем LAbel вручную, имя
2) в екселе создаю лист с полями (RU, ENG, CHI, chose, label_name)
3) в столбце chose с помощью функции выбор, определяю язык.
4) дальше такой код
[vba]
Код
Range("LN_P2").find("Label_auto", LookAt:=xlWhole).Select
Label_auto.Caption = Cells(ActiveCell.Row, ActiveCell.Column - 5)
[/vba]
LN_P2 - это столбец label_name
"ActiveCell.Row, ActiveCell.Column - 5" - это столбец chose
Все замечательно работает, НО у меня таких LABEL очень много и я вот думаю скорее всего можно это реализовать намного умнее через объекты.
Например, найти все LAbel на листе, записать в масив и потом как-то искать и сравнивать масив с label_name в файле. Чтобы при добавлении новых лейблов или прочих данных формы, не прхиодилось лезть и добавлять их в код
Вообщем помогите советом и если можно кодом. Это реально сделать или оно того не стоит??


Сообщение отредактировал leskris - Понедельник, 26.01.2015, 12:25
 
Ответить
СообщениеВообщем я написал код который меняет язык на форме.
Вот его алгоритм:
1) присваиваю всем LAbel вручную, имя
2) в екселе создаю лист с полями (RU, ENG, CHI, chose, label_name)
3) в столбце chose с помощью функции выбор, определяю язык.
4) дальше такой код
[vba]
Код
Range("LN_P2").find("Label_auto", LookAt:=xlWhole).Select
Label_auto.Caption = Cells(ActiveCell.Row, ActiveCell.Column - 5)
[/vba]
LN_P2 - это столбец label_name
"ActiveCell.Row, ActiveCell.Column - 5" - это столбец chose
Все замечательно работает, НО у меня таких LABEL очень много и я вот думаю скорее всего можно это реализовать намного умнее через объекты.
Например, найти все LAbel на листе, записать в масив и потом как-то искать и сравнивать масив с label_name в файле. Чтобы при добавлении новых лейблов или прочих данных формы, не прхиодилось лезть и добавлять их в код
Вообщем помогите советом и если можно кодом. Это реально сделать или оно того не стоит??

Автор - leskris
Дата добавления - 26.01.2015 в 11:29
RAN Дата: Понедельник, 26.01.2015, 13:27 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеMy WebPage

Автор - RAN
Дата добавления - 26.01.2015 в 13:27
leskris Дата: Вторник, 27.01.2015, 03:43 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
[vba]
Код

Sub All_TextBoxes()
      Dim oControl As Control
      Worksheets(5).Activate
     For Each oControl In UserForm1.Controls
         If TypeOf oControl Is MSForms.Label Then
      
***** If MSForms.Label.Name = Worksheets(5).Cells("A1:AA1000").find(MSForms.Label.Name, LookAt:=xlWhole) Then

         oControl.Value = Cells(ActiveCell.Row, ActiveCell.Column - 5)
         End If
         End If
    Next oControl
End Sub
[/vba]

Спасибо за сылку, поменял как было в примере, но реально догнать почему такая запись не работает не могу, наверное я написал что-то очень глупое )) Вообщем подскажите почему строчка с *** не правильная??


Сообщение отредактировал leskris - Вторник, 27.01.2015, 03:44
 
Ответить
Сообщение[vba]
Код

Sub All_TextBoxes()
      Dim oControl As Control
      Worksheets(5).Activate
     For Each oControl In UserForm1.Controls
         If TypeOf oControl Is MSForms.Label Then
      
***** If MSForms.Label.Name = Worksheets(5).Cells("A1:AA1000").find(MSForms.Label.Name, LookAt:=xlWhole) Then

         oControl.Value = Cells(ActiveCell.Row, ActiveCell.Column - 5)
         End If
         End If
    Next oControl
End Sub
[/vba]

Спасибо за сылку, поменял как было в примере, но реально догнать почему такая запись не работает не могу, наверное я написал что-то очень глупое )) Вообщем подскажите почему строчка с *** не правильная??

Автор - leskris
Дата добавления - 27.01.2015 в 03:43
leskris Дата: Вторник, 27.01.2015, 04:42 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
[vba]
Код

Sub All_TextBoxes()
      Dim oControl As Control
      Dim x As string
        
        For Each oControl In UserForm1.Controls
         If TypeOf oControl Is MSForms.Label Then
         x = oControl.Name
         Worksheets(5).Activate
                  
       Range("LN_P1").find(x, LookAt:=xlWhole).Select
         oControl = Cells(ActiveCell.Row, ActiveCell.Column - 5).Value
              End If
    Next oControl
End Sub

[/vba]
Вот этот код начал работать частично, ура, НО, если значение нет в екселе, то опять выдает ошибку на этой строке
Range("LN_P1").find(x, LookAt:=xlWhole).Select


Сообщение отредактировал leskris - Вторник, 27.01.2015, 09:37
 
Ответить
Сообщение[vba]
Код

Sub All_TextBoxes()
      Dim oControl As Control
      Dim x As string
        
        For Each oControl In UserForm1.Controls
         If TypeOf oControl Is MSForms.Label Then
         x = oControl.Name
         Worksheets(5).Activate
                  
       Range("LN_P1").find(x, LookAt:=xlWhole).Select
         oControl = Cells(ActiveCell.Row, ActiveCell.Column - 5).Value
              End If
    Next oControl
End Sub

[/vba]
Вот этот код начал работать частично, ура, НО, если значение нет в екселе, то опять выдает ошибку на этой строке
Range("LN_P1").find(x, LookAt:=xlWhole).Select

Автор - leskris
Дата добавления - 27.01.2015 в 04:42
wild_pig Дата: Вторник, 27.01.2015, 07:39 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 518
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
Ночь не спать чтобы 2 раза активировать один и тот же лист. Покажите файл и решение будет найдено быстрее.
 
Ответить
СообщениеНочь не спать чтобы 2 раза активировать один и тот же лист. Покажите файл и решение будет найдено быстрее.

Автор - wild_pig
Дата добавления - 27.01.2015 в 07:39
leskris Дата: Вторник, 27.01.2015, 09:02 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
ДА у меня сейчас день (живу в Китае), и это моя не основная работа, можно сказать хобби. Ну я новичек в этом деле, естественно, что многое не знаю и не понимаю...

----
Ну реально не понимаю почему ошибку выдает только на последнем шаге. Запускаю через Ф8 и цикл пашет, но на том моменте когда цикл должен уже закончится выдает ошибку.. “RUN time error 91" Object variable or with block variable non set
---
Есть предположение, что я цикл поставил на все ЛЕЙБЛ на форме, но РЕЙНДЖ выбран только на часть???


Сообщение отредактировал leskris - Вторник, 27.01.2015, 10:21
 
Ответить
СообщениеДА у меня сейчас день (живу в Китае), и это моя не основная работа, можно сказать хобби. Ну я новичек в этом деле, естественно, что многое не знаю и не понимаю...

----
Ну реально не понимаю почему ошибку выдает только на последнем шаге. Запускаю через Ф8 и цикл пашет, но на том моменте когда цикл должен уже закончится выдает ошибку.. “RUN time error 91" Object variable or with block variable non set
---
Есть предположение, что я цикл поставил на все ЛЕЙБЛ на форме, но РЕЙНДЖ выбран только на часть???

Автор - leskris
Дата добавления - 27.01.2015 в 09:02
alex77755 Дата: Вторник, 27.01.2015, 10:45 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Цитата
[vba]
Код
Range("LN_P1").find(x, LookAt:=xlWhole).Select
[/vba]

Ну естественно будет выдавать ошибку если выбирать нечего!
Проверку наличия надо делать прежде чем выбирать:
[vba]
Код
Set RN = Range("LN_P1").Find(x, LookAt:=xlWhole)
If Not RN Is Nothing Then RN.Select
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
Сообщение
Цитата
[vba]
Код
Range("LN_P1").find(x, LookAt:=xlWhole).Select
[/vba]

Ну естественно будет выдавать ошибку если выбирать нечего!
Проверку наличия надо делать прежде чем выбирать:
[vba]
Код
Set RN = Range("LN_P1").Find(x, LookAt:=xlWhole)
If Not RN Is Nothing Then RN.Select
[/vba]

Автор - alex77755
Дата добавления - 27.01.2015 в 10:45
leskris Дата: Вторник, 27.01.2015, 10:57 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 90
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 (Office 365)
Спасибо тебе добрый человек )))) +++++++++++ я пытался сделать проверку но не знал как правильно написать. Все работает
 
Ответить
СообщениеСпасибо тебе добрый человек )))) +++++++++++ я пытался сделать проверку но не знал как правильно написать. Все работает

Автор - leskris
Дата добавления - 27.01.2015 в 10:57
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!