VBA передает листы в качестве параметра в макрос

#excel #vba

#excel #vba

Вопрос:

У меня есть Excel Sub следующим образом

 Sub btnToCsvASIN()
    Dim Wb As Workbook
    Dim Ds, Ws As Worksheet
    Set Ds = Sheet2
    
    Set Wb = Workbooks.Add
    Set Ws = Wb.ActiveSheet
    
    Ds.Range("A2:I100").Copy Ws.Range("A1")
    
    Dim pKey, pId As String       
    
    Application.DisplayAlerts = False
    Wb.SaveAs ThisWorkbook.Path amp; "Uploader.csv", FileFormat:=xlCSV
    Wb.Close
End Sub
 

Я хочу сделать эту функцию универсальной, чтобы она работала независимо от номера листа.

Итак, я попробовал следующий и другой синтаксис:

 Function btnToCsvASIN(SheetNum as String)
    Dim Wb As Workbook
    Dim Ds, Ws As Worksheet
    Set Ds = SheetNum
    
......
End Sub
 

Моя цель — выполнить следующий тип вызова универсальной функции:

 btnToCsvASIN(Sheet1)
btnToCsvASIN(Sheet23)
 

Я не смог выполнить эту работу.

Я вызываю это Sub в настоящее время из другого макроса.

Ответ №1:

Скопировать диапазон в новую книгу

 Option Explicit

Sub TESTbtnToCsvASIN()
    Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
    btnToCsvASIN ws
    ' Or using code name:
    'btnToCsvASIN Sheet1
End Sub

Sub btnToCsvASIN(ws As Worksheet)
    If Not ws Is Nothing Then
        Application.ScreenUpdating = False
        With Workbooks.Add
            ws.Range("A2:I100").Copy .ActiveSheet.Range("A1")
            Application.DisplayAlerts = False
            .SaveAs ThisWorkbook.Path amp; "" amp; "Uploader", FileFormat:=xlCSV
            Application.DisplayAlerts = True
            '.FollowHyperlink .Path
            .Close SaveChanges:=False
        End With
        Application.ScreenUpdating = True
    End If
End Sub