Excelmakro för att kopiera ett område till "clipboard"

Permalänk
Medlem

Excelmakro för att kopiera ett område till "clipboard"

Halloj.
Har lite bekymmer med ett excelmakro som skall kopiera ut en större del av ett blad till "clipboard".

Kör jag detta macro så funkar det bra :

Sub CopyToClip() Dim objData As New MSForms.DataObject Dim strText strText = Worksheets("Blad1").Range("B2").Text objData.SetText strText objData.PutInClipboard End Sub

Det stom står i Cell B2 hamnar i "clipboard" och jag kan kopiera in det var som.
Men ändrar jag Range("B2") till Range("B2: D3") så får jag bara error "Körfel nr '94'.: Ogiltigt användning av Null."

Jag förstår inte vad jag gör fel. Har testat ned Range("B2: D3"), Range("B2":"D3"), Range("B2;D3"),Range("B2,D3"), Range(B2,D3) osv men får det inte att funka.

Är det något som vet/ser vad jag gör för fel? Det är alltid samma cellområde som skall kopieras.

//milkacid

EDIT : Fick in lite smilies i koden.

Permalänk
Hedersmedlem

Kanske får man inte använda .Text på många celler samtidigt? Ett alternativ är kanske

Worksheets("Blad1").Range("B2:D3").Copy

Permalänk
Medlem
Skrivet av Elgot:

Kanske får man inte använda .Text på många celler samtidigt? Ett alternativ är kanske

Worksheets("Blad1").Range("B2:D3").Copy

Har testat detta men då får jag bara "Sant" i clipboard :/

Permalänk
Hedersmedlem
Skrivet av milkacid:

Har testat detta men då får jag bara "Sant" i clipboard :/

Blir rätt område markerat med den där streckade "kopierade celler"-rektangeln?

Permalänk
Medlem

Har testat skriva om scriptet lite den klarar av att markera området och så, men den verkar inte vilja förstå att det är vanlig text i cellerna som jag vill kopiera.

Permalänk
Hedersmedlem
Skrivet av milkacid:

Har testat skriva om scriptet lite den klarar av att markera området och så, men den verkar inte vilja förstå att det är vanlig text i cellerna som jag vill kopiera.

Vad händer? Detta verkar i alla fall fungera:

Permalänk
Inaktiv
Skrivet av milkacid:

Halloj.
Jag förstår inte vad jag gör fel. Har testat ned Range("B2: D3"), Range("B2":"D3"), Range("B2;D3"),Range("B2,D3"), Range(B2,D3) osv men får det inte att funka.

Är det något som vet/ser vad jag gör för fel? Det är alltid samma cellområde som skall kopieras.

Du gör många fel, inte menat för att vara taskig men det är bra att lära sig.

Följande kod:

Sub CopyToClip() Dim objData As New MSForms.DataObject Dim strText strText = Worksheets("Blad1").Range("B2").Text objData.SetText strText objData.PutInClipboard End Sub

Varför använda ett MSForms.DataObject, hur fick du denna ide att använda ett objekt från Forms library?
När du använder text läser du ut en sträng, när du markerar flera celler i en range så är det inte självklart vad .text ska ge ut för svar och rimligt är att den ska generera ett error.

Elgots lösning är den generella som man använder för denna enkla operation.

Permalänk
Medlem

Tack för era svar.
Jag är inte helt bra på programmering så tar inte åt mig :).

Att bara köra enligt Elgots exempel uppnår inte riktigt det resultat jag önskar, det är samma effekt som att markera och kopiera celler i Excel. Så fort man trycker esc eller gör något annat så försvinner informationen från clipboard.

Att använda MSForms.DataObject är ett sätt att få in information i "riktiga" clipboard så att jag kan stänga excel och fortfarande ha kvar datan i clipboard. Men onekligen så behärskar jag inte detta tillräckligt bra för att få någon ordning på det.

Mvh
milkacid

Permalänk
Hedersmedlem
Skrivet av milkacid:

Att använda MSForms.DataObject är ett sätt att få in information i "riktiga" clipboard så att jag kan stänga excel och fortfarande ha kvar datan i clipboard.

Så länge man låter bli escape går det väl bra att stänga av excel?

Permalänk
Medlem
Skrivet av Elgot:

Så länge man låter bli escape går det väl bra att stänga av excel?

Nope.

Permalänk
Medlem

Har hittat lösningen.

Sub CopyToClipboard() Dim doClip As DataObject Dim sText As String Dim rCell As Range, rRow As Range Dim rSrc As Range Set doClip = New DataObject Set rSrc = Blad1.Range("B24:B42") For Each rRow In rSrc.Rows For Each rCell In rRow.Cells sText = sText & rCell.Text & vbNewLine Next rCell Next rRow doClip.SetText sText doClip.PutInClipboard Set doClip = Nothing End Sub

Funkar helfint och gör precis det jag önskar.

Permalänk
Inaktiv
Skrivet av milkacid:

Har hittat lösningen.

Sub CopyToClipboard() Dim doClip As DataObject Dim sText As String Dim rCell As Range, rRow As Range Dim rSrc As Range Set doClip = New DataObject Set rSrc = Blad1.Range("B24:B42") For Each rRow In rSrc.Rows For Each rCell In rRow.Cells sText = sText & rCell.Text & vbNewLine Next rCell Next rRow doClip.SetText sText doClip.PutInClipboard Set doClip = Nothing End Sub

Funkar helfint och gör precis det jag önskar.

Okej, att du ville kopiera den på detta sätt förklarar allt. Då finns det logik i att blanda in andra komponeter, jag ber om ursäkt för det som jag skrev innan.

Resultatet av din lösning blir att den bearbetar datan. I ditt fall kan du transformera den som du vill, den är idag inte så bra för att kopiera mellan olika excelfiler, men det var inte hellre ditt behov.

Nå jag tackar för ditt förslag för denna teknik kommer jag säkerligen andra i någon av mina kommande excellösningar när jag vill bearbeta utklippshanteraren precis som jag vill.