VBA: выполнение кода на выбранной вкладке Excel и последовательно на всех вкладках справа

Вы можете попробовать использовать окна, чтобы убить процесс.

command = "Taskkill /IM calc.exe /F"
proc = subprocess.Popen(command)

или

import os
os.system("taskkill /im Calculator.exe /f")

Если вы хотите быть уверенным, попробуйте рекурсивное убийство !!

def kill_process(proc):
    # Check process is running, Kill it if it is,

    # Try to kill the process - 0 exit code == success

    kill = "TaskKill /IM {} /F".format(proc)

    res = subprocess.run(kill)

    if res == 0:
        return True  # Process Killed
    else:
        kill_process(proc)  # Process not killed repeat until it is!

kill_process('Calculator.exe')
2
задан M. S. 20 January 2019 в 07:04
поделиться

3 ответа

Продолжить через рабочие таблицы

Если вы хотите продолжить с ActiveSheet, просто удалите «+ 1».

Предупреждение : эти коды действительны, если у вас только имеется рабочих листов в рабочей книге, а не диаграммы, диалоговые окна или что-то еще.
Я почти всегда использую только рабочие листы в своих книгах, поэтому я никогда не узнал о проблеме Index , на которую JohnyL ссылается в на свой ответ на этот вопрос .

Идея

Sub ContinueThroughWorksheets()
    Dim i As Long
    With ThisWorkbook
        For i = .ActiveSheet.Index + 1 To .Worksheets.Count
            Debug.Print .Worksheets(i).Name
        Next
    End With
End Sub

Реализация

Sub ContinueThroughWorksheets2()
    Dim i As Long
    Dim j As Long
    With ThisWorkbook
       Select Case .ActiveSheet.Index
           Case 1
               j = 1
           Case .Worksheets.Count
               Exit Sub
           Case Else
               j = .ActiveSheet.Index + 1
       End Select
       For i = j To .Worksheets.Count
          Debug.Print .Worksheets(i).Name
       Next
    End With
End Sub
0
ответ дан VBasic2008 20 January 2019 в 07:04
поделиться

Существуют три листовых коллекции: Worksheets, Charts и DialogSheets. Свойство Index этих коллекций возвращает индекс коллекции Sheets, а не фактический индекс в коллекции для конкретного листа.

Скажем, у вас есть четыре листа:

  1. Рабочий лист («Лист1»)
  2. Рабочий лист («Лист2»)
  3. Диаграмма («Диаграмма1») [ 1113]
  4. Рабочий лист («Лист3»).

В этом случае Worksheets("Sheet3").Index возвращает 4, когда реальный индекс равен 3. Нижняя строка никогда не полагается на свойство Index коллекции, относящейся к листу, когда дело доходит до обработки всех листов.

Для решения вашей проблемы вам просто нужно использовать коллекцию Sheets:

Sub FFF()
    Dim x%, sheet As Variant
    For x = ActiveSheet.Index + 1 To Sheets.Count
        Set sheet = Sheets(x)
        '// Do something with sheet
    Next
End Sub
0
ответ дан JohnyL 20 January 2019 в 07:04
поделиться

Вы можете сделать это таким образом, но учтите, что, как правило, не рекомендуется размещать код на активном листе или активных ячейках, так как они могут быть легко изменены и ваш код может работать некорректно.

Лучшим способом было бы хранить (кодовые) имена листов, обработанных в другом месте, и проходить по вашим листам, исключая эти имена.

Sub x()

Dim i As Long

For i = ActiveSheet.Index To Worksheets.Count
    MsgBox Worksheets(i).Name
Next i

End Sub
0
ответ дан SJR 20 January 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: