Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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 :)
Antworten Top
#2
(25.03.2017, 19: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
Antworten 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 ;)
Antworten 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
Antworten 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
Antworten 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 :)
Antworten 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
Antworten Top
#8
Hallo Atilla,

(26.03.2017, 21: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
Antworten 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
Antworten 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
Antworten Top


Gehe zu:


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