VBA:

2015-03-02 27 views
5

anahtar kelimesi ile koşullu derleme Arabirimin eklenti içerdiği "implements" anahtar sözcüğü ile birlikte derleyici koşul sabitlerini kullanmak mümkün müdür?VBA:

benim çalışma kitabında bir sınıf modülünde aşağıdaki var, en Kitap1 diyelim:

#Const Condition1 = 0 ''will be replaced with 1 when add-in is opened 
#if Condition1 then 
    Implements myAddIn.iInterfaceFoo 
#End if 

ben eklentisini bir referans olarak listelenmiş MyAddin sahip (yani Araçlar -> Referanslar .. .).

Arabirimi, eklenti içindeki diğer sınıflarla başarılı bir şekilde kullanıyorum, ancak şimdi doğrudan çalışma kitabımdaki kitabın arayüzünü aramak istiyorum1. Eklenti açık olduğu sürece, book1 derlediğimde (yani Debug -> Compile VBAProject) başarıyla derlenir. Ancak

, ben eklenti kapalı, ben hatayı

Compile error: User-defined type not defined 

olsun ile book1 derlemeye çalıştığımda Bu benim kaçınmaya çalışıyorum şeydir - eklenti eksik aksi takdirde (örneğin başkasının bilgisayarında) elektronik tablo hala çalışır.

+0

Teşekkür kodu değiştirin, soruyu geliştirmeye çalışmışlardır. Sınıfı başlattım, ancak bu bir derleyici hatası bir çalışma zamanı hatası değil. 'Implements' bağlantısı için teşekkürler, ama nasıl çalıştığını ile oldukça rahatım :) – crunch

+0

Eh, 'Condition1' false olduğunda, kodunuz 'Implements myAddIn.iInterfaceFoo' derlemeyi denememelidir. Eklenti'nin yüklü olup olmadığına bağlı olarak 'Condition1 'öğesini true/false olarak ayarlamakta sorun mu yaşıyorsunuz? Muhtemelen [this] (http://stackoverflow.com/q/15951518/2140173) ve [that] (http://stackoverflow.com/q/19726791/2140173) –

+0

'u görebilirsiniz. Bu sadece budur - derlemeyi dener "Koşullar" satırı, "Koşul 1" Yanlış olsa bile. Bu bağlantılı cevaplara bir göz atacağım. – crunch

cevap

1

Çok fazla bakıyordum ve bu problem için iyi bir çözüm bulamadım.

Yani başka dosyada sorunlu fonksiyon yazdım ve bunu gerekirse ben böyle etkinleştirmek:

sp.mdb üzerinde bir modülde: ana dosya üzerinde

Public Function soap30object() As Object 
Set soap30object = New SoapClient30 
End Function 

:

Public Sub soap30object() 
Dim ob As Object 
Dim appAccess As New Access.Application 
appAccess.OpenCurrentDatabase ("c:\rvc\sp.mdb") 
Set ob = appAccess.Run("soap30object") 
End Sub 

İyi eğlenceler!


Başka bir çözüm geribildirim için ... Runtime üzerinde Modul içinde

 Public Sub replacemodel(mdlname As String, fnd As String, cngto As String) 
     Dim toi As Long, oldlin As String, i As Long, firstchr As String, linnewnum As Long, last_ As Boolean 
     Dim frm As Form,mdl As Module 
     DoCmd.OpenForm mdlname, acDesign 
     Set mdl = Forms(mdlname).Module 
     toi = mdl.CountOfLines 
     With mdl 
      For i = 1 To toi 
       linnewnum = i 
       oldlin = .lines(i, 1) 
       If InStr(oldlin, fnd) <> 0 Then 
        oldlin = Replace(oldlin, fnd, cngto) 
        .ReplaceLine i, oldlin 
        goto nexx 
       End If 
      Next i 
     End With 
nexx: 
     DoCmd.Close acForm, mdlname, acSaveYes 
     Set mdl = Nothing 
     'All variables reset when you edit modul on 
     msgbox "Program will restart now..." 
     DoCmd.Quit acQuitSaveAll 
    end Sub