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

Вход

Регистрация

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

 

= Мир MS Excel/Как задать массив листов и найти один активный. - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как задать массив листов и найти один активный. (Макросы/Sub)
Как задать массив листов и найти один активный.
Tunka-s Дата: Среда, 22.11.2017, 13:01 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 92
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день,

Опять с вопросом элементарным, но найти в инете именно это не могу. Есть простенький макрос, который при сохранении считывает значения из ячеек на активном листе и записывает их на другой лист. Это я умудрилась написать/слизать. Однако, если открыт не нужный мне лист, а какой-то другой, то естественно выскакивает ошибка.
В файле всего 50 листов. 90% из них скрыты. Интересующих меня листов всего 7 и только один из них будет не скрыт. А значит задача описать массив состоящий из 7 страниц и в этом массиве определить какой лист не скрыт. А потом уже считывать инфу именно с этого не скрытого листа. Помогите пожалуйста!

Сейчас это выглядит так:

[vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim RgBU As Range
Dim Req As Range
'Dim WSheets() As Variant
'Dim N As Variant

'WSheets = Array("QS-702C HAWA OCP-Trading Goods", "QS-702D HAWA OEM-Trading Goods", "QS-702G FERT-Fin. Goods Belgium", "QS-702E ROH - Raw Materials", "QS-702F HALB - Semi fin. goods", "QS-702G FERT - Fin. Goods UK")
'For Each N In WSheets

'If N.Active = True Then
Set RgBU = Range("A1:IV65536").Find("Material Group (see sheet QS-702M Material group overview)", , xlValues)

If InStr(1, Cells(RgBU.Row, RgBU.Column + 1), "ZCV") <> 0 Then
Sheets("Sharepoint").Range("D5").Value = "CV"
Else
If InStr(1, Cells(RgBU.Row, RgBU.Column + 1), "ZMP") <> 0 Then
Sheets("Sharepoint").Range("D5").Value = "TEMP"
Else
If InStr(1, Cells(RgBU.Row, RgBU.Column + 1), "ZIS") <> 0 Then
Sheets("Sharepoint").Range("D5").Value = "TIS"
End If
End If
End If

Set Req = Range("A1:IV65536").Find("Requested By", , xlValues)

Sheets("Sharepoint").Range("E5").Value = Cells(Req.Row, Req.Column + 1)
[/vba]

Я даже пыталась описать массив, но безуспешно.

Файл приложен.
К сообщению приложен файл: TEST19_11_17.xlsm(77Kb)
 
Ответить
СообщениеДобрый день,

Опять с вопросом элементарным, но найти в инете именно это не могу. Есть простенький макрос, который при сохранении считывает значения из ячеек на активном листе и записывает их на другой лист. Это я умудрилась написать/слизать. Однако, если открыт не нужный мне лист, а какой-то другой, то естественно выскакивает ошибка.
В файле всего 50 листов. 90% из них скрыты. Интересующих меня листов всего 7 и только один из них будет не скрыт. А значит задача описать массив состоящий из 7 страниц и в этом массиве определить какой лист не скрыт. А потом уже считывать инфу именно с этого не скрытого листа. Помогите пожалуйста!

Сейчас это выглядит так:

[vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim RgBU As Range
Dim Req As Range
'Dim WSheets() As Variant
'Dim N As Variant

'WSheets = Array("QS-702C HAWA OCP-Trading Goods", "QS-702D HAWA OEM-Trading Goods", "QS-702G FERT-Fin. Goods Belgium", "QS-702E ROH - Raw Materials", "QS-702F HALB - Semi fin. goods", "QS-702G FERT - Fin. Goods UK")
'For Each N In WSheets

'If N.Active = True Then
Set RgBU = Range("A1:IV65536").Find("Material Group (see sheet QS-702M Material group overview)", , xlValues)

If InStr(1, Cells(RgBU.Row, RgBU.Column + 1), "ZCV") <> 0 Then
Sheets("Sharepoint").Range("D5").Value = "CV"
Else
If InStr(1, Cells(RgBU.Row, RgBU.Column + 1), "ZMP") <> 0 Then
Sheets("Sharepoint").Range("D5").Value = "TEMP"
Else
If InStr(1, Cells(RgBU.Row, RgBU.Column + 1), "ZIS") <> 0 Then
Sheets("Sharepoint").Range("D5").Value = "TIS"
End If
End If
End If

Set Req = Range("A1:IV65536").Find("Requested By", , xlValues)

Sheets("Sharepoint").Range("E5").Value = Cells(Req.Row, Req.Column + 1)
[/vba]

Я даже пыталась описать массив, но безуспешно.

Файл приложен.

Автор - Tunka-s
Дата добавления - 22.11.2017 в 13:01
_Boroda_ Дата: Среда, 22.11.2017, 13:35 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11852
Репутация: 4911 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так нужно?
[vba]
Код
Dim shvid As Worksheet
WSh = Array("QS-702C HAWA OCP-Trading Goods", "QS-702D HAWA OEM-Trading Goods", "QS-702G FERT-Fin. Goods Belgium", "QS-702E ROH - Raw Materials", "QS-702F HALB - Semi fin. goods", "QS-702G FERT - Fin. Goods UK")
On Error Resume Next
For i = 0 To UBound(WSh)
    If Sheets(WSh(i)).Visible = -1 Then
        Set shvid = Sheets(WSh(i))
        Exit For
    End If
Next i
On Error GoTo 0
With shvid
    Set RgBU = .Range("A1:IV65536").Find("Material Group (see sheet QS-702M Material group overview)", , xlValues)
    
    If InStr(1, .Cells(RgBU.Row, RgBU.Column + 1), "ZCV") <> 0 Then
        Sheets("Sharepoint").Range("D5").Value = "CV"
    Else
        If InStr(1, .Cells(RgBU.Row, RgBU.Column + 1), "ZMP") <> 0 Then
            Sheets("Sharepoint").Range("D5").Value = "TEMP"
        Else
            If InStr(1, .Cells(RgBU.Row, RgBU.Column + 1), "ZIS") <> 0 Then
                Sheets("Sharepoint").Range("D5").Value = "TIS"
            End If
        End If
    End If
    Set Req = .Range("A1:IV65536").Find("Requested By", , xlValues)
    Sheets("Sharepoint").Range("E5").Value = .Cells(Req.Row, Req.Column + 1)
End With
[/vba]
К сообщению приложен файл: TEST19_11_18.xlsm(68Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
[vba]
Код
Dim shvid As Worksheet
WSh = Array("QS-702C HAWA OCP-Trading Goods", "QS-702D HAWA OEM-Trading Goods", "QS-702G FERT-Fin. Goods Belgium", "QS-702E ROH - Raw Materials", "QS-702F HALB - Semi fin. goods", "QS-702G FERT - Fin. Goods UK")
On Error Resume Next
For i = 0 To UBound(WSh)
    If Sheets(WSh(i)).Visible = -1 Then
        Set shvid = Sheets(WSh(i))
        Exit For
    End If
Next i
On Error GoTo 0
With shvid
    Set RgBU = .Range("A1:IV65536").Find("Material Group (see sheet QS-702M Material group overview)", , xlValues)
    
    If InStr(1, .Cells(RgBU.Row, RgBU.Column + 1), "ZCV") <> 0 Then
        Sheets("Sharepoint").Range("D5").Value = "CV"
    Else
        If InStr(1, .Cells(RgBU.Row, RgBU.Column + 1), "ZMP") <> 0 Then
            Sheets("Sharepoint").Range("D5").Value = "TEMP"
        Else
            If InStr(1, .Cells(RgBU.Row, RgBU.Column + 1), "ZIS") <> 0 Then
                Sheets("Sharepoint").Range("D5").Value = "TIS"
            End If
        End If
    End If
    Set Req = .Range("A1:IV65536").Find("Requested By", , xlValues)
    Sheets("Sharepoint").Range("E5").Value = .Cells(Req.Row, Req.Column + 1)
End With
[/vba]

Автор - _Boroda_
Дата добавления - 22.11.2017 в 13:35
Tunka-s Дата: Среда, 22.11.2017, 13:56 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 92
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Да, кажется так. :) На большом конечном файле еще не тестировала, но в тестовом все работает великолепно! Спасибо большое!!!
 
Ответить
СообщениеДа, кажется так. :) На большом конечном файле еще не тестировала, но в тестовом все работает великолепно! Спасибо большое!!!

Автор - Tunka-s
Дата добавления - 22.11.2017 в 13:56
Tunka-s Дата: Воскресенье, 26.11.2017, 13:39 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 92
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Можно интересно снова открыть эту тему? Стала тестировать на большом файле. Не меняла ни одной запятой, просто скопировала код из тестового файла и вставила в основной. В тестовом все работает, в основном ошибка 91,
Object Valiable or With block variable not set. И что бы это значило?

[vba]
Код
If InStr(1, .Cells(RgBU.Row, RgBU.Column + 1), "ZCV") <> 0 Then
[/vba] -выделен желтым.
Надо добавить что-то при входе в WITH?
У меня ощущение, что в тестовом файле было всего две страницы и макрос определял открытую, а теперЬ, когда все 50 страниц на месте, макрос не может определить правильную и начинает искать заданную строку там, где ее нет. Как это исправит не понятно.


Сообщение отредактировал Tunka-s - Воскресенье, 26.11.2017, 14:53
 
Ответить
СообщениеМожно интересно снова открыть эту тему? Стала тестировать на большом файле. Не меняла ни одной запятой, просто скопировала код из тестового файла и вставила в основной. В тестовом все работает, в основном ошибка 91,
Object Valiable or With block variable not set. И что бы это значило?

[vba]
Код
If InStr(1, .Cells(RgBU.Row, RgBU.Column + 1), "ZCV") <> 0 Then
[/vba] -выделен желтым.
Надо добавить что-то при входе в WITH?
У меня ощущение, что в тестовом файле было всего две страницы и макрос определял открытую, а теперЬ, когда все 50 страниц на месте, макрос не может определить правильную и начинает искать заданную строку там, где ее нет. Как это исправит не понятно.

Автор - Tunka-s
Дата добавления - 26.11.2017 в 13:39
Tunka-s Дата: Понедельник, 27.11.2017, 16:07 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 92
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вопрос закрыт. Спасибо.
 
Ответить
СообщениеВопрос закрыт. Спасибо.

Автор - Tunka-s
Дата добавления - 27.11.2017 в 16:07
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как задать массив листов и найти один активный. (Макросы/Sub)
Страница 1 из 11
Поиск:

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