2016-03-22 29 views
1

kullanarak gerçekleştiremedi. Bir komut dosyası çalıştırma işlemi sırasında, makroyu içeren Çalışma Kitabından el ile odağı manuel olarak kaldırırsam hata iletilir. Hiçbir şey üzerine tıklamazsam, sorunsuz çalışır. Komut dosyası hataları, yalnızca "Giriş" sayfasından seçim geri A1'a yerleştirmeye çalışırken hata veriyor. Kırılma noktası aşağıdaki satırda:Çalışma Zamanı Hatası '1004': Bu sınıfın yöntemini, ThisWorkbook

ThisWorkbook.Sheets("Input").Range("A1").Select 

ben hata ayıklama ve yeri geri senaryo sorunu olmadan tamamlar makro çalışma sayfası odaklanırsanız. Önceki satır: Ben kapsam dışında düşüyor ancak önceki kapsam gösterimler tarafından tanımlanmalıdır olarak oldukça neden anlamıyorum yelpazesini tahmin ediyorum bu yüzden hatasız

ThisWorkbook.Sheets("Input").Cells.Delete 

çalışır. Birisi neden çizginin kapsam dışı kaldığını açıklayabilir mi? ThisWorkbook, kodumun referans aldığı Çalışma Kitabını oldukça açık bir şekilde tanımlamamalı mı? Herhangi bir rehberlik büyük beğeni topluyor.

+0

İlginç. Bana bir iyilik yapar mısın? 'ThisWorkbook.Sheets (Girdi) 'yi değiştirin. Aralık (" A1 ").' ShtInputSheetCodeName.Range ("A1") ile seçin.' Öğesini seçin ve tekrar deneyin. Tabii ki CodeName'i gerçek olana çevirmelisin? ThisWorkbook.Sheets ("Girdi") CodeName 'Başka bir şey 'önce sayfayı etkinleştir' için 'olur. Yani, 'ThisWorkbook.Sheets ("Input") yerleştirmeyi deneyin. – Ralph

+0

Ayrıca bkz. [Excel VBA makrolarında seçme nasıl kullanılır] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) –

+0

CodeName kullanarak aynı sorun . Başka bir açık çalışma kitabındaki tek sayfayla aynı olan genel "Sheet1" CodeName değerine sahip olduğunu unutmayın. Başka herhangi bir fikir memnuniyetle karşılanacaktır. – nbayly

cevap

3

ThisWorkbook referansıyla hiçbir ilgisi yoktur. Etkin olmayan bir nesnede bir Aralık Seçemezsiniz. Çalışma Sayfaları ile

Private Sub OneOhOhFour() 

    'Executing with Book1.xlsm active and Book2.xlsx open. 
    Dim wb As Workbook 
    Set wb = Application.Workbooks("Book2.xlsx") 
    Debug.Print ThisWorkbook.Name 
    'Outputs 'Book1.xlsm' to Immediate window. 
    wb.Sheets("Sheet1").Range("A1").Select 'Error 1004 

End Sub 

aynı şeyi:

Private Sub OneOhOhFourVTwo() 
    'Starting on anywhere but Sheet2 gives an error. 
    Dim ws As Worksheet 
    Set ws = ThisWorkbook.Worksheets("Sheet2") 
    ws.Range("A1").Select 'Error 1004. 
End Sub 

basit çözümü içindeki seç önce nesneyi etkinleştirme şudur: Aynı hatayı sergileyen bu kodu düşünün

Private Sub NoOneOhOhFour() 

    Dim wb As Workbook 
    Set wb = Application.Workbooks("Book2.xlsx") 
    wb.Activate 
    wb.Sheets("Sheet1").Range("A1").Select 'No error. 

End Sub 

Daha da iyisi, referansları kullanmak ve Seçim ve Aktif * nesnelerini tamamen kullanmaktan kaçınmaya çalışmaktır.

+0

Sorunuma mükemmel bir açıklama ve çözünürlük. Yukardaki yorumda da belirttiğim gibi '.Select 'ile herhangi bir veri manipülasyonu yapmıyorum ama sadece çalışma sayfasını en sağdaki hücreye odaklanarak başlangıç ​​durumuna getiriyorum. Saygılarımızla ve teşekkür ederim. – nbayly

+1

Çalışma sayfası gizlendiyse, bir hata almadığınızdan emin olmak için bir satır daha eklemenizi öneririm. wb.Visible = xlSheetVisible' satırından önce wb.Sheets ("Sheet1"). Range ("A1"). ' –

+0

@SiddharthRout tüm olası durumlar hakkında düşüncenizi seviyorum. Kullanıcıların senaryonu tetiklemek için sayfayı aktive etmesi gerektiğinden, bunun operasyonel olarak çalışacağımız bir durum olacağını düşünmüyorum. Bu fikir için teşekkürler :) – nbayly

İlgili konular