Excel - kopieren von nicht nebeneinander liegenden Zeilen
Geizhals » Forum » Software » Excel - kopieren von nicht nebeneinander liegenden Zeilen (54 Beiträge, 1153 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
...
Here is the code....
02.02.2018, 22:55:05
Because I was bored at the airport this evening, I wrote some code that should do what you need (at least as an example). Just put into Excel.

Make sure you have references to Word and Outlook:




Public Sub runMe()
    'error handler definition
    On Error GoTo error_handler
    
    'define excel objects
    Dim wbWorkbook As Excel.Workbook
    Dim shSheet As Excel.Worksheet
    
    'set excel objects to currents
    Set wbWorkbook = ActiveWorkbook
    Set shSheet = ActiveSheet
    
    'last header row to include, start with 1 to <iLastHeaderRow>
    Dim iLastHeaderRow As Integer
    iLastHeaderRow = 2
    
    'get last filled in row number
    Dim lLastNonemptyRow As Long
    lLastNonemptyRow = shSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    
    'prep outlook objects for creating mail to send
    Dim aOutlook As Outlook.Application
    Set aOutlook = New Outlook.Application
    Dim mMailItem As Outlook.MailItem
    Set mMailItem = aOutlook.CreateItem(olMailItem)
    Call mMailItem.Display 'only works with displayed mail

    Dim objdoc As Object
    Dim objsel As Word.Selection

    Set objdoc = aOutlook.ActiveInspector.WordEditor
    Set objsel = objdoc.Windows(1).Selection
    
    'funny thing ... this doesn't work as expected - you always get also the lines in between the multiple nonconsecutive selects *grml*
    'shSheet.Range("1:" & iLastHeaderRow & "," & lLastNonemptyRow & ":" & lLastNonemptyRow).EntireRow.Select
    'shSheet.Range("1:" & iLastHeaderRow & "," & lLastNonemptyRow & ":" & lLastNonemptyRow).EntireRow.Copy
    
    'copy and paste header row(s)
    shSheet.Range("1:1, " & iLastHeaderRow & ":" & iLastHeaderRow).EntireRow.Copy
    Call objsel.Paste
    'copy and paste last row (outlook automatically joins it to one table)
    shSheet.Range(lLastNonemptyRow & ":" & lLastNonemptyRow).EntireRow.Copy
    Call objsel.Paste
    
    'explicit exit before running error handler
    Exit Sub
    
error_handler:
    Call MsgBox("Error: " & Err.Description, vbOKOnly + vbCritical, "Error " & Err.Number)

End Sub




(Surely not my finest code... but hey, it's VBa, so f*ck it...)

02.02.2018, 22:56 Uhr - Editiert von lsr2, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
...............
Re(12): Here is the code....
23.02.2018, 21:32:06
Sorry fuer den delay - ich schau meistens nur am WE ins Forum.

Pfff.... was fuer eine dumme Firma (SCNR).

Zwar hatte ich heute wieder nur Zeit fuer einen Kaffee, aber ich finde die Aufgabenstellung ganz lustig und hab mich dann halt in der Wohnung rumgespielt. Mein Tageshonorar ist normalerweise vierstellig, aber nachdem die Firma nicht zahlt ist das wohl eher keine Option (ich will damit weder angeben noch sonstwas; ich kriege das auch nicht fuer's VBA programmieren).

Vorschlag: 20 EUR Spende an eine wohltaetige Organisation deiner Wahl (ohne weiteres eine von dieser Liste - dann kannst  du das wenigstens auch in die Arbeitnehmerveranlagung nehmen: https://service.bmf.gv.at/service/allg/spenden/_start.asp )

Das Ergebnis das mein code derzeit macht sieht wie folgt aus:
http://666kb.com/i/dr8se7uhonkvjx6ed.png

a) Spalte A-T
b) Header wird ab Zeile 2 kopiert (einstellbar mit Variable)
c) Formatierung (getestet laut screenshot mit wrap, bold, italic)
d) Gitterformatierung wird mitgenommen

Wichtig: Email Format muss per default auf HTML eingestellt sein (wenn man eine neue Mail erstellt).

Lass mich wissen ob das fuer dich akzeptabel ist - dann paste ich den Code, damit du ihn testen kannst. Ich verlasse mich dann auf deine Ehrlichkeit was die Spende betrifft.

PS: Was ich um die Burg nicht hinbekommen habe ist die 1 Pixel Differenz zwischen header und last row - da wollte ich aber ehrlicherweise auch nicht zu viel Zeit investieren :-|

23.02.2018, 23:58 Uhr - Editiert von lsr2, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
.................
Re(14): Here is the code....
02.03.2018, 18:55:38
Ich hoffe dir geht es wieder besser!
Heute war wegen Schnee wieder mal sowieso alles verspaetet... :-/

Tierheim finde ich voll OK :-)

Bitte teste mal folgenden Code:


Public Sub runMe()
    'error handler definition
    On Error GoTo error_handler
    
    'define excel objects
    Dim wbWorkbook As Excel.Workbook
    Dim shSheet As Excel.Worksheet
    
    'set excel objects to currents
    Set wbWorkbook = ActiveWorkbook
    Set shSheet = ActiveSheet
    
    'first header row to include
    Dim iFirstHeaderRow As Integer
    iFirstHeaderRow = 2
    
    'last header row to include, start with <iFirstHeaderRow> to <iLastHeaderRow>
    Dim iLastHeaderRow As Integer
    iLastHeaderRow = 3
    
    'define column range
    Dim sFirstCol As String
    sFirstCol = "A"
    Dim sLastCol As String
    sLastCol = "T"
    
    'get last filled in row number
    Dim lLastNonemptyRow As Long
    lLastNonemptyRow = shSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    
    'prep outlook objects for creating mail to send
    Dim aOutlook As Outlook.Application
    Set aOutlook = New Outlook.Application
    Dim mMailItem As Outlook.MailItem
    Set mMailItem = aOutlook.CreateItem(olMailItem)
    Call mMailItem.Display 'only works with displayed mail

    Dim objdoc As Object
    Dim objsel As Word.Selection

    Set objdoc = aOutlook.ActiveInspector.WordEditor
    Set objsel = objdoc.Windows(1).Selection
    
    'funny thing ... this doesn't work as expected - you always get also the lines in between the multiple nonconsecutive selects *grml*
    'shSheet.Range("1:" & iLastHeaderRow & "," & lLastNonemptyRow & ":" & lLastNonemptyRow).EntireRow.Select
    'shSheet.Range("1:" & iLastHeaderRow & "," & lLastNonemptyRow & ":" & lLastNonemptyRow).EntireRow.Copy
    
    'copy and paste header row(s)
    shSheet.Range(sFirstCol & iFirstHeaderRow, sLastCol & iLastHeaderRow).Copy
    Call objsel.Paste
    
    'copy and paste last row (outlook automatically joins it to one table)
    shSheet.Range(sFirstCol & lLastNonemptyRow, sLastCol & lLastNonemptyRow).Copy
    Call objsel.Paste
    
    'explicit exit before running error handler
    Exit Sub
    
error_handler:
    Call MsgBox("Error: " & Err.Description, vbOKOnly + vbCritical, "Error " & Err.Number)

End Sub


Fuer mich brauch ich nix, danke. Ich hab alles was ich gern haette - und das was mir fehlt, kann man nicht kaufen und mir nicht schenken. Ich automatisier einfach gerne repetitive Dinge.


Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung