Aktywacja arkusza

0

hej

Zaczynam zabawe z VBA i mam jeden problem. Chciałbym aby makro pobierało mi dane z innego pliku w którym arkusze są opisane datami z całego miesiąca. Konkretnie potrzebuje aby aktywowało arkusz z wczorajszą datą i pobierało z niego konkretne dane. W chwili obecnej muszę się bawić w ręczne wpisywanie daty ,,Worksheets("07.07.2020").Activate''

2

Aby pobrać dane, nie musisz aktywować arkusza. Co więcej - ni polecam tego. Z różnych względów.
Ale skoro się upierasz, to:

.Worksheets(Format$(now()-1,"dd.mm.yyyy")).Activate
0
Marcin.Miga napisał(a):

Aby pobrać dane, nie musisz aktywować arkusza. Co więcej - ni polecam tego. Z różnych względów.
Ale skoro się upierasz, to:

.Worksheets(Format$(now()-1,"dd.mm.yyyy")).Activate

Generalnie w każdym z arkuszy z którego pobieram dane posiadają identyczne tabelki tylko różnią się wartośćiami ponieważ znajdują się tam raporty za poprzedni dzień, jeżeli nie mam formuły, która aktywuje mi arkusz z datą za dzień wstecz aby pobrać dane to pobierają się dane z arkusza z bieżącego dnia i dane się nie zgadzają.

1

To znaczy, że źle pobierasz - pokaż kod. Aktywacja arkusza strasznie spowalnia cały proces pobierania danych - jeśli masz ich dużo (rzędu powyżej 20 tys wierszy), to jest to już widoczne.

0
Marcin.Miga napisał(a):

To znaczy, że źle pobierasz - pokaż kod. Aktywacja arkusza strasznie spowalnia cały proces pobierania danych - jeśli masz ich dużo (rzędu powyżej 20 tys wierszy), to jest to już widoczne.

Sub otwórzplikaprod()
' This macro will import a file into this workbook
Sheets("Wklej produktywność").Select
PathName = Range("W1").Value
Filename = Range("W2").Value
Workbooks.Open Filename:=PathName & Filename
If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
Range("A2:J150").Copy
Workbooks("KALKULATOR PROCESOWY IDEALNYY.xlsm").Sheets("Wklej produktywność").Activate
Range("B2:K2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Workbooks.Open Filename:=PathName & Filename
ActiveWindow.Close SaveChanges:=False
Sheets("Wklej produktywność").Select
PathName = Range("W3").Value
Workbooks.Open Filename:=PathName
Worksheets(Format$(Now() - 1, "dd.mm.yyyy")).Activate
Range("L85").Copy
Workbooks("KALKULATOR PROCESOWY IDEALNYY.xlsm").Sheets("RUNCHARTY").Activate
Worksheets("Runcharty").Range("D2").PasteSpecial Paste:=xlPasteValues
Workbooks("NOWY PLAN ZMIANY ROBERT.xlsx").Worksheets(Format$(Now() - 1, "dd.mm.yyyy")).Activate
Range("L26").Copy
Workbooks("KALKULATOR PROCESOWY IDEALNYY.xlsm").Sheets("RUNCHARTY").Activate
Worksheets("Runcharty").Range("B2").PasteSpecial Paste:=xlPasteValues
Sheets("Runcharty").Select
Range("B2:M2").Copy
Workbooks.Open ("\dczgo01\PUBLIC\WSPÓLNY ZMIANA A I B\Run Chart.xlsx")
Worksheets("LIPIEC ZM.B").Activate
Workbooks("NOWY PLAN ZMIANY ROBERT.xlsx").Activate
ActiveWindow.Close SaveChanges:=False

End Sub
0

Jezu, to jest nagrane makro... mnóstwo niepotrzebnego kodu.

2

Początek Ci poprawiłem, dalej nie mam czasu...

'Sub otwórzplikaprod()
Sub OtworzPlikaProd()
'Pisz Camelem bez PL
Dim objData as Workbook, objCurr as Workbook
Dim objSData As Worksheet

' This macro will import a file into this workbook
   'Sheets("Wklej produktywność").Select
   ' niepotrzebne
  'PathName = Range("W1").Value
  'Filename = Range("W2").Value
  'Workbooks.Open Filename:=PathName & Filename
  
  Set objCurr = ActiveWorkbook
  Set objData = Workbooks.Open(Sheets("Wklej produktywność").Range("W1").Value & Sheets("Wklej produktywność").Range("W2").Value)
  
  If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
  ' To jest zupełnie skopane - nie umiem poprawić. Zakłada, że Skoroszyt otworzy się na jakim s jednym arkuszu z danymi. A co jeśli bedą 3 arkusze? A co jeśli otworzy się na nie tym arkuszu?
  Set objSData=objData.ActiveSheet

'  Range("A2:J150").Copy
'  Workbooks("KALKULATOR PROCESOWY IDEALNYY.xlsm").Sheets("Wklej produktywność").Activate
'  Range("B2:K2").Select
'  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  objSData.Range("A2:J150").Copy
  objData.Sheets("Wklej produktywność").Range("B2:K2").PasteSpecial(xlPasteValues)
0

Mam jeszcze jedno pytanie, czy można w jakiś sposób stworzyć makro które się uruchamia w pliku ,,A'' otwiera plik ,,B'' oraz w pliku ,,B'' aktywuje arkusz z nazwą która znajduję się w pliku ,,A'' np w komórce A4??

0

Można :)

0
Marcin.Miga napisał(a):

Można :)

Ha a mogłbyś jakoś podpowiedzieć w jaki sposób to mogę zrobić bo szperałem po googlach i nie mogłem tego wyłapać.

0
.Sheets("ala").Activate
0

Nie do końca rozumiem, dopiero zaczynam zabawe z VBA, więc może to jest jakaś banalna sprawa ale mimo wszystko makro nie chce aktywować arkuszy, które chce. W pliku A posiadam nazwę pliku,w komórce C1 które makro ma otworzyć oraz w komórce A2 umieściłem nazwe arkusza czyli datę , którą chciałbym aby się aktywowała po otwarciu pliku. Potrzebuje aby po zmianie daty w komórce A2 aktywował mi arkusz w drugim pliku z tą konkretną datą i pobierał z nich dane. Chwilowo działam na tym .Worksheets(Format$(Now() - 1, "dd.mm.yyyy")).Activate ale w poniedziałki muszę zaciągnąc dane z piątku, więc wygodniej byłoby mi wpisywać dokładną datę. Dodałem załaczniki.

0

Pokaż kod.

0
Marcin.Miga napisał(a):

Pokaż kod.

Sub otwórzplikaprod() This macro will import a file into this workbook Sheets("runcharty").Activate PathName = Range("W3").Value Workbooks.Open Filename:=PathName Range("L26").Copy Workbooks("testowanie.xlsm").Sheets("RUNCHARTY").Activate Worksheets("Runcharty").Range("A4").PasteSpecial Paste:=xlPasteValues End Sub

Tak naprawde to tylko mam i do tego momentu działa poprawnie, ale pobiera dane z ostatniego arkusza bo nie mam pojęcia jaką funkcje użyć by aktywowało nazwę arkusza wpisanego w komórce A2...

0

Napisz słowami, po kolei, co chcesz zrobić. Szybciej tak napisże kod, niż analizując twój błędny i domyslając się "co poeta miał na myśli"...

0
Marcin.Miga napisał(a):

Napisz słowami, po kolei, co chcesz zrobić. Szybciej tak napisże kod, niż analizując twój błędny i domyslając się "co poeta miał na myśli"...

Chciałbym stworzyć Makro, w pliku ,,A'', który będzie otwierał plik ,,B'' oraz aktywował arkusz w pliku ,,B'' o konkretnej nazwie znajdującej się w pliku ,,A'' w komórce np A1. Czyli kod, który będzie aktywował arkusz w pliku ,,B'' ma się odwoływać do nazwy znajdującej się w pliku ,,A''. Plik B to dane mający arkusze, które posiadają nazwy dni z całego miesiąca 01.02.2020, 02.02.2020. Potrzebuje tylko kodu, który będzie mi aktywował konkretną datę arkusza, którą wpisze w danej komórce w pliku ,,A''.

Worksheets(Format$(Now() - 1, "dd.mm.yyyy")).Activate - ten kod chciałbym zmienić na taki, który mi będzie aktywował arkusz o nazwie, która się znajduję w komórce A1.

Mniej więcej na takiej samej zasadzie jak kod poniżej, który otwiera mi plik o nazwie która się znajduję w komórce W3
PathName = Range("W3").Value
Workbooks.Open Filename:=PathName

1 użytkowników online, w tym zalogowanych: 0, gości: 1