Макрос Excel проверяет, открыт ли файл - PullRequest
0 голосов
/ 18 января 2020

Мой записанный макрос иногда дает ошибку, потому что файл уже открыт (см. Макрос ниже).

Может кто-нибудь сказать мне, как изменить макрос, чтобы сначала проверить, является ли рабочий лист Excel (Volledige Ice export.xlsx) открыть, а если он открыт, сначала закрыть файл? Что касается последнего, я вижу, что я могу сделать это с:

Windows("Volledige Ice export.xlsx").Activate
ActiveWorkbook.Close

Полный макрос:

Sub Ice()

    Workbooks.OpenText Filename:="C:\Users\Doe\Documents\Ice\export.txt", _
        Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _
        Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 9), Array(8, 9), _
        Array(9, 2), Array(10, 1), Array(11, 9), Array(12, 1), Array(13, 9), Array(14, 9), Array(15 _
        , 9), Array(16, 9), Array(17, 9), Array(18, 9), Array(19, 9), Array(20, 9), Array(21, 2), _
        Array(22, 9), Array(23, 9), Array(24, 2), Array(25, 2)), DecimalSeparator:=".", _
        ThousandsSeparator:=",", TrailingMinusNumbers:=True
    Windows("Ice_macro.xlsm").Activate
    Windows("export.txt").Activate
    Columns("A:B").Select
    Selection.ColumnWidth = 21
    Columns("D:D").Select
    Selection.ColumnWidth = 18
    Columns("E:E").Select
    Selection.ColumnWidth = 15
    Columns("F:F").Select
    Selection.ColumnWidth = 60
    Columns("G:G").Select
    Selection.ColumnWidth = 45
    Columns("H:H").Select
    Selection.ColumnWidth = 12
    Columns("L:L").Select
    Selection.ColumnWidth = 45
    Columns("G:G").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("A1").Select
    Selection.AutoFilter
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\Doe\Documents\Ice\Volledige Ice export.xlsx", FileFormat _
        :=xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWorkbook.Close

End Sub

1 Ответ

0 голосов
/ 18 января 2020

Ниже вы найдете возможное решение вместе с реализацией комментариев Chronocidal. Вы должны сравнить записанный код с этим, чтобы понять его.
Короче говоря, Chronocidal означает, что это:

Columns("H:H").Select
Selection.ColumnWidth = 12

такое же, как это:

Columns("H:H").ColumnWidth = 12

, но вторая версия намного эффективнее

Код:

Sub Ice()
Dim wsExport As Worksheet
Dim wbIce As Workbook

' try to assign workbook to variable
On Error Resume Next
' in case wb is closed - there will be an error
Set wbIce = Workbooks("Volledige Ice export")
On Error GoTo 0

' if wb is open it will be assigned to variable
If Not wbIce Is Nothing Then
    ' close without saving
    wbIce.Close False
End If

Workbooks.OpenText fileName:="C:\Users\Doe\Documents\Ice\export.txt", _
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
    Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _
    Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 9), Array(8, 9), _
    Array(9, 2), Array(10, 1), Array(11, 9), Array(12, 1), Array(13, 9), Array(14, 9), Array(15 _
    , 9), Array(16, 9), Array(17, 9), Array(18, 9), Array(19, 9), Array(20, 9), Array(21, 2), _
    Array(22, 9), Array(23, 9), Array(24, 2), Array(25, 2)), DecimalSeparator:=".", _
    ThousandsSeparator:=",", TrailingMinusNumbers:=True

Set wsExport = ActiveSheet

With wsExport
    .Columns("A:B").ColumnWidth = 21
    .Columns("D:D").ColumnWidth = 18
    .Columns("E:E").ColumnWidth = 15
    .Columns("F:F").ColumnWidth = 60
    .Columns("G:G").ColumnWidth = 45
    .Columns("H:H").ColumnWidth = 12
    .Columns("L:L").ColumnWidth = 45
    With .Columns("G:G").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    .Cells("A1").AutoFilter
End With

With wsExport.Parent
    .SaveAs fileName:= _
    "C:\Users\Doe\Documents\Ice\Volledige Ice export.xlsx", FileFormat _
    :=xlOpenXMLWorkbook, CreateBackup:=False
    .Close
End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...