“Çağrılan nesnenin müşterilerinden bağlantısı kesildi.”


1

Giriş isteyen ve yeni bir sekme oluşturan bir düğmem var. İlk çalıştırma harika çalışıyor, ancak sonraki çalıştırmalar bu hatayı veriyor:

görüntü tanımını buraya girin

İşte kod:

Sub btnAddProject()
    Dim template As Worksheet
    Dim newSheet As Worksheet
    Dim newName As String


    newName = Application.InputBox("Enter Project Name")        'get name
    Worksheets("Template").Visible = True                       'Unhide template
    Set template = ActiveWorkbook.Sheets("Template")            'identify template
    template.Copy After:=Sheets(Sheets.Count)                   'create copy
    Set newSheet = ActiveSheet                                  'identify new sheet
    newSheet.Name = newName                                     'rename sheet
    'deleteNames (newSheet.Name)                                'delete copied named ranges with worksheet scope
    newSheet.Range("D2").Value = newName                        'Change header on new sheet
    Worksheets("Template").Visible = False                      'Hide template
    Worksheets("Consolidated Grid").Activate                    'switch back to dashboard
    updateProjectIndex (newName)
End Sub

Hata atılmış newSheet.Name = newNameve bana "Template (2)" adlı bir sayfa bırakıyor.

Buna ne sebep oluyor?

İlgili olması durumunda, updateProjectIndextemelde projeler listesine yeni bir satır ekleyen alt bölümdür (iki yerde):

Sub updateProjectIndex(newName)
    Application.ScreenUpdating = False
    Sheets("Dashboard").Select

    ActiveSheet.Rows(12).Select
    Selection.Copy
    Selection.Insert Shift:=xlDown

    ActiveSheet.Range("B13").Value = newName


    Sheets("Consolidated Grid").Select

    ActiveSheet.Columns("F:F").Select
    Selection.Copy
    Selection.Insert Shift:=xlRight

    ActiveSheet.Range("G1").Value = newName


    Sheets("Dashboard").Select
    ActiveSheet.Range("B13").Select
    Application.ScreenUpdating = True
End Sub

hmmm, bu ilginç. Bir sopayla alay etmeye devam edeceğim, aradığın için teşekkürler.
Scott Beeson

Yanıtlar:


2

Kodunuz ben ek alt çağrıları kaldırmak zorunda olmasına rağmen benim için çalışıyor (yani kaldırıldı updateProjectIndex(newName)VEWorksheets("Consolidated Grid").Activate

Hata ayıklamak için, sorunun bu çalışma kitabıyla mı yoksa Excel ile ilgili bir çalışma kitabı mı olduğunu öğrenmek için bu kodu PC'nizdeki yeni bir Excel'de deneyin.

Sorun bir etkinlikte kodda

Bu 2 kod satırını yorumlamayı deneyin ve sorunun devam edip etmediğini kontrol edin. Sorun yoksa, hatayı görene kadar her defasında bir kişiyi rahatsız edin ve bu şekilde ortadan kaldırın.

Bunu, bir kopyasını kullanarak yapmanı tavsiye ederim, böylece istediğin kadar kesebilirsin!


1

Sanırım çözdüm, neden olduğundan emin değilim. Altımda aşağıdaki kod vardı Workbook_Open:

   Worksheets("Dashboard").Activate
    If InStr(Application.ActiveWorkbook.Path, "sharepoint.com") Then
        Range("1:1").Select
        Selection.EntireRow.Hidden = True

    Else
        Range("1:1").Select
        Selection.EntireRow.Hidden = False
    End If

Amaç, insanların çevrimdışı bir sürüm açtıklarını bilmelerini sağlamaktı. Çatışmanın Worksheets.Activateburada olduğunu sanıyorum. Belki birileri açıklayabilir.

Her iki durumda da, bunu kaldırmak sorunu% 100 düzelttiği görülüyor.

Güncelleme: Tüm kodu değiştirdim fakat .Activatehala çalışıyor. Bir çalışma kitabını kendi Çalışma Kitabından etkinleştirmeyi düşünüyorum. Açık rutin bir çeşit döngüye neden oluyordu?


Sadece .Activatehepsini birlikte kullanmaktan kaçının ..
Raystafarian

Is .selecttercih? Aynı şeyi başarır mı? (yani, "geçiş")
Scott Beeson

Gibi şeylerden kaçındığınızdan emin olun .Select- bu sadece sahnenin arkasındaki diğer her şeyi yaparken elektronik tablo ile dolaşmaya ihtiyaç duyarak kodu yavaşlatır. StackOverflow'ta bunu ele alan iyi bir soru var - stackoverflow.com/questions/10714251/… .
Raystafarian

"Geçiş" yapmanız gerekiyorsa, her nesne için bazı değişkenleri tanımlayın ve sadece onları aktif etmek yerine değişkenleri kullanın. Diğer Range("1:1").entirerow.hidden = false
ifadeniz

1
Kontrol paneline dönmek için evet, bu .activate olurdu
Raystafarian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.