Я новичок в VBA и, как часть моей собственной разработки, в настоящее время я переписываю некоторую автоматизацию, которую я написал для завершения около 6+ месяцев go. У меня есть код ниже, который определяет имя листа на основе того, на каком листе нажата кнопка (есть два разных имени листа, похожих на CustName_CALC
и две кнопки). Затем он просматривает оставшиеся листы в книге, чтобы найти «похожие» листы.
Приведенный ниже подпункт PDF_Bill()
применяется к ранее упомянутым кнопкам:
Public vPDFilename As Variant
Public wb As Workbook
Public ws As Worksheet
Public wsBill As Worksheet
Public wsCalc As Worksheet
Public wsStatement As Worksheet
Public sLocation As String, sCustName As String, myTitle As String, myMsg As String, InitialFileName As String, Response As String, C_Response As String
Sub PDF_Bill()
sCustName = Left(ActiveSheet.Name, InStr(ActiveSheet.Name, "_") - 1)
Set wb = ThisWorkbook
Set wsCalc = wb.Sheets(sCustName & "_CALC")
myTitle = "Save Invoice"
myMsg = "Are you sure you would like to save the " & wsCalc.Cells(1, 2).Value2 & " invoice?"
Response = MsgBox(myMsg, vbQuestion + vbOKCancel, myTitle)
Select Case Response
Case Is = vbOK
For Each wsBill In ThisWorkbook.Worksheets
If wsBill.Name Like sCustName & "_BILL" & "*" Then
Call Module1_PDF.PDF_Procedure
End If
Next wsBill
Case Is = vbCancel
'user cancels the first popup message
myTitle = "Invoice Cancelled!"
myMsg = "You've cancelled the request to save the invoice!"
C_Response = MsgBox(myMsg, vbOKOnly, myTitle)
End Select
End Sub
Вышеуказанное вызывает это:
Sub PDF_Procedure()
sCustName = Left(ActiveSheet.Name, InStr(ActiveSheet.Name, "_") - 1)
sLocation = "S:DRIVELOCATION" & wsCalc.Cells(1, 2).Value2 & "\Invoices\"
vPDFilename = Application.GetSaveAsFilename( _
InitialFileName:=sLocation _
& wsCalc.Cells(1, 2).Value2 _
& " " _
& MonthName(Month(Date)) _
& " Invoice", _
FileFilter:="PDF, *.pdf", _
Title:="Save as PDF")
If vPDFilename <> False Then
With wsBill
'.Visible = xlSheetVisible '[will be hidden at later state]
'.Activate
'predefined area for 5 page invoice - this may need to change in future.
.PageSetup.PrintArea = "A1:S300"
End With
'creates the PDF
wsBill.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=vPDFilename, _
OpenAfterPublish:=False
'wsBill.Visible = xlSheetHidden 'bill sheet HIDE [WILL BE USED LATER NOT SET UP]
Else
'if user cancels save dialog box
myTitle = "Invoice Cancelled!"
myMsg = "You've cancelled the request to save the invoice!"
C_Response = MsgBox(myMsg, vbOKOnly, myTitle)
wsCalc.Activate
GoTo CancelProcess
End If
CancelProcess:
Exit Sub
End Sub
Код выше (за исключением из GoTo CancelProcess
, потому что это то, с чем я борюсь) отлично работает для одного листа под названием CustName_Bill
, но мне также нужно, чтобы он работал для сценария ниже.
Я просмотрел следующие страницы и более без успеха:
Я знаю, что мне нужно exit
заявление где-то, но я изо всех сил пытаюсь понять, куда оно идет. Многие примеры, которые я видел, не достаточно сложны, чтобы привести меня к выводу, как решить мою проблему.
В настоящее время моя проблема заключается в том, что у меня есть два листа, которые названы одинаковыми (специально):
- CustName_Bill_Type
- CustName_Bill_Type1
l oop продолжается на следующем листе ie CustName_Bill_Type1
, когда пользователь отменяет Application.GetSaveAsFilename
но мне нужно for each
l oop для выхода, когда пользователь отменяет диалоговое окно first Application.GetSaveAsFilename
.
Итак, мой вопрос, куда мне поместить exit
, чтобы код полностью завершился, как только пользователь нажмет «Отмена» в диалоговом окне first save.