#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