Опять с вопросом элементарным, но найти в инете именно это не могу. Есть простенький макрос, который при сохранении считывает значения из ячеек на активном листе и записывает их на другой лист. Это я умудрилась написать/слизать. Однако, если открыт не нужный мне лист, а какой-то другой, то естественно выскакивает ошибка. В файле всего 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)
Опять с вопросом элементарным, но найти в инете именно это не могу. Есть простенький макрос, который при сохранении считывает значения из ячеек на активном листе и записывает их на другой лист. Это я умудрилась написать/слизать. Однако, если открыт не нужный мне лист, а какой-то другой, то естественно выскакивает ошибка. В файле всего 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)
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]
Так нужно? [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
Можно интересно снова открыть эту тему? Стала тестировать на большом файле. Не меняла ни одной запятой, просто скопировала код из тестового файла и вставила в основной. В тестовом все работает, в основном ошибка 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 страниц на месте, макрос не может определить правильную и начинает искать заданную строку там, где ее нет. Как это исправит не понятно.
Можно интересно снова открыть эту тему? Стала тестировать на большом файле. Не меняла ни одной запятой, просто скопировала код из тестового файла и вставила в основной. В тестовом все работает, в основном ошибка 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
Сообщение отредактировал Tunka-s - Воскресенье, 26.11.2017, 14:53