Я учу себя VBA через форумы и YouTube. Я написал некоторый код, который использует If
операторов. Если утверждение верно, у меня есть выбор: позвонить другому SUB или просто написать код в том же SUB. Мой вопрос: если я вызываю SUB, и он использует MS Word, если код использует цикл, будет ли это эквивалентно запуску MS Word, затем его выходу и повторному запуску снова и снова? Я прокомментировал части, которые принадлежат второму SUB, и не включил его ниже.
Option Explicit
Sub CreateWordDocEarlyBinding()
'Declared Variables for Sub.
Dim sourceDoc As String
Dim lastRow As Long
Dim rowLoop As Long
'Adding code for MS Word here
Dim WdApp As Application
Set WdApp = New Word.Application
'Not sure I need this for any reason.
Dim columnLoop As Long
'Find last row.
lastRow = Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Row
'Looping through column.
For rowLoop = 2 To lastRow
'Not sure I need at this point for code.
'columnLoop = Sheet1.Range(rowLoop, 1)
'Checking cells for A Conditon.
If Sheet1.Cells(rowLoop, 1).Value = "Test String 1" Then
If Sheet1.Cells(rowLoop, 1).Offset(0, 1).Value >= 0.1 Then
If Sheet1.Cells(rowLoop, 1).Offset(0, 1).Value < 1 Then
sourceDoc = "Test1.docx"
Call CreateNewSourceDoc(sourceDoc, WdApp)
Else
sourceDoc = "Test2.docx"
Call CreateNewSourceDoc(sourceDoc, WdApp)
End If
End If
'Checking cells for B condition.
ElseIf Sheet1.Cells(rowLoop, 1).Value = "Test String 2" Then
If Sheet1.Cells(rowLoop, 1).Offset(0, 1).Value >= 0.5 Then
If Sheet1.Cells(rowLoop, 1).Offset(0, 1).Value < 5 Then
sourceDoc = "Test3.docx"
Call CreateNewSourceDoc(sourceDoc, WdApp)
Else
sourceDoc = "Test4.docx"
Call CreateNewSourceDoc(sourceDoc, WdApp)
End If
End If
End If
'Checking next row.
Next
WdApp.Quit
Set WdApp = Nothing
End Sub
Я добавляю код, который у меня был для второго SUB, для пояснения. Создает ли этот код новый экземпляр слова при каждом цикле? Если это произойдет, я бы лучше устранить ниже SUB.
Sub CreateNewSourceDoc(sourceDoc As String, WdApp As Application)
'Declaring variables
Dim newFolderName As String
Dim newFilePath As String
'Source folder
filePath = ThisWorkbook.Path & "\"
'New Folder
newFolderName = Sheet1.Cells(rowLoop, 1) & " " & Sheet1.Cells(rowLoop, 2)
MkDir filePath & newFolderName
'New file path
newFilePath = filePath & newFolderName & "\"
'I commented the below code out to see if it is correct.
'Set WdApp = New Word.Application
With WdApp
.Visible = False
'.Activate
.Documents.Open filePath & sourceDoc
.ActiveDocument.SaveAs2 Filename:=newFilePath & Sheet1.Cells(rowLoop, 1) & " " & Sheet1.Cells(rowLoop, 2) & ".docx"
End With
sourceDoc = vbNullString
End Sub