Здравствуйте. Опять я тут. У меня есть простенький код собранный с миру по нитке и он вроде даже почти работает, но иногда файл, который открывается "незаметно глазу", почему-то не закрываетыса как должен, а остается висеть в бакграунд процессах. В принципе Ексел даже выдает диалоговое окно - "вы точно хотите сохранить файл?" , но это диалоговое окно тоже невидимое глазу и проявляется только когда выключаешь комп! Эта проблема не возникает вроде бы когда я запускаю Макрос вручную из окна разработчика, но как только я привязываю макрос к кнопке на панеле быстрого доступа, ни одно окно не закрывается. Подскажите пожалуйста, как можно принудительно сохранить и закрыть файл в бэкграунде?
'Sub OpenAndManipulate() Dim xl0 As New Excel.Application Dim xlwb As New Excel.Workbook Dim ws As Worksheet Dim b As Integer
Set xlwb = xl0.Workbooks.Open("https://terumoemea.sharepoint.com/sites/teamrooms/masterdatacreation/Info%20files/RA_additional_Data_consolidation.xlsx")
Set ws = xlwb.Worksheets("Overview NHS materials")
Dim shvid As Worksheet WSh = Array("QS-702C HAWA OCP-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
On Error Resume Next
b = ws.Cells(Rows.Count, 1).End(xlUp).Row
xl0.Worksheets(1).Cells(b + 1, 1) = .Cells(6, 10)
Set CatCode = .Range("A1:IV65536").Find("Product code, item reference for customer (code on label = Z1)", , xlValues) Set GTIN = .Range("A1:IV65536").Find("GS1-EAN Code (= EAN code with 0) only last 13 char to enter", , xlValues)
xlwb.Save xlwb.Close Set xl0 = Nothing Set xlwb = Nothing End Sub
[/vba]
Здравствуйте. Опять я тут. У меня есть простенький код собранный с миру по нитке и он вроде даже почти работает, но иногда файл, который открывается "незаметно глазу", почему-то не закрываетыса как должен, а остается висеть в бакграунд процессах. В принципе Ексел даже выдает диалоговое окно - "вы точно хотите сохранить файл?" , но это диалоговое окно тоже невидимое глазу и проявляется только когда выключаешь комп! Эта проблема не возникает вроде бы когда я запускаю Макрос вручную из окна разработчика, но как только я привязываю макрос к кнопке на панеле быстрого доступа, ни одно окно не закрывается. Подскажите пожалуйста, как можно принудительно сохранить и закрыть файл в бэкграунде?
'Sub OpenAndManipulate() Dim xl0 As New Excel.Application Dim xlwb As New Excel.Workbook Dim ws As Worksheet Dim b As Integer
Set xlwb = xl0.Workbooks.Open("https://terumoemea.sharepoint.com/sites/teamrooms/masterdatacreation/Info%20files/RA_additional_Data_consolidation.xlsx")
Set ws = xlwb.Worksheets("Overview NHS materials")
Dim shvid As Worksheet WSh = Array("QS-702C HAWA OCP-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
On Error Resume Next
b = ws.Cells(Rows.Count, 1).End(xlUp).Row
xl0.Worksheets(1).Cells(b + 1, 1) = .Cells(6, 10)
Set CatCode = .Range("A1:IV65536").Find("Product code, item reference for customer (code on label = Z1)", , xlValues) Set GTIN = .Range("A1:IV65536").Find("GS1-EAN Code (= EAN code with 0) only last 13 char to enter", , xlValues)
Протестировать у меня нет возможности, т.к. я не знаю, где взять Excel файл в интернете, а по Вашей ссылке нужно вводить регистрационные данные. Убрал из кода лишнее и окружил сохранение файла кодом, который может быть не будет запускать сообщение, нужно ли сохранять файл.
[vba]
Код
Sub Transfer_Data()
Dim objExcel As Application, bkShare As Workbook, shOverview As Worksheet Dim bkAct As Workbook, shVid As Worksheet Dim CatCode As Range, GTIN As Range Dim arrShNames() Dim lr As Integer, i As Long
Set bkAct = ActiveWorkbook
Set objExcel = New Excel.Application Set bkShare = objExcel.Workbooks.Open("https://terumoemea.sharepoint.com/sites/teamrooms/masterdatacreation/Info%20files/RA_additional_Data_consolidation.xlsx") Set shOverview = bkShare.Worksheets("Overview NHS materials")
arrShNames = Array("QS-702C HAWA OCP-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(arrShNames) If bkAct.Sheets(arrShNames(i)).Name = "" Then End If If Err.Number = 0 Then If bkAct.Sheets(arrShNames(i)).Visible = -1 Then Set shVid = bkAct.Sheets(arrShNames(i)) Exit For End If Else Err.Number = 0 End If Next i On Error GoTo 0
lr = shOverview.Cells(shOverview.Rows.Count, 1).End(xlUp).Row shOverview.Cells(lr + 1, "A") = shVid.Cells(6, 10) Set CatCode = shVid.Range("A1:IV65536").Find("Product code, item reference for customer (code on label = Z1)", , xlValues) Set GTIN = shVid.Range("A1:IV65536").Find("GS1-EAN Code (= EAN code with 0) only last 13 char to enter", , xlValues) shOverview.Cells(lr + 1, "B") = CatCode.Offset(0, 1).Value shOverview.Cells(lr + 1, "C") = GTIN.Offset(0, 1).Value
Протестировать у меня нет возможности, т.к. я не знаю, где взять Excel файл в интернете, а по Вашей ссылке нужно вводить регистрационные данные. Убрал из кода лишнее и окружил сохранение файла кодом, который может быть не будет запускать сообщение, нужно ли сохранять файл.
[vba]
Код
Sub Transfer_Data()
Dim objExcel As Application, bkShare As Workbook, shOverview As Worksheet Dim bkAct As Workbook, shVid As Worksheet Dim CatCode As Range, GTIN As Range Dim arrShNames() Dim lr As Integer, i As Long
Set bkAct = ActiveWorkbook
Set objExcel = New Excel.Application Set bkShare = objExcel.Workbooks.Open("https://terumoemea.sharepoint.com/sites/teamrooms/masterdatacreation/Info%20files/RA_additional_Data_consolidation.xlsx") Set shOverview = bkShare.Worksheets("Overview NHS materials")
arrShNames = Array("QS-702C HAWA OCP-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(arrShNames) If bkAct.Sheets(arrShNames(i)).Name = "" Then End If If Err.Number = 0 Then If bkAct.Sheets(arrShNames(i)).Visible = -1 Then Set shVid = bkAct.Sheets(arrShNames(i)) Exit For End If Else Err.Number = 0 End If Next i On Error GoTo 0
lr = shOverview.Cells(shOverview.Rows.Count, 1).End(xlUp).Row shOverview.Cells(lr + 1, "A") = shVid.Cells(6, 10) Set CatCode = shVid.Range("A1:IV65536").Find("Product code, item reference for customer (code on label = Z1)", , xlValues) Set GTIN = shVid.Range("A1:IV65536").Find("GS1-EAN Code (= EAN code with 0) only last 13 char to enter", , xlValues) shOverview.Cells(lr + 1, "B") = CatCode.Offset(0, 1).Value shOverview.Cells(lr + 1, "C") = GTIN.Offset(0, 1).Value
Karataev, Видимо у меня такой бардачный код, что понять его невозможно. У меня два файла, один с данными рабочий, другой на шаре сохранен для накапливания информации. Я вижу в вашем коде только один остался. Но это не суть важно. Я так понимаю, что убить всплывающие окна должна вот эта строчка?
Karataev, Видимо у меня такой бардачный код, что понять его невозможно. У меня два файла, один с данными рабочий, другой на шаре сохранен для накапливания информации. Я вижу в вашем коде только один остался. Но это не суть важно. Я так понимаю, что убить всплывающие окна должна вот эта строчка?
Karataev, Спасибо вам большое-пребольшое. Вставила три строчки в конец кода и вроде все работает. Завтра посморю еще, что вы мне почистили. Просто скопировать ваш код не могу, потому что мой оригинальный намного длинее. Я просто поудаляла кучу всего перед тем как здесь его поместить, а вы поменяли переменные, теперь надо будет с пристрастием смотреть. Спасибо еще раз. Удивительно как все в итоге просто было!
Karataev, Спасибо вам большое-пребольшое. Вставила три строчки в конец кода и вроде все работает. Завтра посморю еще, что вы мне почистили. Просто скопировать ваш код не могу, потому что мой оригинальный намного длинее. Я просто поудаляла кучу всего перед тем как здесь его поместить, а вы поменяли переменные, теперь надо будет с пристрастием смотреть. Спасибо еще раз. Удивительно как все в итоге просто было!Tunka-s
После тестирования сегодня выяснилось, что все равно макро работает через раз. Иногда передает только половину информации, иногда всю, иногда закрывает файл, иногда нет. Я тут постаралась сделать выжимку и прикрепила то что получилось. Файл в который информация должна передаваться может быть любой совершенно. Просто надо ссылку поменять в коде на любой пустой файл на вашем компе. Помогите пожалуйста найти проблему!
Добрый день.
После тестирования сегодня выяснилось, что все равно макро работает через раз. Иногда передает только половину информации, иногда всю, иногда закрывает файл, иногда нет. Я тут постаралась сделать выжимку и прикрепила то что получилось. Файл в который информация должна передаваться может быть любой совершенно. Просто надо ссылку поменять в коде на любой пустой файл на вашем компе. Помогите пожалуйста найти проблему!Tunka-s
Исходная проблема то была в другом (первый Ваш пост): появлялось сообщение при выключении компьютера. Эта проблема решилась и возникла новая проблема?
Исходная проблема то была в другом (первый Ваш пост): появлялось сообщение при выключении компьютера. Эта проблема решилась и возникла новая проблема?Karataev
Сообщение отредактировал Karataev - Пятница, 12.01.2018, 14:08
Karataev, Ну я бы не сказала, что совсем новая. Исходная проблема была в том, что файл где-то в бэкграунде оставался открытым, и при повторном к нему обращении туда невозможно было передать информацию, хотя ошибка и не появлялась. При перезагрузке компа действительно выскакивали эти окошки. Теперь окошки исчезли, это так, но файл то все еще блокирутся где-то и получaется, что 2 раза все работает, на третий зависает. Ну совсем новая, это то, что из 5 записей которые должны создаться в новом файле иногда создается все 5, иногда первая и последняя, иногда две посередине. Это меня вообще вводит в ступор. Как так может быть?
Karataev, Ну я бы не сказала, что совсем новая. Исходная проблема была в том, что файл где-то в бэкграунде оставался открытым, и при повторном к нему обращении туда невозможно было передать информацию, хотя ошибка и не появлялась. При перезагрузке компа действительно выскакивали эти окошки. Теперь окошки исчезли, это так, но файл то все еще блокирутся где-то и получaется, что 2 раза все работает, на третий зависает. Ну совсем новая, это то, что из 5 записей которые должны создаться в новом файле иногда создается все 5, иногда первая и последняя, иногда две посередине. Это меня вообще вводит в ступор. Как так может быть?Tunka-s
[/vba] Т.к. не понятно, что такое "Nothing", а "Quit" это завершение работы программы. Nothing имеет смысл использовать во время работы макроса для каких-то задач, а в конце работы макроса вроде нет смысла использовать Nothing, т.к. после работы макроса, переменные, находящиеся внутри процедур, сами станут Nothing.
Вместо этих двух строк [vba]
Код
Set xl0 = Nothing Set xlwb = Nothing
[/vba] используйте одну эту: [vba]
Код
objExcel.Quit
[/vba] Т.к. не понятно, что такое "Nothing", а "Quit" это завершение работы программы. Nothing имеет смысл использовать во время работы макроса для каких-то задач, а в конце работы макроса вроде нет смысла использовать Nothing, т.к. после работы макроса, переменные, находящиеся внутри процедур, сами станут Nothing.Karataev
Скачайте файл из интернета и поработайте с ним. Если проблем не будет, значит проблема связана с интернетом. В таком случае скачивайте файл, обрабатывайте его, а затем отсылайте обратно в интернет. В таком случае точно все сохранится.
Скачайте файл из интернета и поработайте с ним. Если проблем не будет, значит проблема связана с интернетом. В таком случае скачивайте файл, обрабатывайте его, а затем отсылайте обратно в интернет. В таком случае точно все сохранится.Karataev
Я скачала уже и попробовала. Та же ерунда. Я тоже на интернет грешила, но нет. Рядом два лежат в одной папочке на диске С и все равно то две строчки, то три, то пять. Мистика, как по мне.
Я скачала уже и попробовала. Та же ерунда. Я тоже на интернет грешила, но нет. Рядом два лежат в одной папочке на диске С и все равно то две строчки, то три, то пять. Мистика, как по мне.Tunka-s
Теперь спряшивает, хочу ли я переписать уже существующий файл и при ответе -нет, выдает ошибку в [vba]
Код
xlwb.Save
[/vba]
Вообще, что интересно, если при связи с шарой, файл не закрывался через 2 раза на третий, то когда файл на том же диске, что и исходный, то он не закрывается в 100% случаев. Это вообще возможно?
Теперь спряшивает, хочу ли я переписать уже существующий файл и при ответе -нет, выдает ошибку в [vba]
Код
xlwb.Save
[/vba]
Вообще, что интересно, если при связи с шарой, файл не закрывался через 2 раза на третий, то когда файл на том же диске, что и исходный, то он не закрывается в 100% случаев. Это вообще возможно?Tunka-s
Сообщение отредактировал Tunka-s - Пятница, 12.01.2018, 23:04
Karataev, Т.е. у вас все работает? И данные передаются и файл сохраняется? Это уже хорошо. Может у коллег тогда тоже будет работать...
Ладно. Может кто-нибудь еще посмотрит. Там же один копипаст, что же мешает. Завтра еще поиграю, но с моими знаниями это конечно просто трата времени.
Karataev, Т.е. у вас все работает? И данные передаются и файл сохраняется? Это уже хорошо. Может у коллег тогда тоже будет работать...
Ладно. Может кто-нибудь еще посмотрит. Там же один копипаст, что же мешает. Завтра еще поиграю, но с моими знаниями это конечно просто трата времени.Tunka-s
Сообщение отредактировал Tunka-s - Пятница, 12.01.2018, 23:10