DialogÖffnen - schließen, wenn er sich öffnet
#1
Question 
hi,

die Datei holt sich Daten von einer anderen Datei - hiermit:
Code:
Sub prcHoleDaten() 'funktioniert, die Funktion GetDataClosedWB muß vorhanden sein im Modul
   Dim Pfad            As String
   Dim Dateiname       As String
   Dim Blatt           As String
   Dim Bereich         As String
   Dim Ziel            As Range
   Pfad = ThisWorkbook.Path & "\" 'Pfad wo sich die Datei befindet aus der kopiert werden soll. Also gleiches Verzeichnis wo sich die Hauptdatei befindet.
   Dateiname = Worksheets("Calc3").Range("J111").text 'aus welcher Datei soll er holen?
   Blatt = "Tabelle1"  'von welcher Tabelle soll er holen?
   Bereich = "A6:AE40"   'aus welchem Bereich soll er holen?
   Set Ziel = Worksheets("Tabelle1").Range("A6")  'in welchen Bereich soll er kopieren? Genauer gesagt: Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
   If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
   End If
   End Sub
Diese Funktion muss dazu existieren:
Code:
Public Function GetDataClosedWB(SourcePath As String, _
                                 SourceFile As String, _
                                 sourceSheet As String, _
                                 SourceRange As String, _
                                 TargetRange As Range) As Boolean
'ist die Funktion für prcHoleDaten()
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org

    Dim strQuelle       As String
    Dim Zeilen          As Long
    Dim Spalten         As Byte

    On Error GoTo InvalidInput

    strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & _
                Range(SourceRange).Cells(1, 1).Address(0, 0)

    Zeilen = Range(SourceRange).Rows.Count
    Spalten = Range(SourceRange).Columns.Count

    With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
       .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
       .Value = .Value
    End With

    GetDataClosedWB = True
    Exit Function

InvalidInput:
    MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _
           vbExclamation, "Get data from closed Workbook"
    GetDataClosedWB
= False
End Function


Jetzt kommt es vor, dass die angesprochene Datei, von der die Daten kommen soll, gar nicht vorhanden ist. Dann öffnet Excel immer diesen DialogÖffnen, wo man dann die Datei suchen könnte in dem Datei-Browser. Genau dieser Dialog soll sich aber erst gar nicht öffnen, oder automatisch schließen, wenn die Datei nicht vorhanden ist. Ich habe herausgefunden wie der heisst: Der heisst: Application.Dialogs(xlDialogOpen).Show
Aber wie ich den jetzt automatisch schließen kann - bzw. seine Öffnung unterdrücken kann, weiß ich nicht. Geht das?

lieben Dank

Julia :)
Top
#2
(25.03.2017, 20:52)o0Julia0o schrieb: Ich habe herausgefunden wie der heisst: Der heisst: Application.Dialogs(xlDialogOpen).Show
Aber wie ich den jetzt automatisch schließen kann - bzw. seine Öffnung unterdrücken kann, weiß ich nicht. Geht das?

Witzig. Willst Du jetzt wissen, wie Du diese Zeile entfernen sollst?

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • o0Julia0o
Top
#3
evlt. kann man ja den Status auslesen vom Dialog. Dann könnte man ihn ja schließen mit Application.Dialogs(xlDialogOpen).Show not. So in der Art. War ja nur eine Idee ;)
Top
#4
Hallo Julia,

da hat Uwe eventuell was mißverstanden.

Du kannst mit dem Dir - Befehl prüfen, ob eine Datei vorhanden ist. Wenn nicht, gibst Du eine Meldung aus und verlässt das Sub.

Im Prinzip

If Dir(Pfad & Datei) = "" Then Msgbox "Datei " & Pfad & Datei & " nicht vorhanden": Exit Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • o0Julia0o
Top
#5
Hallo,

einfach mal von euren Versuchen abgeleitet:

Application.Dialogs(xlDialogOpen).Hidden
Vielleicht geht's. Was mit "Show" arbeitet, kennt meistens auch "Hide".

Schönen Sonntag!
[-] Folgende(r) 1 Nutzer sagt Danke an Papppa für diesen Beitrag:
  • o0Julia0o
Top
#6
Hiden gibt es wohl leider nicht(zeigt er ja sonst an wenn man den . dahinter setzt). Aber gute Idee.

Nur für sich genommen funktioniert es, wie schauan es sagt:
Code:
Sub DateiExistiert()
 Dim AktuPfad As String
  AktuPfad = ThisWorkbook.Path
 If Range("Calc3!C106") = 1 Then
    If Dir(AktuPfad & "\" & Range("Calc3!B111")) <> "" Then
       MsgBox "Datei vorhanden"
   Else
       MsgBox "Datei nicht vorhanden"
   End If
 End If
End Sub

Habe es versucht einzubauen. Aber irgendwo hängt es noch:
Code:
Sub prcHoleDaten() 'funktioniert, die Funktion GetDataClosedWB muß vorhanden sein im Modul
   Dim Pfad            As String
   Dim Dateiname       As String
   Dim Blatt           As String
   Dim Bereich         As String
   Dim Ziel            As Range
   Pfad = ThisWorkbook.Path & "\" 'Pfad wo sich die Datei befindet aus der kopiert werden soll. Also gleiches Verzeichnis wo sich die Hauptdatei befindet.
   Dateiname = Worksheets("Calc3").Range("J111").text 'aus welcher Datei soll er holen?
   Blatt = "Tabelle1"  'von welcher Tabelle soll er holen?
   Bereich = "A6:AE40"   'aus welchem Bereich soll er holen?
   Set Ziel = Worksheets("Tabelle1").Range("A6")  'in welchen Bereich soll er kopieren? Genauer gesagt: Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
  If Dir(Pfad & "\" & Range("Calc3!C109")) <> "" Then
  MsgBox "Datei nicht vorhanden"
  Else If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
   End If
  End If
   End Sub
Ich erhalte Syntaxfehler. Und die 4.-letzet Zeile wird markiert. Ohne den Einbau funktioniert der Code ja(die Funktion steht in Post1):
Code:
Sub prcHoleDaten() 'funktioniert, die Funktion GetDataClosedWB muß vorhanden sein im Modul
   Dim Pfad            As String
   Dim Dateiname       As String
   Dim Blatt           As String
   Dim Bereich         As String
   Dim Ziel            As Range
   Pfad = ThisWorkbook.Path & "\" 'Pfad wo sich die Datei befindet aus der kopiert werden soll. Also gleiches Verzeichnis wo sich die Hauptdatei befindet.
   Dateiname = Worksheets("Calc3").Range("J111").text 'aus welcher Datei soll er holen?
   Blatt = "Tabelle1"  'von welcher Tabelle soll er holen?
   Bereich = "A6:AE40"   'aus welchem Bereich soll er holen?
   Set Ziel = Worksheets("Tabelle1").Range("A6")  'in welchen Bereich soll er kopieren? Genauer gesagt: Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
   If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
   End If
   End Sub
Aber zusammen scheinendie beiden Codes nicht arbeiten zu wollen...


Julia :)
Top
#7
Hallo zusammen,

Andre, Du hast es auch nicht richtig verstanden.

Julia trägt in eine Datei per Vba Formeln ein, die Bezüge zu anderen Mappen haben. Das Problem, die Mappen existieren noch nicht.

Deswegen kommt bei jedem Eintrag in jeder Zelle der Dialog zum Datei auswählen. Und das möchte Julia nicht haben. Die Formeln sollen ohne meckern in die Zellen geschrieben werden können.

Das, liebe Julia hatte ich Dir aber schon geschrieben, geht nicht. Um das zu Umgehen, hatte ich Dir geraten eine Dummydatei anzulegen bevor Du die Formeln schreibst.

Der Vorschlag von Pappa geht auf keinen Fall.
Das das nicht geht, kannst Du selber schnell mit der Excel intellisense feststellen

Schreib im VBA Editor:
Application.Dialogs(xlDialogOpen)

Dann setz eine Punkt am Ende, so dass intellisense aufgeht. Da siehst Du, was geht und was nicht geht.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • o0Julia0o
Top
#8
Hallo Atilla,

(26.03.2017, 22:40)atilla schrieb: Schreib im VBA Editor:
Application.Dialogs(xlDialogOpen)

Dann setz eine Punkt am Ende, so dass intellisense aufgeht. Da siehst Du, was geht und was nicht geht.

das hatte Julia schon probiert, wie sie gerade vorher schrieb. Wink

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • o0Julia0o
Top
#9
Hallo Uwe,

danke für den Hinweis.
Julia bringt nicht nur Excel durcheinander sonder auch die Leser, deshalb habe ich den ersten Satz auch gar nicht gelesen.
Eigentlich habe ich alles nicht gelesen.

Ich habe nur gelesen es funktioniert nicht, und dachte, dass sie auf den letzten Beitrag Antwortet.

Was will sie Jetzt mit Andres Vorschlag? Wenn sie es zum Laufen bringt, will sie dann die Formeln nicht reinschreiben, wenn die Datei nicht vorhanden ist?
Sie weiß doch, dass die Datei noch nicht vorhanden ist.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • o0Julia0o
Top
#10
Hallo Julia

Mein Vorschlag:
Zitat:Im Prinzip
If Dir(Pfad & Datei) = "" Then Msgbox "Datei " & Pfad & Datei & " nicht vorhanden": Exit Sub

Du hast den Vorschlag aber nicht richtig umgesetzt Sad

Ich Schrieb
If Dir(Pfad & Datei) ....

und in Deinem Code steht
If Dir(Pfad & "\" & Range("Calc3!C109"))

In Deinem Code steht die Variable Dateiname. Die wird mit dem Inhalt von C111 belegt.
Dateiname = Worksheets("Calc3").Range("J111").text 'aus welcher Datei soll er holen?

Zum einen wäre dann die Prüfung falsch und zum andern, wenn Du meinen Vorschlag nimmst, dann musst Du auch Deine variable einsetzen.

Dann fehlt auch noch das Exit Sub nach der Meldung Sad So erhälst Du nur die Meldung und es geht danach munter weiter.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • o0Julia0o
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste