nervi versteht es einfach nicht

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: nervi versteht es einfach nicht
von: Thomas
Geschrieben am: 03.08.2015 20:12:53

Hallo,
ich nerve euch bestimmt langsam, aber ich verstehe es einfach nicht.
Warum geht das nicht. Ich möcht dem macro sagen das intxt im Tabellenblatt Filtereinstellungen steht mit intTxt = Worksheets("Filtereinstellung").Cells(10, 2).Column oder value oder oder keine Ahnung
und dann hier auslesen intArtS = Sheets("Auswertung").Cells.Find(intTxt).Column
aber ich bekomme immer ein denkste von excel. Ohne dem kann ich dies super Macro nicht nutzen oder nur sehr eingeschränkt.
Ich habe bestimmt schon 1000 versuche gestartet nix da. Selbst mit der hilfe von Matthias kriege ich es nicht hin. Aber es muss doch gehen? Habe mir auch schon ein Buch gekauft aber da steht auch nichts.
kann mir dies jemand kurz erklären was ich falsch mache?
liebe grüsse thomas
Kann jemand helfen?
Dim intTxt As String
On Error GoTo ErrExit

intTxt = Worksheets("Filtereinstellung").Cells(10, 2).Column '

intDatS = 10
lngDatR = 10
intArtS = 10



'Txt = Worksheets("Filtereinstellung").Range("B10") ' Cells.Find(Range("B5")).Column
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Sheets("auswertung").Cells.Find("Datum").Row
intDatS = Sheets("auswertung").Cells.Find("Datum").Column
intArtS = Sheets("Auswertung").Cells.Find(intTxt).Column ' alt Cells.Find("Datum).Column
intLetzteS = Sheets("auswertung").Cells(lngDatR, Columns.Count).End(xlToLeft).Column

Sub Tabelle_ordnen_Modul()
Dim lz, lz_einf, lngDatR, intLetzteZauswertung As Long
Dim intDatS, intArtS, intRang As Integer
Dim intSpalte1, intSpalte2 As Integer
Dim intLetzteS, intI, intMaxRang As Integer
Dim intTxt As String
 On Error GoTo ErrExit
 
intTxt = Worksheets("Filtereinstellung").Cells(10, 2).Column
 
 intDatS = 10
 lngDatR = 10
 intArtS = 10
   
 
 
'Txt = Worksheets("Filtereinstellung").Range("B10")    ' Cells.Find(Range("B5")).Column
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Sheets("auswertung").Cells.Find("Datum").Row
intDatS = Sheets("auswertung").Cells.Find("Datum").Column
intArtS = Sheets("Auswertung").Cells.Find(intTxt).Column  ' alt Cells.Find("Datum).Column
intLetzteS = Sheets("auswertung").Cells(lngDatR, Columns.Count).End(xlToLeft).Column
intLetzteZauswertung = Sheets("Filtereinstellungen").Cells(lngDatR, Columns.Count).End(xlToLeft) _
.Row
lz_einf = Sheets("auswertung").Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
intRang = 2
intMaxRang = Application.WorksheetFunction.Max(Sheets("Filtereinstellungen").Range("C1:C9"))
Application.ScreenUpdating = False
For intI = 2 To intLetzteZauswertung
    If Sheets("Filtereinstellungen").Cells(intI, 3).Value = intRang Then
        intSpalte1 = Sheets("Filtereinstellungen").Cells(intI, 2).Value
    End If
Next intI
If intRang <= intMaxRang Then
    For intI = 2 To intLetzteZauswertung
        If Sheets("Filtereinstellungen").Cells(intI, 3).Value = intRang + 1 Then
            intSpalte2 = Sheets("Filtereinstellungen").Cells(intI, 2).Value - 1
        End If
    Next intI
Else: intSpalte2 = intLetzteS
End If
Do While intRang <= intMaxRang
        Sheets("auswertung").Range(Cells(lngDatR, intDatS), Cells(lz, intArtS)).Copy _
        Sheets("auswertung").Range(Cells(lz_einf, intDatS), Cells(lz_einf, intDatS))
        Sheets("auswertung").Range(Cells(lngDatR, intSpalte1), Cells(lz, intSpalte2)).Cut _
        Sheets("auswertung").Range(Cells(lz_einf, intArtS + 1), Cells(lz_einf, intArtS + 1))
        'letzte Zeile neu setzen
        lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
        'Anfangsspalte zum Ausschneiden neu setzen
        intSpalte1 = intSpalte2 + 1
        intRang = intRang + 1
        If intRang < intMaxRang Then
            For intI = 2 To lz
                If Sheets("Filtereinstellungen").Cells(intI, 3).Value = intRang Then
                    intSpalte2 = Sheets("Filtereinstellungen").Cells(intI, 2).Value
                End If
            Next intI
        Else: intSpalte2 = intLetzteS
        End If
Loop
Range(Cells(1, intDatS), Cells(1, intLetzteS)).Columns.EntireColumn.AutoFit
Application.ScreenUpdating = True
ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'daten'" & vbLf & String(60, "_") & vbLf & vbLf &  _
_
        IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & "Fehlernummer:" & vbTab & _
 _
        .Number & vbLf & vbLf & "Beschreibung:" & vbTab & .Description & vbLf, vbExclamation +  _
_
        vbMsgBoxSetForeground, "VBA - Fehler in Prozedur - daten"
      .Clear
    End If
 
  End With
  
  On Error GoTo 0
End Sub

Bild

Betrifft: .Column kein String
von: Frank
Geschrieben am: 03.08.2015 22:36:03
Hallo Thomas,
Dim intTxt As String
intTxt = Worksheets("Filtereinstellung").Cells(10, 2).Column

Die Kombination wird vermutlich nicht funktionieren. Was immer .Column zurück gibt - ein String wird es nicht sein.
Versuch's mal mit intTxt = Worksheets("Filtereinstellung").Cells(10, 2).value, wenn in Zelle B10 Deine Filtereinstellung als Text drinsteht.
Hilfreich ist auch immer, mitzuteilen, welche Fehlermeldung XL Dir an den Kopf wirft, und an welcher Stelle im Programmcode.
Grüsse,
Frank

Bild

Betrifft: AW: .Column kein String
von: Thomas
Geschrieben am: 04.08.2015 05:31:50
Hallo Frank,
super das du dich damit beschäftigst.
Der Versuch geht leider auch nicht.
Der Fehler lautet "Fehler 9 Index ausserhalb des gültigen Bereichs".
liebe Grüsse Thomas.

Bild

Betrifft: AW: .Column kein String
von: hary
Geschrieben am: 04.08.2015 06:48:49
Moin
Bist du den Code schon im Einzelschritt durchgegangen?
Hast du zwei verschiedene Blaetter?

 intDatS = Sheets("auswertung").Cells.Find("Datum").Column
 intArtS = Sheets("Auswertung").Cells.Find(intTxt).Column  ' alt Cells.Find("Datum).Column

Gross und kleingeschrieben: Sheets("auswertung") und Sheets("Auswertung")
Der Fehler koennte sein das der Blattname nicht stimmt. Evtl. Leerzeichen drin.
gruss hary

Bild

Betrifft: AW: .Column kein String
von: Thomas
Geschrieben am: 04.08.2015 07:34:03
Hallo,
auch Dir vielen dank das Du dich mit mein Problem beschäftigst.
Leider finde ich den Fehler nicht. Ich habe ein Beispiel erstellt in demm man den Fehler vielleicht besser finden kann. bitte nicht aufgeben.
vielen viele Dank
liebe grüsse thomas
https://www.herber.de/bbs/user/99303.xlsm

Bild

Betrifft: AW: .Column kein String
von: Matthias L
Geschrieben am: 04.08.2015 08:08:33
Hallo
Ich denke Du konntest es erfolgreich umsetzen?
https://www.herber.de/forum/archiv/1436to1440/t1439756.htm#1439819
und mal ganz nebenbei ...
Was soll denn das hier bitte bewirken?

Sub Ausgangsituation()
'
' Makro3 Makro
'
'

    Sheets("Daten").Select
    Range("A10:T25").Select

    Sheets("auswertung").Select
    Rows("11:58").Select
Du "gehst" in das Blatt "Daten" und markierst den Bereich ("A10:T25")
und unmittelbar danach
"gehst" Du in das Blatt "auswertung" und markierst die Zeilen("11:58")
Warum warst Du dann vorher im Blatt "Daten" und markiert den Bereich ("A10:T25")?
Gruß Matthias

Bild

Betrifft: AW: .Column kein String
von: Thomas
Geschrieben am: 04.08.2015 10:40:27
Hallo Matthias,
ich dachte auch wirklich das ich es mit deinen tipps hinbekomme. Aber es ging dann doch nicht.
das Macro Ausgangsituation() habe ich nur aufgezeichnet das man immer wieder die Ausgangssituation herstellen kann dieses macro ist nicht das Problem. Das Problemkind ist das macro " Sub Tabelle_ordnen_Modul_neu()" hier versuche ich in der Zeile intArtS = Sheets("auswertung").Cells.Find(intTxt).Column das intxt auszulagern. Wenn ich das so intArtS = Sheets("auswertung").Cells.Find("Zielort").Column schreibe geht alles ( siehe macro "Sub Tabelle_ordnen_Modul_alt()". Aber diese Spalte verändert sich ständig deshalb muss ich Sie irgentwie variable hinbekommen. Aus diesem Grund wollte ich Sie ins Blatt filtereinstellungen auslagern und Sie mir dort irgendwie mit mit Formeln suchen. ( ist in diesem Beispiel eingebaut). Es würde auch gehen wenn man dem Macro sagen würde nimm die 1. Spalte links von der gefundenen spalte n test Achtung diese Spalte ist in filtereinstellungen b2 als Rang definiert und auch variabel.
https://www.herber.de/bbs/user/99313.xlsm
vielen vielen dank für eure hilfe.
liebe grüsse thomas


Bild

Betrifft: gelöst vielen dank an alle
von: Thomas
Geschrieben am: 04.08.2015 21:14:17
Hallo,
vielen dank an allen die an diesem Macro mitgearbeitet haben. Ich möchte auch MCO mit erwähnen den er hat das grundmacro geschrieben.
Vielen dank auch an Frank, hary und Matthias L ich habe alle eure Gedanken getestet und am ende war es eine kombination von allen. Allein hätte ich es nie geschafft. Die lösung seht Ihr unten vieleicht könnt ihr dies ja auch mal gebrauchen.
Jetzt geht mein projekt weiter ich bin glücklich.
Dieses Forum ist ein Hammer.
liebe grüsse thomas
Option Explicit

Sub MeineSuche()
Dim intsuS As Long
Dim lz, lz_einf, lngDatR, intLetzteZauswertung As Long
Dim intDatS, intRang, intArtS As Integer
Dim intSpalte1, intSpalte2 As Integer
Dim intLetzteS, intI, intMaxRang As Integer
'On Error GoTo KeinFund
 On Error GoTo ErrExit
 
 'intDatS = 10
 'lngDatR = 10
 'intArtS = 10
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Sheets("auswertung").Cells.Find("Datum").Row
intDatS = Sheets("auswertung").Cells.Find("Datum").Column
'intArtS = Sheets("auswertung").Cells.Find(intsuS).Column
intsuS = Sheets("Auswertung").Cells.Find(Worksheets("Filtereinstellung").Range("c5").Value). _
Column
intLetzteS = Sheets("auswertung").Cells(lngDatR, Columns.Count).End(xlToLeft).Column
intLetzteZauswertung = Sheets("Filtereinstellung").Cells(lngDatR, Columns.Count).End(xlToLeft). _
Row
lz_einf = Sheets("auswertung").Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
intRang = 2
intMaxRang = Application.WorksheetFunction.Max(Sheets("Filtereinstellung").Range("C1:C12"))
Application.ScreenUpdating = False
For intI = 2 To intLetzteZauswertung
    If Sheets("Filtereinstellung").Cells(intI, 3).Value = intRang Then
        intSpalte1 = Sheets("Filtereinstellung").Cells(intI, 2).Value
    End If
Next intI
If intRang <= intMaxRang Then
    For intI = 2 To intLetzteZauswertung
        If Sheets("Filtereinstellung").Cells(intI, 3).Value = intRang + 1 Then
            intSpalte2 = Sheets("Filtereinstellung").Cells(intI, 2).Value - 1
        End If
    Next intI
Else: intSpalte2 = intLetzteS
End If
Do While intRang <= intMaxRang
        Sheets("auswertung").Range(Cells(lngDatR, intDatS), Cells(lz, intsuS)).Copy _
        Sheets("auswertung").Range(Cells(lz_einf, intDatS), Cells(lz_einf, intDatS))
        Sheets("auswertung").Range(Cells(lngDatR, intSpalte1), Cells(lz, intSpalte2)).Cut _
        Sheets("auswertung").Range(Cells(lz_einf, intsuS + 1), Cells(lz_einf, intsuS + 1))
        'letzte Zeile neu setzen
        lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
        'Anfangsspalte zum Ausschneiden neu setzen
        intSpalte1 = intSpalte2 + 1
        intRang = intRang + 1
        If intRang < intMaxRang Then
            For intI = 2 To lz
                If Sheets("Filtereinstellung").Cells(intI, 3).Value = intRang Then
                    intSpalte2 = Sheets("Filtereinstellung").Cells(intI, 2).Value
                End If
            Next intI
        Else: intSpalte2 = intLetzteS
        End If
Loop
Range(Cells(1, intDatS), Cells(1, intLetzteS)).Columns.EntireColumn.AutoFit
Application.ScreenUpdating = True
ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'daten'" & vbLf & String(60, "_") & vbLf & vbLf &  _
_
        IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & "Fehlernummer:" & vbTab & _
 _
        .Number & vbLf & vbLf & "Beschreibung:" & vbTab & .Description & vbLf, vbExclamation +  _
_
        vbMsgBoxSetForeground, "VBA - Fehler in Prozedur - daten"
      .Clear
    End If
 
  End With
  
  On Error GoTo 0
End Sub


 Bild

Beiträge aus den Excel-Beispielen zum Thema "nervi versteht es einfach nicht"