Excel VBA - код для перемещения или копирования листов без предупреждений - PullRequest
1 голос
/ 07 ноября 2011

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

Вкратце, как заставить работать следующий код, где WorksheetIWantToCopy - это тот, который пользователь выбрал в данный момент, а OpenWorkbookIWantToCopyToo.xlsx - это рабочая книга выбранный пользователем из списка открытых рабочих книг .

Application.DisplayAlerts = False
Sheets("**WorksheetIWantToCopy**").Select
Sheets("**WorksheetIWantToCopy**").Copy Before:=Workbooks( _
    "**OpenWorkbookIWantToCopyToo.xlsx**").Sheets(1)

Я ценю любую информацию, которую может предоставить каждый. Моя команда очень ценит вашу поддержку (в настоящее время нам нужно набрать 25 предупреждений из-за конфликтов, которые нас не волнуют). Thx!

Ответы [ 2 ]

1 голос
/ 14 января 2012

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

Что касается предоставления пользователю возможности выбрать рабочую книгу, это может быть так же просто, как использовать InputBox.

Public Function getWorkbookName() As String
   Dim i As Integer, sListOfWbks As String, sRsp As String
   ' build list of workbooks
   For i = 1 To Workbooks.Count
      sListOfWbks = sWbkList & vbCrLf & i & " - " & Workbooks(i).Name
   Next i
   sRsp = InputBox("Select workbook." & vbCrLf & sListOfWbks)
   If IsNumeric(sRsp) Then
      getWorkbookName = Workbooks(CInt(sRsp)).Name
   Else
      ' user pressed cancel or entered invalid text
      getWorkbookName = ""
   End If
End Function

В этом базовом примере будут, конечно, перечислены все рабочие книги, включая скрытые надстройки и рабочую книгу, из которой вы удаляетесь.

0 голосов
/ 17 апреля 2017

Это нужно сказать прежде всего: всегда, всегда, ВСЕГДА используют .Copy вместо .Move при автоматической перетасовке книг Excel с VBA.Move сопряжён с риском, потому что он является модификацией другого файла, и если ваш код плохо себя ведет, вы можете потерять все данные, с которыми работаете.

Прежде всего, узнайте, какая книга является какой, без двусмысленности:

Dim wkbkDestination, wkbkTemporary As Workbook
Set wkbkDestination = Workbooks("OpenWorkbookIWantToCopyTo.xlsx")
Set wkbkTemporary = Workbooks.Open("WorkbookIWantToCopy.xlsx")

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

wkbkTemporary.Worksheets("WorksheetIWantToCopy").Copy Before:=wkbkDestination.Worksheets(1)
wkbkDestination.Worksheets(1).Name = "WorkbookIWantToCopy"
wkbkTemporary.Close SaveChanges = False

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...