Mittels Inputbox mehrere Werte gleichzeitig auswählen/abfragen?

geri3d  08.02.2022, 12:26

Was ist liO?

Wolly25 
Beitragsersteller
 08.02.2022, 12:55

Hier mal die Erklärung, hab das in Foren gefunden.

Dim wsh_Q As Worksheet, liO As ListObject   'das Quellworksheet und ein "Tabellenobjekt"

1 Antwort

Zeichne mal ein Makro auf, wo du auf einem WorkSheet die Autofilter Tabelle an mehreren Stellen auf bestimmte Werte setzt.
dann wirst du feststellen, dass man die Dinge (Criteria) als Array übergeben muss.
Dieses mit deinen Werten aus der InputBox vornehmen.
ABER in der inputbox lässt sich NUR ein String zurückgeben.
Du wirst also dem User vorgeben müssen, WIE die Dinge in die inputBox einzugeben sind. Hier kann so viel Unfug passieren, dass dein Code viel Fehlerbedienung zu machen hat.
Besser wäre es eine UserForm für diesen Zweck zu implementieren.


Wolly25 
Beitragsersteller
 08.02.2022, 16:54

Gut, als Beispiel ein Code den ich nützen könnte wo ich den Spalteninhalt mit einer länge vorgegeben habe (Versuch). Passt aber noch nicht in den vorhandenen Code. Wenn jemand das mit der Spaltenbreite einfügen zeigen könnte würde mir das sehr weiter helfen. Danke

Private Sub CommandButton2_Click()

    Dim appWord As Object, wordDoku As Object, wordbereich As Object, Gruppe As String

        Dim pfad As String

           Dim Bereich As Range

        Dim Jahr  '         Dim datum1 '  As Date

            Jahr = Year(Now)

Set Bereich = ThisWorkbook.Worksheets("AuswWasser").Cells(1, 1).CurrentRegion

    Set appWord = CreateObject("Word.Application")

        appWord.Visible = True

            Set wordDoku = appWord.Documents.Add

                Set wordbereich = wordDoku.Paragraphs.last.Range

Gruppe = Application.InputBox(Title:="Auswahl der betroffenen Wassergruppe", Prompt:="Geben Sie die Nummer der Sportgruppe ein:", _

    Default:="Hier die Nummer eingeben", Type:=1)

        Bereich.AutoFilter Field:=6, Criteria1:=Gruppe

            Bereich.Copy

                With wordDoku

        .Content.Font.Size = 15  'noch leeres Dokument formatieren

        .Content.InsertAfter "Wassergruppe:-- -- Tag:       Uhr       -  -.Hl " & Jahr & vbCrLf & "Listenführer: Frau                     " & vbCrLf

        .Paragraphs(2).Range.Font.Size = 15

    'die kopierte gefilterte Tabelle einfügen

        Set wordbereich = wordDoku.Paragraphs.last.Range

        wordbereich.Paste 'und weiter im Text

 

 

    With liO.Range

      .Columns.Hidden = True                'jetzt werden erst mal alle Spalten ausgeblendet

     '  .Columns(2).Hidden = False    'Nummer           'und hier die Spalten die du brauchst wieder eingeblendet

      .Columns(4).ColumnWidth = 13  '  Hidden = False    'Name

      .Columns(5).ColumnWidth = 10  ' .Hidden = False    'Vorname

      .Columns(13).ColumnWidth = 13  '  .Hidden = False   'gen_bis

     '  .Columns(14).ColumnWidth = 2  '.Hidden = False   'Gruppe

      .Columns(19).ColumnWidth = 34  ' .Hidden = False 'Krankenkasse

      .Columns(21).ColumnWidth = 15  'Bemerkung

     

    End With

End With

wordbereich.Style = "Kein Leerraum"  ' Hiermit die Textformatierung "Kein Leerraum" bestimmen.

wordDoku.PageSetup.Orientation = 0 ' =  Ausgabe des Worddokuments im Querformat

Bereich.AutoFilter

appWord.Application.Activate

    Set appWord = Nothing

    Set Bereich = Nothing

    Set wordbereich = Nothing

    Set wordDoku = Nothing

    '    wsTarget.Select

End Sub
0
IchMalWiederXY  09.02.2022, 12:57
@Wolly25

Alles soll also von Excel nach WORD kopiert werden ?
Dort soll dann die Tabelle perfekt auf's Blatt passen ?
Man kann "FitToPage" automatisieren. Sollte auch im Web ein Code Snip zu finden sein. ABER: Dies macht nicht zwingend die idealen Breiten für die Optik, die du ggf anstrebst. Es hat sich wohl auch der Fokus der Frage geändert ?
Es geht nicht mehr 'nur' um AutoFilter setzen.
==
Wie mache ich dies ?
Ich habe eine "perfekte" Word Vorlage als OLE Objekt im Excel liegen.
Per KnopfDruck werden die Daten im Excel vorbereitet. Dann das WORD template aus dem Excel heraus (OLE Objekt export) in ein Lokales Verzeichnis gespeichert (Meist parallel zum Excel File) dann die Excel Inhalte in das Template an die gewünschten Ecken eingefügt. Zuletzt noch die Datei umbenannt, ggf per eMail versandt, etc, etc.

0
Wolly25 
Beitragsersteller
 10.02.2022, 14:44
@IchMalWiederXY

Danke, ja ich will nach WORD kopieren und das Blatt optimal mit den Spalten aus EXCEL befüllen. Ich hatte 2 Ideen die ich aber gemäß den Hinweisen hier doch nicht verfolgen will. Anstelle dessen will ich die Jahre direkt ansprechen, ohne weitere Varianten also. Dazu füge ich einmal einen Code ein, womit ich versuche dies zu bewerkstelligen. Fehlerhinweis: Autofiltermethode konnte nicht ausgeführt werden. Danke für eure Hilfe, Wolly

Private Sub Jubiläen_Click()  ' Auswahlliste für Jubiläen
'*********
'Abfrage für Jübiläen
'*********
'--------- Variablendeklaration ------------------
Dim wsh_Q As Worksheet, liO As ListObject   'das Quellworksheet und ein "Tabellenobjekt"
Dim obj_Wd As Object, obj_Doc As Object, pfadZurVorlage As String   'Die beiden Word-Objekte und die Pfadvariable
'-------------------------------------------------
pfadZurVorlage = "C:\Users\Besitzer\Desktop\Jubil für Excel.dotx"
' C:\Users\Besitzer\Desktop
' Z:\1##ForenFragen\Excel\zuWord\VorlagenDateiMitBookmark.dotx" 'der Pfad wo du die Vorlage hingelegt hast (anpassen)
'--------- Word-Objekte ins Leben rufen ----------
Set obj_Wd = CreateObject("WORD.Application")   'du kreierst die Word-Applikation
Set obj_Doc = obj_Wd.documents.Add(Template:=pfadZurVorlage)    'Du legst ein neues Word-Dokument aus deiner Vorlage an
obj_Doc.Windows(1).Visible = True   'Das Word-Doc soll sichtbar sein

'--------- Auswahl in Excel ausführen ------------
Set wsh_Q = ThisWorkbook.Worksheets("ArbTab")      'du weist der Variablen das Worksheet zu

Set liO = wsh_Q.ListObjects(1)  'Du weist das "intelligente Tabellenobjekt" seiner Variablen zu
 liO.AutoFilter.ShowAllData      'Erst mal alle Daten anzeigen dass nicht noch ein Filter was verfälscht
        
     '********   Hier wird die Tabelle angesprochen!
     
        ActiveSheet.Range("$A$1:$AH$300").AutoFilter Field:=31, Criteria1:=Array("1", _
        "70", "75", "80", "85", "90", "95", "100"), Operator:=xlFilterValues


    With liO.Range

USW.
0
IchMalWiederXY  11.02.2022, 14:00
@Wolly25

Warum das künstliche ListObjekt ?
Du hast doch alle Daten in Excel.
Also den vorhandenen Autofilter fernsteuern.
Zunächst Filterung aufheben:
Public Function fnDeActivateAutoFilter(ByVal cWB As String, ByVal cSheet As String)

  If Workbooks(cWB).Worksheets(cSheet).AutoFilterMode = True Then

    If Workbooks(cWB).Worksheets(cSheet).FilterMode = True Then

      Workbooks(cWB).Worksheets(cSheet).ShowAllData
Else
'ggf den Autofilter, der noch gar nicht aktiv geschaltet ist, über die gewünschten Spalten aktivieren.

    End If

  End If

End Function

dann die Filterung setzen, analog zu dem virtuellen den du im Code Snip zeigst.
Dann den Gefilterten Bereich per Copy Paste in WORD fallen lassen.

0
Wolly25 
Beitragsersteller
 11.02.2022, 20:30
@IchMalWiederXY

Danke, aber das in meinen vorhandenen Text einzubauen ist mangels Kenntnis meinerseits von mir nicht möglich. Ich vermute das ich deinen Code dem Tabellenblatt zuordnen muss, aber da ist schon so einiges hinterlegt. Nochmals vielen Dank. ich fürchte ich muss meine Idee begraben. Gruß Wolly

0
Wolly25 
Beitragsersteller
 12.02.2022, 10:44
@Wolly25

Hab es zwischenzeitlich hin bekommen:

liO.Range.AutoFilter Field:=31, Criteria1:=Array("70", "75", "80", "85", "90", "95", "100"), Operator:=xlFilterValues

So reicht es für mich vollkommen. Gruß Wolly

1