Можно вставить содержимое в лист, который не активен? - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно вставить некоторые данные в лист в Excel, который не активен. Это возможно?

Каждые десять секунд содержимое копируется из другой программы (не в Excel) благодаря сценарию. Затем мне нужно вставить содержимое в фоновый лист в книге Excel, но я не хочу, чтобы экран каждый раз вспыхивал, активируя фоновый лист, куда идут данные, а затем обратно на основной лист.

Содержимое уже находится в буфере обмена при запуске макроса.

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

Sub pastecontent()
Sheets("searchresult").UsedRange.ClearContents
Sheets("searchresult").select
ActiveSheet.PasteSpecial Format:="Unicode-text", Link:=False, _
DisplayAsIcon:=False, NoHTMLFormatting:=True
Sheets("Show").Select
End Sub

Это то, что я хочу

Sub pastecontent()
Sheets("searchresult").UsedRange.ClearContents
Sheets("searchresult").PasteSpecial Format:="Unicode-text", Link:=False,   
DisplayAsIcon:=False, NoHTMLFormatting:=True
End Sub

Возможно ли это? / Jens

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Я наконец получил его на работу!Спасибо всем!Вот код, который сделал трюк:

sub pastecontent()
Sheets("privata").UsedRange.ClearContents
Sheets("privata").Range("A1").PasteSpecial xlPasteAll
end sub

Так просто!Еще раз спасибо!:) / Jens

1 голос
/ 22 мая 2019

Очень возможно и даже предпочтительнее избегать использования Activate.Посмотрите на эту веб-страницу для краткого обсуждения.Но вам все равно нужно скопировать данные в буфер обмена, чтобы вставить.Итак, опираясь на ваш пример:

Option Explicit

Sub PasteContentExample()
    Dim dataSource As Range
    Set dataSource = ThisWorkbook.Sheets("searchresult").UsedRange

    Dim dataDestination As Range
    Set dataDestination = ThisWorkbook.Sheets("anothersheet").Range("A1")
    Set dataDestination = dataDestination.Resize(dataSource.Rows.Count, dataSource.Columns.Count)

    dataSource.Copy
    dataDestination.PasteSpecial xlPasteAll

    '--- clear all data and formatting from the source area
    dataSource.Clear
End Sub

Обратите внимание, что этот код не очищает исходное содержимое до тех пор, пока он не будет скопирован.

Также обратите внимание, что ему не нужны Select или Activate:)

...