Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

Implicit ... As Variant

Betrifft: Implicit ... As Variant von: MaddyHa
Geschrieben am: 09.09.2014 11:30:57

Hallo zusammen :)

Ich habe mal wieder ein kleines Problem und hoffe hier ist ein kluger Kopf, der mir helfen kann!

Ich baue derzeit ein kleines Tool (nach) und stecke gerade an einer Stelle fest:

Es geht darum, bei einer bestimmten Auswahl aus der ComboBox und der Listbox eine Datei zu finden und lokal zu speichern (es sind mehrere Dateien in einem Ordner).
Bei meiner Beispieldatei ist "Ordner" mit "Implicit Ordner As Variant" deklariert, bei mir jedoch nur mit "Ordner As Variant". Kann es sein das ich deshalb nicht zu einem Ergebnis komme, es kommt immer die Meldung die Variable sei nicht richtig deklariert.
Falls ja wie wäre es möglich diese Variable "Implicit" zu machen? Finde leider im Internet nicht so richtig was..

Hier ist der Code dazu:

Private Sub CommandButton1_Click()

If ComboBox1.Text = "Gruppe 1" And ListBox1.Text = "ABC" Then
Ordner = Application.GetSaveAsFilename(Format(Date, "yyyy-mm-dd") & "" & ComboBox1.Text & "" &   _
_
ListBox1.Text)

 If Ordner = False Then
 Unload Me
 Else
 
 ' Ordner kopieren
Dim FSO As New FileSystemObject
Dim Folder As Folder
Dim sFolderPath As String
Dim sDestPath As String

 
' Welcher Ordner soll kopiert werden?
sFolderPath = "..."
' Wohin soll der Ordner kopiert werden?
sDestPath = Ordner
' Kopiervorgang starten
Set Folder = FSO.GetFolder(sFolderPath)
Folder.Copy sDestPath

MsgBox "Gewählter Ordner wurde erfolgreich gespeichert."


End If
Unload Me
End If

End Sub
Ich danke jetzt schon für Hilfe und bedanke mich noch bei vorigen Helfern (ich kann irgendwie unter ältere Posts nichts mehr schreiben - vielleicht liest es ja hier jemand) :)

Gruß, Maddy

  

Betrifft: AW: Implicit ... As Variant von: fcs
Geschrieben am: 09.09.2014 14:06:14

Hallo Maddy,

irgendwie ist das Ganze noch sehr konfus.

1. Variablen deklaration.

Der korrkete Variablentyp für Variable Ordner ist hier Variant.
Dim Ordner As Variant

Die Deklarationsanweisung Implicit für Variablen gibt es unter VBA.
Es gibt außerhalb von Prozeduren noch Deklarationen mit Public (Variable ist im gesamten VBA-Projekt verfügbabar) und Private (Variable ist innerhalb eines Moduls verfügbar.

Wo hast du die Variable Ordner denn deklariert?

2. Im SaveAsDialog wählst du einen Dateinamen aus
Im weiteren Code werden dann aber ganze Ordner kopiert.
Dabei ist mir dann der Ordenername "..." als Quellordner sehr suspekt.

Was hast du denn genau vor?
Bitte genaue Schrittbeschreibung!

Gruß
Franz


  

Betrifft: AW: Implicit ... As Variant von: MaddyHa
Geschrieben am: 09.09.2014 14:58:54

Hallo Franz,

vielen Dank für deine Meldung.

ZU: "1. Variablen deklaration.

Der korrkete Variablentyp für Variable Ordner ist hier Variant.
Dim Ordner As Variant"

=> Ist beim kopieren wohl irgendwie untergegangen:

Private Sub CommandButton1_Click()
Dim Ordner As Variant

If ComboBox1.Text = "Gruppe 1" And ListBox1.Text = "ABC" Then


muss es richtig heißen.

Mir ist nur bei der anderen (die ich versuche nachzubasteln) aufgefallen, dass diese es Implicit benutzt haben, ich jedoch nicht weiß wie ich es rein formal einfügen kann.

ZU: 2. Im SaveAsDialog wählst du einen Dateinamen aus
Im weiteren Code werden dann aber ganze Ordner kopiert.
Dabei ist mir dann der Ordenername "..." als Quellordner sehr suspekt.

=> Wo genau meinst du wähle ich nur eine einzelne Datei aus? Hier:

Ordner = Application.GetSaveAsFilename(Format(Date, "yyyy-mm-dd") & "" & ComboBox1.Text & "" &  _
ListBox1.Text)
? Das dient doch nur zur Auswahl des Speichernamens?

Der sFolderPath ... habe ich nur verkürzt aufgeschrieben, da es sich um interne Daten handelt. Habe es der Einfachkeit halber mit "..." abgekürzt. (Pfad wo gewünschter Ordner liegt)


Nochmal zusammenfassend - ich hoffe ich kann es nun besser ausdrücken =)

Es existiert eine UserForm. Diese UserForm hat eine Combobox1, Listbox1 und einen CommandButton1.
Nun habe ich die ComboBox1, bei der ich z.B. "Vogel" auswähle.
Die ListBox1 zeigt mir dann alle Vögel aus einer Liste und ich wähle mir z.B. den Spatz aus.
Nun möchte ich den lokal gelegenen Ordner "Spatz" (der viele einzelne Dateien, auch unterschiedlicher Art, z.B. .doc .pdf etc. hat) mit einem Klick auf den CommandButton1 speichern. Dazu soll sich der Dialog "Speichern unter..." öffnen und mit die einzelnen Dateien aus dem Ordner Spatz. speichern.

Puh ich hoffe das ist nun verständlicher :)

Vielen, vielen Dank für die Hilfe!


  

Betrifft: AW: Implicit ... As Variant von: fcs
Geschrieben am: 09.09.2014 17:20:53

Hallo Maddy,

Das mit der Auswahl des Zielordners über den SaveAs-Dialog funktioniert es nicht 100%ig.

2-stufig funktioniert es glatter
1. Stufe: Auswahl des übergeordneten Zielordners
2. Stufe: bestätigen/anpassen des Ordnernamens in den die Dateien kopiert werden sollen.

Gruß
Franz

'Damit das Makro funktioniert muss im VBA-Editor für die Datei unter Extras--Verweise
'der Verweis auf
        'Windows Script Host Object Model
'aktiviert werden - erforderlich für die Deklaration der Variablen FSO und Folder

Private Sub CommandButton1_Click()
  Dim Ordner As Variant

  If ComboBox1.Text = "Gruppe 1" And ListBox1.Text = "ABC" Then
    'Ordner-Auswahldialog anzeigen
    With Application.FileDialog(msoFileDialogFolderPicker)
      .Title = "Bitte den übergeordneten Zielordner auswählen"
      
      If .Show = -1 Then
        Ordner = .SelectedItems(1)
        'Name Zielordner bestätigen/anpassen
        Ordner = Ordner & Application.PathSeparator _
          & InputBox(Prompt:="Zielordner (ggf. korrigieren)", _
          Title:="Übergeordneter Ziel-Ordner: " & Ordner, _
          Default:=Format(Date, "yyyy-mm-dd") & "" & ComboBox1.Text & "" & ListBox1.Text)
        If Ordner = .SelectedItems(1) Then Ordner = False
      Else
        Ordner = False
      End If
    End With
Weiter:
    If Ordner = False Then
      Unload Me
    Else
    
      ' Ordner kopieren
     Dim FSO As New FileSystemObject
     Dim Folder As Folder
     Dim sFolderPath As String
     Dim sDestPath As String
     
    
     ' Welcher Ordner soll kopiert werden?
     sFolderPath = "..."
     sFolderPath = "D:\Test\Daten\" & ListBox1.Text     'Testzeile
     ' Wohin soll der Ordner kopiert werden?
     sDestPath = Ordner
     ' Kopiervorgang starten
     Set Folder = FSO.GetFolder(sFolderPath)
     
     'Prüfen, ob Zielordner schon vorhanden
     If Dir(Ordner, vbDirectory) = "" Then
        'Ordner anlegen wenn nicht vorhanden
       VBA.MkDir Path:=Ordner
     End If
      
      Folder.Copy Destination:=sDestPath, OverwriteFiles:=True
       
      MsgBox "Gewählter Ordner wurde erfolgreich gespeichert."
     
    End If
    Unload Me
  End If

End Sub



  

Betrifft: AW: Implicit ... As Variant von: MaddyHa
Geschrieben am: 11.09.2014 07:29:19

Hallo Franz,

ich habe deinen Code einmal eingefügt und mit meinen Gegebenheiten versehen:

'Windows Script Host Object Model
=> eingefügt
If ComboBox1.Text = "Gruppe 1" And ListBox1.Text = "ABC" Then
=> Gruppe 1 und ABC angepasst
Ordner = Ordner & Application.PathSeparator _
          & InputBox(Prompt:="Zielordner (ggf. korrigieren)", _
          Title:="Übergeordneter Ziel-Ordner: " & Ordner, _
          Default:=Format(Date, "yyyy-mm-dd") & "" & ComboBox1.Text & "" & ListBox1.Text)
=> "ggf. korrigieren entfernt
 ' Welcher Ordner soll kopiert werden?
     sFolderPath = "..."
=> Lokalen Workspace eingefügt


Leider öffnet sich bei mir nicht der "Speichern unter"-Dialog.

Weißt du vielleicht woran das liegen könnte?
Irgendwas habe ich bestimmt vergessen :/


  

Betrifft: AW: Implicit ... As Variant von: fcs
Geschrieben am: 11.09.2014 11:04:52

Hallo Maddy,

Dies ist/war deine Beschreibung was du vorhast:
Es existiert eine UserForm. Diese UserForm hat eine Combobox1, Listbox1 und einen CommandButton1.
Nun habe ich die ComboBox1, bei der ich z.B. "Vogel" auswähle.
Die ListBox1 zeigt mir dann alle Vögel aus einer Liste und ich wähle mir z.B. den Spatz aus.
Nun möchte ich den lokal gelegenen Ordner "Spatz" (der viele einzelne Dateien, auch unterschiedlicher Art, z.B. .doc .pdf etc. hat) mit einem Klick auf den CommandButton1 speichern. Dazu soll sich der Dialog "Speichern unter..." öffnen und mit die einzelnen Dateien aus dem Ordner Spatz. speichern.

Das hab ich jetzt wie folgt interpretiert:
1. Mit der Auswahl Combobox1 (z.B. Gruppe1) und Listbox1 (z.B. Spatz) wählst du du den Unterordner "Spatz" in einem Verezeichnis "C:\ABC\XYZ", das im Code fest vorgegeben oder irgendwie anders ermittelt wird.

2. Jetzt möchtest du den Ordner "C:\ABC\XYZ\Spatz" inklusive aller darin enthaltenen Dateien woanders speichern (anderes Laufwerk/anderes Verzeichnis???). Aber nicht in einem Ordner Namens "Spatz", sondern in einem Unter-Ordner mit vorgeschlagenem Namen
Format(Date, "yyyy-mm-dd") & "" & ComboBox1.Text & "" & ListBox1.Text
also z.B.: T:\CBA\ZYX\2014-09-11Gruppe1Spatz

Dies leistet das Makro, indem zunächst der übergeordnete Ordner in einem Ordner-Auswahldialog ausgewählt werden kann.
z.B. T:.\CBA\ZYX
Anschließend kann der Name des Unter-Ordners, in den die Dateien aus dem Ordner "Spatz" kopiert werden sollen, in einer Input-Box angepasst werden. Ist der Unter-Ordner noch nicht vorhanden, dann wird er angelegt.

Der SaveAs-Dialog ist hier nicht geeignet, da dieser auf eine einzelne Datei zugeschnitten ist und nicht auf Ordner/Verzeichnisse.

Ansonsten solltest die Beschreibung der umzusetzen Aktionen nochmals genau überdenken, konkreter beschreiben.

Gruß
Franz


  

Betrifft: AW: Implicit ... As Variant von: MaddyHa
Geschrieben am: 11.09.2014 12:38:54

Hallo Franz,

1. Mit der Auswahl Combobox1 (z.B. Gruppe1) und Listbox1 (z.B. Spatz) wählst du du den Unterordner "Spatz" in einem Verezeichnis "C:\ABC\XYZ", das im Code fest vorgegeben oder irgendwie anders ermittelt wird.

= Ja, ich wähle aus Combobox1 Gruppe1 und aus Listbox1 Spatz - der Ordner Spatz liegt als Link (Sharepoint) in einer Tabelle "Untergruppe".

2. Jetzt möchtest du den Ordner "C:\ABC\XYZ\Spatz" inklusive aller darin enthaltenen Dateien woanders speichern (anderes Laufwerk/anderes Verzeichnis???). Aber nicht in einem Ordner Namens "Spatz", sondern in einem Unter-Ordner mit vorgeschlagenem Namen
Format(Date, "yyyy-mm-dd") & "" & ComboBox1.Text & "" & ListBox1.Text
also z.B.: T:\CBA\ZYX\2014-09-11Gruppe1Spatz

= Ich möchte diesen Ordner Spatz lokal speichern und dies mit dem vorgeschlagenen Namen wie du bereits geschrieben hast.

Dies leistet das Makro, indem zunächst der übergeordnete Ordner in einem Ordner-Auswahldialog ausgewählt werden kann.
z.B. T:.\CBA\ZYX
Anschließend kann der Name des Unter-Ordners, in den die Dateien aus dem Ordner "Spatz" kopiert werden sollen, in einer Input-Box angepasst werden. Ist der Unter-Ordner noch nicht vorhanden, dann wird er angelegt.

= Es soll praktisch der Spatz-Ordner genommen und unter eigenem Namen lokal gespeichert werden. Dazu ist doch ein Dialogfeld nötig?!

Der SaveAs-Dialog ist hier nicht geeignet, da dieser auf eine einzelne Datei zugeschnitten ist und nicht auf Ordner/Verzeichnisse.

= Ist es nicht vielleicht möglich, diese Dateien aus dem Ordner auszulesen und praktisch als "Sammelspeicherung" in einem neuen wie oben angegebenen Ordner zu speichern?

Kurze Zusammenfassung:
- Combobox: - Vogel
- ListBox1: Spatz
- CommandButton 1: Speichern unter
- Speichern unter-Fenster öffnen
- Speicherort frei wählen können
- ganzen Ordner Spatz lokal speichern

Vielen Dank für die Mühe, Franz! Ich hoffe ich habs jetzt etwas besser beschrieben.


  

Betrifft: AW: Implicit ... As Variant von: MaddyHa
Geschrieben am: 11.09.2014 12:58:51

Hallo Franz,

1. Mit der Auswahl Combobox1 (z.B. Gruppe1) und Listbox1 (z.B. Spatz) wählst du du den Unterordner "Spatz" in einem Verezeichnis "C:\ABC\XYZ", das im Code fest vorgegeben oder irgendwie anders ermittelt wird.

= Ja, ich wähle aus Combobox1 Gruppe1 und aus Listbox1 Spatz - der Ordner Spatz liegt als Link (Sharepoint) in einer Tabelle "Untergruppe".

2. Jetzt möchtest du den Ordner "C:\ABC\XYZ\Spatz" inklusive aller darin enthaltenen Dateien woanders speichern (anderes Laufwerk/anderes Verzeichnis???). Aber nicht in einem Ordner Namens "Spatz", sondern in einem Unter-Ordner mit vorgeschlagenem Namen
Format(Date, "yyyy-mm-dd") & "" & ComboBox1.Text & "" & ListBox1.Text
also z.B.: T:\CBA\ZYX\2014-09-11Gruppe1Spatz

= Ich möchte diesen Ordner Spatz lokal speichern und dies mit dem vorgeschlagenen Namen wie du bereits geschrieben hast.

Dies leistet das Makro, indem zunächst der übergeordnete Ordner in einem Ordner-Auswahldialog ausgewählt werden kann.
z.B. T:.\CBA\ZYX
Anschließend kann der Name des Unter-Ordners, in den die Dateien aus dem Ordner "Spatz" kopiert werden sollen, in einer Input-Box angepasst werden. Ist der Unter-Ordner noch nicht vorhanden, dann wird er angelegt.

= Es soll praktisch der Spatz-Ordner genommen und unter eigenem Namen lokal gespeichert werden. Dazu ist doch ein Dialogfeld nötig?!

Der SaveAs-Dialog ist hier nicht geeignet, da dieser auf eine einzelne Datei zugeschnitten ist und nicht auf Ordner/Verzeichnisse.

= Ist es nicht vielleicht möglich, diese Dateien aus dem Ordner auszulesen und praktisch als "Sammelspeicherung" in einem neuen wie oben angegebenen Ordner zu speichern?

Kurze Zusammenfassung:
- Combobox: - Vogel
- ListBox1: Spatz
- CommandButton 1: Speichern unter
- Speichern unter-Fenster öffnen
- Speicherort frei wählen können
- ganzen Ordner Spatz lokal speichern

Vielen Dank für die Mühe, Franz! Ich hoffe ich habs jetzt etwas besser beschrieben.


  

Betrifft: AW: Implicit ... As Variant von: fcs
Geschrieben am: 13.09.2014 11:47:24

Hallo Maddy,

der Knackpunkt liegt hier:
... der Ordner Spatz liegt als Link (Sharepoint) in einer Tabelle "Untergruppe"

Das Makro funktioniert mit "normalen" Ordnern/Verzeichnissen.

Ich hab keine Ahnung, wie man via VBA den Zugriff auf Ordner via Links realisieren kann. Und mit dem Umgang von Sharepoints hab ich Null Wissen.

Gruß
Franz


  

Betrifft: AW: Implicit ... As Variant von: MaddyHa
Geschrieben am: 16.09.2014 13:43:55

Vielen Dank trotzdem, tut mir leid, dass ich das so schlecht beschrieben hatte!


 

Beiträge aus den Excel-Beispielen zum Thema "Implicit ... As Variant"