Введите значение в ячейки и не вставляйте из буфера обмена - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть макрос Excel (основной файл), который откроет другую книгу (источник данных) и должен вставить данные из некоторых строк в текущую книгу (основной файл).

Что-то не такчто макрос вставляет то, что я скопировал (я думаю, что он хранится в буфере обмена) в ячейку, которую я выбрал, прежде чем нажать кнопку Button1.Я попытался очистить буфер обмена, но это было бесполезно.

Option Explicit

Sub Button1_Click()

Application.ScreenUpdating = False

Dim last_row, i, j As Long
Dim wo_num As String

'open data source

Dim data_source As Workbook
Dim destination As Workbook

Set destination = ThisWorkbook
Set data_source = Workbooks.Open("xxxxxxxxxxxxxxxxxxxxxxxx", True, True)
Application.DisplayAlerts = False


'refresh data source connection to database
'data_source.RefreshAll

last_row = data_source.Worksheets(3).Cells(Rows.Count, 1).End(xlUp).Row

wo_num = "0000057305"
j = 1

'search for the cell that match wo_num and copy entire row then paste on main file
For i = 2 To last_row
    If data_source.Worksheets(3).Cells(i, 1) = wo_num Then
        'data_source.Worksheets(3).Rows(i).EntireRow.Copy
        destination.Worksheets(1).Rows(j).Value = data_source.Worksheets(3).Rows(i).Value
        destination.Worksheets(1).Paste
        j = j + 1
    End If
Next i

data_source.Close False

Application.ScreenUpdating = True

'clear the clipboard
Application.CutCopyMode = False

MsgBox "Done!"

End Sub

Что произошло на моем экране
What happened on my screen

Ячейка содержит "destination.Worksheets (1) .Cells (1, 26) .Select "- это строка кода, которую я имею, просто нажмите Ctrl + C.

1 Ответ

0 голосов
/ 22 декабря 2018

Вы используете массив на основе копирования данных, нет необходимости использовать paste, так как вы ничего не копируете в буфер обмена.Просто удалите эту строку или сделайте ее комментарием, добавив ' или REM к первой строке, точно так же, как вы делали для строки wholerow.copy ;-).

 For i = 2 To last_row
    If data_source.Worksheets(3).Cells(i, 1) = wo_num Then
        'data_source.Worksheets(3).Rows(i).EntireRow.Copy
        destination.Worksheets(1).Rows(j).Value = data_source.Worksheets(3).Rows(i).Value
        ' destination.Worksheets(1).Paste !! run your code without this line and see what is happening. 
        j = j + 1
    End If
Next i

Надеюсь, это решит вашу проблему.В противном случае нам нужно знать, когда что-то копируется в буфер обмена.Другим комментарием может быть не передача всей строки, если вы действительно не имеете значения во всех 16384 столбцах листа.Используйте cells(i,1).resize(,numberof columns), чтобы сделать ваш код более гибким.

      destination.Worksheets(1).cells(j,1).resize(,NumberofColumns).Value = data_source.Worksheets(3).cells(i,1).resize(,NumberofColumns).Value

хорошая работа в любом случае,

С уважением,
M

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