powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проверить лист на существование VBA
45 сообщений из 45, показаны все 2 страниц
проверить лист на существование VBA
    #36865374
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Скажу сразу, в VB- я не очень.
Передо мной стоит задача. Есть чекбоксы, которыми мы отмечаем какие листы будем использовать.
Нужно написать цикл который бы проверял наличие листа по заданному названию(критерию). Листы задаются так - 03,10 , где 03-это Март, 10- 2010 год. (чекбокс 3 в колонке 2010 -см.картинку)
И если листа нет, то
Код: plaintext
CheckBox(n).enabled = false
Чекбоксы идут с checkbox1 по checkbox24 checkbox25-2009год, checkbox26- 2010год. Можете обзывать как хотите, не принципиально, догадаюсь :)
До чего до чего додумался, может и неверно. :(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Function listExist() As Boolean
Dim strName As String
Dim i, k As Integer
For i =  1  To  12 
    For k =  9  To  10 
    strName = "0" + CStr(i) + ";0" + Cstr(k)
    On Error Resume Next
    listExist = WorkSheets(strName).Index
    Next k
Next i        
End Function
Спасибо!
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865381
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamx,

Можно пойти от обратного, перебрать все листы в книге и посмотреть их имена.
Но это - вполне себе вариант.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865387
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только непонятно, что должна вернуть эта функция
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865397
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю, она должна вернуть переменной strName номер листа и сказать есть он или нет. хзхз :)
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865400
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТолько непонятно, что должна вернуть эта функция

fedoamxНужно написать цикл который бы проверял наличие листа по заданному названию(критерию)

Если есть критерий, то не нужен цикл. Если есть цикл - то проверка идет не одного, а всех чекбоксов и результат должен быть каким-то другим.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865405
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxдумаю, она должна вернуть переменной strName номер листа и сказать есть он или нет. хзхз :)
Тогда
а) Если вернуть номер листа, то причем тут тогда strName?
б) У функции должен быть параметр
в) Цикл не нужен
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865436
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

блин, видимо я сути не понимаю. А как без цикла? и strName разве не является параметром?
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865439
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strName - так задается название листа.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865444
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Function SheetIndex(iYear As Integer iMonth As Integer) As Integer

SheetIndex=- 1 
On Error Resume Next
SheetIndex = WorkSheets("0" + CStr(iMonth) + ";0" + Cstr(iYear)).Index
    
End Function
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865449
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamx,

Прежде, чем писать код, сформулируйте, что вы хотите (вход-выход)
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865453
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Спасибо. а как эту функцию с чекбоксами связать?
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865454
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxstrName разве не является параметром?

http://psbatishev.narod.ru/vb/v054.htm

Тут параметры называют аргументами - в данном случае это синонимы
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865457
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxСпасибо. а как эту функцию с чекбоксами связать?
Как я уже сказал - определитесь, что вы хотите.
Вы хотели функцию проверки наличия листа и получения его индекса - вот она.

Теперь сформулируйте, что значит "связать" в вашем понимании.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865474
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxЧекбоксы идут с checkbox1 по checkbox24

Код: plaintext
1.
2.
3.
4.
Dim i As Integer
For i= 1  To  24 
  UserForm1.Controls("CheckBox"+CStr(i)).Enabled = SheetIndex(((i -  1 ) \  12 ) +  9 , ((i -  1 ) Mod  12 ) +  1 ) <> - 1 
Next

Сорри. не удержался, написал все в одну строку
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865476
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProfedoamxСпасибо. а как эту функцию с чекбоксами связать?
Как я уже сказал - определитесь, что вы хотите.
Вы хотели функцию проверки наличия листа и получения его индекса - вот она.

Теперь сформулируйте, что значит "связать" в вашем понимании.


Ок :)

мы проверяем есть ли лист,допустим листа с названием 03,10 нету, то CheckBox(3).enabled = false.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865488
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxмы проверяем есть ли лист,допустим листа с названием 03,10 нету, то CheckBox(3).enabled = false.
Я перечитал первый пост и написал вам этот цикл (выше).

Но тут интересная картина - вы просите проверить лист с названием "03,10"
В то же время в своем коде, который я не менял, вы формулируете имя листа иначе:
Код: plaintext
 strName = "0" + CStr(i) + ";0" + Cstr(k)
определитесь и доработайте функцию SheetIndex
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865496
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Profedoamxмы проверяем есть ли лист,допустим листа с названием 03,10 нету, то CheckBox(3).enabled = false.
Я перечитал первый пост и написал вам этот цикл (выше).

Но тут интересная картина - вы просите проверить лист с названием "03,10"
В то же время в своем коде, который я не менял, вы формулируете имя листа иначе:
Код: plaintext
 strName = "0" + CStr(i) + ";0" + Cstr(k)
определитесь и доработайте функцию SheetIndex

Вы имеете ввиду ";" - "," ?
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865519
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxВы имеете ввиду ";" - "," ?

Не только, например ваша формула
Код: plaintext
"0" + CStr( 11 ) + ";0" + Cstr( 10 )
даст
"011;010"
у вас именно так листы соответствующие называются?
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865525
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

да именно так 01,10 - январь 2010 года, 12,10 - декабрь 2010
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865534
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перечитайте мой вопрос внимательно
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865544
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

каюсь! вы имели в виду 0 10?
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865550
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxShocker.Pro,

каюсь! вы имели в виду 0 10?
и 012 в месяце

Чтобы я не все за вас делал - покурите функцию Format
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865561
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProfedoamxShocker.Pro,

каюсь! вы имели в виду 0 10?
и 012 в месяце

Чтобы я не все за вас делал - покурите функцию Format

ОГРОМНОЕ ВАМ СПАСИБО!
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865567
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxОГРОМНОЕ ВАМ СПАСИБО!
что-то мне подсказывает - рано!
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865569
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

А не могли бы вы объяснить как iMonth и iYear формируются?
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865570
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да не все ништяк работает.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865577
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxА не могли бы вы объяснить как iMonth и iYear формируются?
А что там непонятно? Целочисленное деление, деление по модулю - читайте в хелпе.
Плюс/минус - вроде понятно должно быть...
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865584
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProfedoamxОГРОМНОЕ ВАМ СПАСИБО!
что-то мне подсказывает - рано!

Это... :) у меня почему то с 1 по 9 чекбокс перестали работать
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865587
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxЭто... :) у меня почему то с 1 по 9 чекбокс перестали работать
Получившийся код покажите
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865590
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProfedoamxЭто... :) у меня почему то с 1 по 9 чекбокс перестали работать
Получившийся код покажите
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Sub CheckWrkSh()
Dim i As Integer
Dim k As Integer
    
    For i =  1  To  24 
      UserForm1.Controls("CheckBox" + CStr(i)).Enabled = SheetIndex(((i -  1 ) \  12 ) +  9 , ((i -  1 ) Mod  12 ) +  1 ) <> - 1 
    Next i

End Sub




Function SheetIndex(iYear As Integer, iMonth As Integer) As Integer
SheetIndex = - 1 
On Error Resume Next
SheetIndex = Worksheets(Format(CStr(iMonth),  0 ) + "," + Format(CStr(iYear),  0 )).Index
End Function
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865605
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamx
Код: plaintext
1.
Format(CStr(iMonth),  0 ) 

CStr вам не нужен, если используете Format.
Format(1, 0) даст вам "1" а вам надо "01"

Курите описание функции дальше.

пробуйте результат в Immediate-окне
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865652
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Profedoamx
Код: plaintext
1.
Format(CStr(iMonth),  0 ) 

CStr вам не нужен, если используете Format.
Format(1, 0) даст вам "1" а вам надо "01"

Курите описание функции дальше.

пробуйте результат в Immediate-окне
не понятно почему, но не получается.
Код: plaintext
SheetIndex = Worksheets(Format(iMonth, MM) + "," + Format(iYear,  0 )).Index

дальше курить? :)
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865679
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxдальше курить? :)
Похоже, вам придется курить типы данных.
Вы понимаете, чем отличается строка (строковой тип данных) от числа (числовой тип данных)?
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865697
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865702
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, если хотите, я могу подсказать, как правильно.
Но если разберетесь сами (а желание разобраться, кажется, имеется) - запомните на всю жизнь, попутно изучив сопутствующие вещи, которые тоже пригодятся....
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36865741
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Желание есть и даже очень. Я пока шел домой как раз об это и думал. :)
Про типы данных знаю, просто практики 1,5недели и я путаюсь.


Но спасибо, что помогаете разобраться самому.
Если Вас не затруднит, то я хотел бы отложить этот вопрос до понедельника :)
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36866139
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а зачем вам чекбоксы года, если у вас есть чекбоксы месяцев этого года?
И вообще, можно же просто привязать к чекбоксам имена листов. А то вдруг система именования поменяется...
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36866165
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMКстати, а зачем вам чекбоксы года, если у вас есть чекбоксы месяцев этого года?
И вообще, можно же просто привязать к чекбоксам имена листов. А то вдруг система именования поменяется...


система наименований не поменяется :)
а чекбокс года, чтоб отметить все месяцы сразу.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36867658
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

вообщем вот так.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Function PadL(pstr As String, pcnt As Long, ch As String)
  Dim strTmp As String
  strTmp = pstr
 Do While Len(strTmp) < pcnt
  strTmp = ch + strTmp
 Loop
 PadL = strTmp
End Function
Код: plaintext
1.
2.
3.
4.
5.
Function SheetIndex(iYear As Integer, iMonth As Integer) As Integer
    SheetIndex = - 1 
    On Error Resume Next
       SheetIndex = Worksheets(PadL(CStr(iMonth),  2 , "0") + "," + Right(CStr(iYear),  2 )).Index
End Function


с format слишком заморочено. Я так и не понял как вытащить месяц. но все равно спасибо.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36867689
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мда. А все ведь было гораздо проще:
Код: plaintext
Format$(iMonth,"00")


А что с годом? В вашей конструкции для года 2009 будет все равно "9", а не "09".

Только если вы переделали исходную процедуру (но вы ее не приводите)
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36867710
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proмда. А все ведь было гораздо проще:
Код: plaintext
Format$(iMonth,"00")


Кстати, даже если без Format. Если вы для года использовали Right, никто не мешал сделать то же самое с месяцем:
Код: plaintext
Right(iMonth+ 100 ,  2 )

ЗЫ: если вы написали функцию PadL самостоятельно - неплохо для полутора недель практики. Ну ее тоже можно было упростить :) Есть такая штука:
Код: plaintext
String( 5 ,"0")
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36867900
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

хм порадовали с
Код: plaintext
Format$(iMonth,"00")
Я всю хелпу облазил.. но такого не увидел. я подумал нужно imonth As Date сделать и как-то с ним побороться, т.е вытащить месяц.
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36867918
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamxЯ всю хелпу облазил.. но такого не увидел.
help User-Defined Numeric Formats (Format Function)
....
(0) Digit placeholder. Display a digit or a zero. If the expression has a digit in the position where the 0 appears in the format string, display it; otherwise, display a zero in that position.
help User-Defined Numeric Format Expressions Example

Format (format)Positive 5Negative 5 0.005.00-5.00

Легко, конечно, найти, когда знаешь, что ищешь
Ну не страшно Надеюсь вы не сильно расстроились и не бросите сейчас все, когда только началось самое интересное
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36867999
fedoamx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: plaintext
Right(imonth+ 100 ,  2 )
- ооочень круто! Прям порадовало!
...
Рейтинг: 0 / 0
проверить лист на существование VBA
    #36868022
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedoamx
Код: plaintext
Right(imonth+ 100 ,  2 )
- ооочень круто! Прям порадовало!

Кошернее:
Код: plaintext
Right$(CStr(iMonth+ 100 ),  2 )
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проверить лист на существование VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]