Нужна помощь для выполнения вырезать / вставить с VBA из одной книги в другую - PullRequest
0 голосов
/ 29 октября 2019

Я не использовал Excel более 10 лет, и это было все равно что начинать все сначала. У меня есть книга данных под названием «Данные» с необработанными данными на листе «Необработанные», и я пытаюсь создать лист для каждого агента, который называется «агент» (это будет изменено для каждого агента, но для простоты мы будем называть егона данный момент.) который вытягивает необработанные данные, по одной строке за раз, в свою рабочую область из рабочей книги данных.

Мне нужны ячейки A2: M2, вырезанные из листа «Необработанный» и вставленные в A4: M4 листа «агент». Я продолжаю получать ошибку "вне диапазона", когда я запускаю сабвуфер. Я связываю этот саб в кнопку, которую он нажимает, чтобы вызвать новую единственную строку данных.

После этого мне нужно будет создать саб, чтобы переместить данные из рабочей области в «Обработано». "лист на книгу" Данные ". Мне удобно, что я смогу написать этот саб после того, как заработаю первый.

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

Sub newcancel_click()
    If Range("M4").Value = "EN" Then 
        MsgBox "You must Complete Previous cancellation.", vbCritical, "Error" 
    Else 
        Sheets("Uncompleted").Select 
        Range("A1:L1").Select 
        Application.CutCopyMode = False 
        Selection.Copy 
        Sheets("Jeremy").Select 
        Range("B4").Select 
        ActiveSheet.Paste 
        Sheets("Uncompleted").Select 
        Rows("1:1").Select 
        Application.CutCopyMode = False 
        Selection.Delete 
        Shift:=xlUp 
        Sheets("Jeremy").Select 
    End If 
End Sub

1 Ответ

0 голосов
/ 29 октября 2019

Что касается вашего текущего кода, следующее должно работать лучше.

Sub Newcancel_click2()
If ThisWorkbook.Sheets(1).Range("M4").Value = "EN" Then
        MsgBox "You must Complete Previous cancellation.", vbCritical, "Error"
        Else
        Sheets("Jeremy").Range("B4:M4").Value = Sheets("Uncompleted").Range("A1:L1").Value
        Sheets("Uncompleted").Rows(1).EntireRow.Delete shift:=xlUp
End If
End Sub

Интересное чтение для вас: Как избежать использования select в VBA

Asдля вашей проблемы " Subscript out of range " может означать, что некоторые из ваших диапазонов не определены должным образом. Ваш выбор может не соответствовать назначению копирования, или (наиболее вероятно) лист, на который вы ссылаетесь, не существует (либо опечатка, либо вы еще не создали ее).

Чтобы сослаться на другую книгувы можете использовать Workbooks("Workbook name").Sheets("Sheet name").Range и т. д. Вы можете использовать activeworkbook для ссылки на текущую активную книгу (не рекомендуется согласно приведенной выше ссылке, чтобы не использовать select), и вы можете ссылаться на книгу, в которой код VBA используется с Thisworkbook,это проще, чем использовать два утверждения: Workbook("Name for this one") и Workbook("Name for the other one")

В вашем случае это будет выглядеть примерно так:

Sub Newcancel_click2()
If ThisWorkbook.Sheets(1).Range("M4").Value = "EN" Then
        MsgBox "You must Complete Previous cancellation.", vbCritical, "Error"
        Else
        Workbook("Agent").Sheets("Jeremy").Range("B4:M4").Value = Thisworkbook.Sheets("Uncompleted").Range("A1:L1").Value
        Thisworkbook.Sheets("Uncompleted").Rows(1).EntireRow.Delete shift:=xlUp
End If
End Sub

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

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