Välja filtrerad data i Excel med VBA

Trädvy Permalänk
Medlem
Plats
Södra norrland
Registrerad
Jul 2003

Välja filtrerad data i Excel med VBA

Tjo,

att säga att jag kastat mig ner i den djupa ändan av poolen vore nog en försköning av vad jag håller på med på sistonde. Har fått för mig att jag ska få ihop några "enkla" saker med VBA för att förenkla livet på jobbet. Anledningen till att jag postar är såklart för att jag kört fast. Har letat runt på nätet och hittat ungefär lika många olika lösningar som det finns människor som svarar men jag får tyvärr inte ihop det.

Vad jag vill göra är att ha en knapp som autofiltrerar ett kalkylark baserat på input från användaren och den delen har jag fått att fungera någorlunda. Just nu autosorterar den bara den range som jag angett och det vore ju trevligt om den själv listade ut vilken range den ska titta på. Jag har testat en lösning jag hittade på nätet men utan någon större lycka, den kastar bara ur sig att ett objekt är fel (fel 424).

När arket är filtrerat vill jag att det filtrerade innehållet ska flyttas in i urklipp (clipboard) så att det kan läggas in i google sheets manuellt. Jag har förstått att det är möjligt att gå direkt till sheets från excel och hittade en guide för att göra det men just nu kändes det lite utanför min kraftigt begränsade förmåga.

Hur det nu än är så för jag inte själva kopieringsgrejen att fungera, eller ja jag tror att det är att välja (select) texten som inte fungerar som jag vill, troligen för att jag använder mig av en sak jag inte förstår som jag kopierat från nätet. När jag kör koden spottar det ur sig fel 91 som jag fått fram att det verkar bero på att jag saknar ett With...End With block men eftersom jag inte ens vet vad ett sådant är så blir det väldigt svårt.

All hjälp mottages tacksamt även om det så bara är någon slags förklaring till vad tusan felmeddelandet betyder eller vad ett With block är för något.

Koden är i varje fall nedan och min dokumentation är tyvärr på engelska eftersom... ptja det kändes enklast så.

Sub FilterMacro() 'Declare variables for the filter and gather them from the user Dim StartDate As Variant, StopDate As Variant StartDate = InputBox("Ange datumet du vill börja filtrera från") StopDate = InputBox("Ange sista datumet du vill filtrera till") 'Filter between dates in the MailMerge sheet 'TODO: Figure out how to make the range adaptive so it chooses from the entire range but only filled rows 'Range(Range("J2", Range("J2").End(xlDown)) was tried instead of Range("J2:J5") but did not work as I thought it would based on http://www.excel-easy.com/vba/examples/from-active-cell-to-la... Worksheets("MailMerge").Range("J2:J5").AutoFilter field:=1, _ Criteria1:=">=" & StartDate, _ Operator:=xlAnd, _ Criteria2:="<=" & StopDate 'Select the filtered data using magic found at http://www.mrexcel.com/forum/excel-questions/420468-select-fi... 'TODO: Figure out why this doesn't work Dim LR As Range LR = Worksheets("MailMerge").Range("A" & Rows.Count).End(xlUp).Row Worksheets("MailMerge").Range("A2:M" & LR).SpecialCells(xlCellTypeVisible).Select 'Copy the selected data to the clipboard Selection.Copy 'Turn off autofilter in the MailMerge sheet Worksheets("MailMerge").AutoFilterMode = False 'Tell the user they can now paste the information from the clipboard MsgBox "Du kan nu klistra in datan i andra applikationer", vbOKOnly, "Klar!" End Sub

Stationär: i5 750@3.8GHz kylt av H80 P'n'P| Asus DC2 7970 | 8GB RAM | 750GB SSD + 2.5TB HDD | FD Define R2 | beQuiet Dark Power 850W |
Bärbar: 13" rMBP | i5 2.4GHz | 8GB RAM | 256GB SSD | Intel Iris |

Trädvy Permalänk
Medlem
Plats
Södra norrland
Registrerad
Jul 2003

Fick hjälp från annat håll och koden ser i slutändan ut ungefär såhär

Sub test() Dim rFilter As Range 'range of cells to be filtered Dim lr As Long ' last used row number Dim StartDate As Date Dim StopDate As Date StartDate = InputBox("Start Date") StopDate = InputBox("Stop Date") 'Get last used row. lr = Worksheets("MailMerge").Range("A" & Rows.Count).End(xlUp).Row 'Set a range object to equal the entire range you are filtering 'Make sure you include the header row too! Set rFilter = Worksheets("MailMerge").Range("A1:M" & lr) 'Apply filter to field 10 (Column J), making sure to format the dates the same as the cells rFilter.AutoFilter Field:=10, _ Criteria1:=">=" & Format(StartDate, "yyyy-mm-dd"), _ Operator:=xlAnd, _ Criteria2:="<=" & Format(StopDate, "yyyy-mm-dd") 'Copy range. This will only copy rows that haven't been filtered Worksheets("MailMerge").Range("A2:M" & lr).SpecialCells(xlCellTypeVisible).Copy 'Important: You need to paste the contents before removing the filter EG.: Worksheets("MailMerge").Range("A" & lr + 2).PasteSpecial xlPasteAll 'Remove filter rFilter.AutoFilter End Sub

Delar av den kommer successivt att bytas ut så som delen som lägger in värdena direkt i arket men två rader ner. Det viktiga för mig är dock att det fungerar och att jag nu kan gå vidare.

Stationär: i5 750@3.8GHz kylt av H80 P'n'P| Asus DC2 7970 | 8GB RAM | 750GB SSD + 2.5TB HDD | FD Define R2 | beQuiet Dark Power 850W |
Bärbar: 13" rMBP | i5 2.4GHz | 8GB RAM | 256GB SSD | Intel Iris |