Я пытался выяснить эту подпрограмму в течение нескольких дней. Я прочитал каждое сообщение о VBA copy-paste на этом сайте и еще не нашел ответа. Концепция настолько проста, но когда я запускаю ее с помощью командной кнопки, она останавливается после открытия книги копирования, копия не выполняется. Когда я перехожу к отладке, он работает так, как ожидалось. Кто-нибудь видит очевидные ошибки?Разочарование с копией VBA от книги к рабочей книге
'Must have reference to "Microsoft Scripting Runtime" checked
Dim fso As New FileSystemObject
Dim wsData as Worksheet
Dim stPDFName As String
Dim stFileName As String
Dim stReport As String
Dim WSCopy As Worksheet
Dim FD As Office.FileDialog
Set wsData = ThisWorkbook.Sheets("Sheet1")
Set FD = Application.FileDialog(msoFileDialogFilePicker)
FD.InitialFileName = "J:\Laboratory\Reports\2015"
FD.Show
stReport = FD.SelectedItems(1)
stFileName = fso.GetFileName(stReport)
stPDFName = Left$(stReport, InStrRev(stReport, ".") - 1) & ".pdf"
If Dir(stPDFName) = "" Then
MsgBox "Matching PDF version of this report does not exist":
Exit Sub
Else
Workbooks.Open (stReport)
For Each WSCopy In Workbooks(stFileName).Worksheets
If StrComp(WSCopy.CodeName, "Sheet1", vbTextCompare) = 0 Then
WSCopy.Range("A1", "BZ5000").Copy
wsData.Range("E2").PasteSpecial
wsData.Columns.AutoFit
Workbooks(stFileName).Close
Exit For
End If
Next WSCopy
End If
Edit: Я считаю, что я сузил проблему до линии: If StrComp(WSCopy.CodeName, "Sheet1", vbTextCompare) = 0 Then
Когда я пошагово рутины, то StrComp
оценивает должным образом. Если я прокомментирую строки If/End If
, процедура работает так, как ожидалось. Я использую эту строку, чтобы избежать проблем, возникающих, когда кто-то перемещает или переименовывает рабочий лист.
До сих пор он дошел до диалоги? Если он работает слишком быстро и что-то пропускает, вам может потребоваться добавить строку 'Do Events', чтобы замедлить ее, чтобы завершить одну операцию перед тем, как начать следующую. – CactusCake
Как насчет использования 'WSCopy.Range (« A1: BZ5000 »)'? – BruceWayne
@JoeMalpass, имеет смысл, что что-то может быть пропущено. Это объясняет, почему это будет работать при переходе, но не с помощью командной кнопки. Я добираюсь до filedialog, и выбранная книга открывается, но ничего не копируется. Где я должен добавить «Do events»? Отправьте ответ с вашим предложением, чтобы я мог выбрать его в качестве ответа. –