bereik (Range) deselecteren

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
659
Ik vrees dat ik een heel domme vraag heb...:

Ik heb een beveiligde sheet in Excel (2007) en via Range("B1:Q64").Copy plaats ik het bereik op het prikboord, zodat ik het met plakken (speciaal) in een Word document als plaatje kan plakken. Vervelend is nu dat door middel van een kader van stippe/streeplijntjes het gebied geselecteerd blijft in Excel. Ik had gehoopt een 'Deselect te kunnen gebruiken, maar dat is klaarblijkelijk niet beschikbaar. Ik heb het nu opgelost door een verborgen bereik te selecteren door middel van Range("A1").Copy, maar fraai is het niet. Iemand een oplossing?
 
Code:
Application.CutCopyMode = False

Niels
 
Dat werkt, maar niet helemaal goed, want nu is ie niet meer beschikbaar om te plakken. Ik moet een bepaald bereik dus op het klemboord zien te krijgen zonder dat het gebied er als geselecteerd uit ziet.
 
sorry, maar dat werkt ook niet (het gaat om een beveiligde sheet)
 
Je kunt ook naar het klembord schrijven en er van lezen zonder select, copy en paste te gebruiken door deze direct aan te spreken:

Code:
Sub SchrijfKlembord()
    Dim DataObj As New MSForms.DataObject
    Dim S As String
    
    S = "Hello World"
    DataObj.SetText S
    DataObj.PutInClipboard
End Sub

Sub LeesKlembord()
    Dim DataObj As New MSForms.DataObject
    Dim S As String
    DataObj.GetFromClipboard
    S = DataObj.GetText
   Msgbox S
End Sub

Hiervoor is in VBA wel een verwijzing naar de Microsoft Forms 2.0 Object Library vereist.
 
Laatst bewerkt:
Onbeperkt plakken met:

Code:
Sub M_snb()
    Range("A1:D6").Copy
  
    With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard
        c00 = .GetText
    End With

    Application.CutCopyMode = False
    
    With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText c00
        .PutInClipboard
    End With
End Sub
 
Ok, hetzelfde dus met late binding en daarom geen Reference nodig ;)
 
Dank voor de aangedragen oplossingen. Die van edmoor kreeg ik niet aan de praat, die van snb direct. Resultaat is echter platte tekst, terwijl ik juist een plaatje 'Afbeelding(enhanced metabestand)' zou willen hebben om in Word te kunnen plakken. Is bovenstaande code daarop gemakkelijk aan te passen? Ik heb er naar gezocht, maar helaas snap ik de code niet helemaal.
 
Dat is heel wat anders dan je initiële vraag m.b.t. een range. Een plaatje is geen inhoud van een cel of een range maar een picture of een shape object die op het blad ligt en daar moet totaal anders mee omgegaan worden.
 
Laatst bewerkt:
@edmoor: in de vraag staat wat TS wilde...
Is dit te simpel?
In Excel deze macro:
Code:
Sub SchrijfKlembord()
    Range("A1:G10").CopyPicture Appearance:=xlScreen, Format:=xlPicture
End Sub

En in Word deze:
Code:
Sub KlembordPlakken()
    Selection.Paste
End Sub
 
Wellicht dat dat ook kan. Als het gekopieerde gedeelte maar niet geselecteerd blijft.
Ik ben blijven steken in dat clipboard gebruik.

Of je voorbeeld de bedoeling is kan TS het beste beoordelen :)
 
@edmoor: Uiteraard was de code voor TS bedoeld.... zó belangrijk ben je nu ook weer niet dat ik een antwoord eerst aan jou voor leg ;). Met alle respect, maar dan stap ik toch eerst naar snb :D
 
Het was ook niet mijn bedoeling dat te impliceren ;)
Wat snb betreft, dat zou ook mijn keuze zijn :)
 
Laatst bewerkt:
Om de hele mikmak vanuit Word te doen, zodat je het Excel ding niet eens hoeft te zien, al kan dat in dit voorbeeld wel:
Code:
Sub testPlakken()
Dim xlApp As Object
Dim thisWb As Object
Dim thisWs As Object
Dim rng As Object

    'Voorbeeld met Late Binding, zodat je je niet druk hoeft te maken over de versies.
    Set xlApp = GetObject(, "Excel.application") 'Geeft Error 429 als Excel niet is geopend
    If Err.Number = 429 Then
        Err.Clear
        Set xlApp = CreateObject("Excel.Application")
    End If
    If Not xlApp Is Nothing Then
        xlApp.Visible = True
    Else
       MsgBox "Unable to retrieve Excel."
        Exit Sub
    End If
    Set thisWb = xlApp.Workbooks.Open("C:\mytest.xls")
    Set thisWs = thisWb.Worksheets(1)
    thisWs.Range("B1:Q64").CopyPicture Appearance:=xlScreen, Format:=xlPicture
    Selection.Paste
End Sub
 
De oplossing van OctaFish (nr. 11) is perfect voor mij; hartelijk dank. Bijkomend voordeel is dat ik, met ietwat aanpassen van de code, nu ook een aantal grafiekbladen zo kan transporteren naar Word. Dit was me al op andere wijze gelukt maar eveneens niet helemaal bevredigend: nu hoeft de gebruiker niet meer 'plakken als' te kiezen en het juiste bestandsformaat te selecteren, wat vaak fout blijkt te gaan. Prachtig opgelost dus.

edmoor en snb ook nog hartelijk dank voor het mee zoeken naar een oplossing!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan