2011-08-08 6 views
6

Jak aktywować mój Inny skoroszyt z bieżącego skoroszytu? Mam bieżący skoroszyt z dumb.xls i drugą nazwę skoroszytu jako Tire.xls.I otworzyłem Tire.xls od dumb.xls przy użyciu worksbooks.open filename:= "name of the file". Jest otwieranie, ale problem jest Im w stanie sprawić, aby działało.Jak aktywować określony skoroszyt i konkretny arkusz?

Jeśli powiem, że cells(2,24).value=24 umieszcza te wartości w komórce dumb.xls, ale chcę, aby to zrobić jeden Tire.xls.

activesheet.cells(2,24).value=24 umieszcza je na Tire.xls. Ale w jaki sposób aktywować skoroszyt z nazwą? Muszę otworzyć od 3 do 4 excel ze skoroszytów i wykonać operację? Jak mogę aktywować konkretną skoroszyt

znalazłem ten kod na google

 activeworkbook.worksheet("sheetname").activate ' but not working 
    windows("sheetname").activate ' people on google suggested not to use 

Jego nie coraz aktywowany. Nie wiem, jak to działa. Czy ktoś może mi powiedzieć Jak aktywować określony skoroszyt i konkretny arkusz innego skoroszytu?

Przykład: Mam niko.xls i niko_2.xls otwarte jako skoroszyt ze skoroszytu dumb.xls, więc całkowicie 3 skoroszytami i muszę aktywować 2. arkusz skoroszytu niko_2.xls. Jak mam to zrobić? Czy ktoś może wyjaśnić mi składnię za pomocą tych przykładów? Z góry dziękuję

Odpowiedz

14

Nie trzeba uaktywnić arkusz (weźmiesz ogromny spadek wydajności za to, faktycznie). Ponieważ deklarujesz obiekt dla arkusza, gdy wywołujesz metodę zaczynającą się od "wb". wybierasz ten obiekt. Na przykład możesz wskakiwać między skoroszytami bez aktywowania czegoś podobnego tutaj:

Sub Test() 

Dim wb1 As Excel.Workbook 
Set wb1 = Workbooks.Open("C:\Documents and Settings\xxxx\Desktop\test1.xls") 
Dim wb2 As Excel.Workbook 
Set wb2 = Workbooks.Open("C:\Documents and Settings\xxxx\Desktop\test2.xls") 

wb1.Sheets("Sheet1").Cells(1, 1).Value = 24 
wb2.Sheets("Sheet1").Cells(1, 1).Value = 24 
wb1.Sheets("Sheet1").Cells(2, 1).Value = 54 

End Sub 
+0

Ktoś ma pojęcie, dlaczego powyższy problem spowoduje błąd "Błąd kompilacji - nieprawidłowy znak" podczas kopiowania/wklejania? –

+1

Nie jestem pewien. Używam japońskiej klawiatury, więc kto wie, może backslash lub coś ma inny kod postaci. Spróbuj wkleić do pliku txt, może Excel? Zauważyłem znak "" w Sub Test(), więc usunąłem go na wszelki wypadek. – aevanko

0
Dim Wb As Excel.Workbook 
Set Wb = Workbooks.Open(file_path) 
Wb.Sheets("Sheet1").Cells(2,24).Value = 24 
Wb.Close 

znać nazwy arkuszy odnieść w Wb.Sheets("sheetname") można użyć następujących:

Dim sht as Worksheet  
For Each sht In tempWB.Sheets 
    Debug.Print sht.Name 
Next sht 
+0

Przepraszamy BUt Daj mi znać jak aktywować arkusz?twoje wprowadzanie pewnych wartości w tym, chcę zrobić wszystkie sortowanie i operacje w tym skoroszycie niż zamknąć? Czy muszę zawsze wskazywać Wb.sheets ("sheet1") ...... daj mi znać? – niko

4

Musisz ustawić odwołanie do skoroszytu, który otwierasz. Następnie możesz zrobić cokolwiek z tym skoroszytem, ​​korzystając z jego odnośnika.

Dim wkb As Workbook 
Set wkb = Workbooks.Open("Tire.xls") ' open workbook and set reference! 

wkb.Sheets("Sheet1").Activate 
wkb.Sheets("Sheet1").Cells(2, 1).Value = 123 

można nawet ustawić odwołanie do arkusza, który ułatwi później życie:

Dim wkb As Workbook 
Dim sht As Worksheet 

Set wkb = Workbooks.Open("Tire.xls") 
Set sht = wkb.Sheets("Sheet2") 

sht.Activate 
sht.Cells(2, 1) = 123 

inni zwrócili uwagę, że może być zbyteczne .Activate w Twoim przypadku. Nie musisz aktywować arkusza przed edycją jego komórek. Jeśli jednak chcesz to zrobić, nie zaszkodzi aktywować - z wyjątkiem niewielkiego uderzenia w wydajność, która nie powinna być zauważalna tak długo, jak robisz to tylko raz lub kilka razy. Jeśli jednak aktywujesz wiele razy, np. w pętli spowolni to znacząco, więc należy unikać aktywacji.

+0

Aktywacja, podobnie jak w przypadku wyboru, powoduje ogromne straty w wydajności. Na przykład zapętlić powyższą procedurę 10.000 razy, a po aktywowaniu zajmuje to około 8 sekund. Bez tej jednej linii zajmuje to tylko 0,375 sekundy. Oczywiście wyniki różnią się w zależności od maszyny. – aevanko

+0

Przyznam, że byłem zaskoczony, gdy odkryłem ogromną różnicę w unikaniu wyboru i aktywacji. Oto kilka REF (wzmianki o tym, że aktywacja ma wpływ na wydajność): http://msdn.microsoft.com/en-us/library/ff726673.aspx – aevanko

+0

Taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, gdyby OP nie zapętlał się, nie będą zauważalne. Dodam do tego odpowiedź w mojej odpowiedzi. –

0

Kod, który pracował dla mnie jest:

ThisWorkbook.Sheets("sheetName").Activate 
+0

Próbowałem wszystkich metod wymienionych tutaj do wyboru arkusza roboczego (w rzeczywistości z jednego arkusza roboczego na inny). Otrzymuję jednak "błąd zdefiniowany aplikacji lub obiektu". Arkusz roboczy istnieje (dodałem kod, aby zweryfikować to za pomocą msgbox). Proszę o przypomnienie. – user1175126

0

spróbować tej

Windows("name.xls").Activate 
+1

Powinieneś wyjaśnić, dlaczego twoja odpowiedź jest przydatna ponad 2,5 roku później. Czy sprawdziłeś to w odniesieniu do innej odpowiedzi? – manuell

0

Można spróbować.

Workbooks("Tire.xls").Activate 

ThisWorkbook.Sheets("Sheet1").Select 
Cells(2,24).value=24