Как запустить макрос одновременно в нескольких файлах книги? - PullRequest
0 голосов
/ 01 ноября 2019

Впервые спасибо за этот макрос! У меня небольшая проблема. Мне нужно «перезаписать» много рабочих книг со многими рабочими листами в качестве значений. Я использовал этот код:

Но этот код «восстанавливать» только первую книгу, а остальные только открывали. В чем проблема?

Спасибо за помощь

Sub LoopThroughFiles()
Dim xFd As FileDialog
Dim xFdItem As Variant
Dim xFileName As String
Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
If xFd.Show = -1 Then
xFdItem = xFd.SelectedItems(1) & Application.PathSeparator
xFileName = Dir(xFdItem & "*.xls*")
Do While xFileName <> ""
With Workbooks.Open(xFdItem & xFileName)

Dim wsh As Worksheet
For Each wsh In ThisWorkbook.Worksheets
wsh.Cells.Copy
wsh.Cells.PasteSpecial xlPasteValues
Next
Application.CutCopyMode = False
End With
xFileName = Dir
Loop
End If
End Sub

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Вы можете попробовать что-то вроде следующего:

    Sub OpenFiles()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim MyFolder As String
Dim MyFile As String
Dim wbCurrent As Workbook
Dim wsh As Worksheet

MyFolder = "Enter Folder directory here"
MyFile = Dir(MyFolder & "\*.xlsm")

Do While MyFile <> ""
Set wbCurrent = Workbooks.Open(Filename:=MyFolder & "\" & MyFile, UpdateLinks:=False)
For Each wsh In wbCurrent.Worksheets
        wsh.Cells.Copy
        wsh.Cells.PasteSpecial xlPasteValues
Next


wbCurrent.Close SaveChanges:=True
MyFile = Dir

Loop
End Sub

Если все ваши рабочие книги находятся в одной папке, откроется каждая из них, скопируйте и вставьте ячейки в каждую таблицу, затем сохраните, прежде чем перемещатьна следующую рабочую книгу.

0 голосов
/ 01 ноября 2019

ThisWorkbook относится к книге с макросом. Если вы хотите обратиться к другим рабочим книгам, вам нужно определить переменные для них. Запустите этот простой макрос, когда открыто несколько рабочих книг, чтобы получить представление, а затем настройте его в соответствии с вашими потребностями.

enter image description here

Option Explicit
Sub test()
Dim wk As Workbook
For Each wk In Workbooks
    MsgBox "this workbook is named: " & wk.Name
Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...