Microsoft Excel

Herbers Excel/VBA-Archiv

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

Probleme mit Array

Betrifft: Probleme mit Array von: Torsten K.
Geschrieben am: 08.09.2004 19:14:45

Hallo beisammen,

ich möchte in meinen Kostendateien in verschiedenen Worksheets einen Text mit Formatierung hinzufügen. Aus einem anderen Code habe ich die Zeile mit dem Array gefunden und nunmehr auf meine Belange angepaßt.(Hinweis: im WS "FILES" sind die Dateien aufgelistet, die mit dem Code angepaßt werden sollen).

Private Sub CommandButton1_Click()

If MsgBox("Soll der Text jetzt in die Kostendateien eingefügt werden?", vbYesNo) = vbYes Then

Dim i As Integer
Dim i2 As Integer
Dim ws As Integer
Dim Arr As Integer
Dim irow As Integer
Dim wbName As String

On Error GoTo errHandler

Application.ScreenUpdating = False
Application.StatusBar = "Dieser Vorgang dauert ein paar Minuten. Bitte Geduld haben..."
Application.DisplayAlerts = False
Application.EnableEvents = False

For i = 1 To Sheets("FILES").Range("A1").End(xlDown).Row
wbName = Sheets("FILES").Cells(i, 1)
Workbooks.Open wbName, 3

Arr = Array("ET120", "ET140", "ET150", "ET210", "ET220", "ET600", "ETMISC")
For i2 = LBound(Arr, 1) To UBound(Arr, 1)
    Sheets(Arr(i2)).Unprotect password:="maze"
Next i2

For Each ws In Arr
    Worksheets(ws).Activate

With Range("B2")
    .FormulaR1C1 = "'C = Realisierung nicht vor dem 01.10.2005!"
    .Font.ColorIndex = 3
    .Font.Bold = True
    .Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .Orientation = 0
    End With
(...usw...)
End Sub


Leider bleibt Excel an der Stelle
For i2 = LBound(Arr, 1) To UBound(Arr, 1)
mit der Meldung: "Erwartet Datenfeld" hängen. Das Wort "LBound" ist unterlegt.

Ich weiß nicht, warum das mit dem Array in einem anderen Code funktioniert, hier aber nicht.Kann mir jemand weiterhelfen?

Vielen Dank im voraus.

Gruß
Torsten
  


Betrifft: AW: Probleme mit Array von: Nepumuk
Geschrieben am: 08.09.2004 19:27:13

Hallo Torsten,
du hast falsch dimensioniert.
Ändere

Dim Arr As Integer

in

Dim Arr As Variant

Gruß
Nepumuk


  


Betrifft: AW: Probleme mit Array von: Torsten K.
Geschrieben am: 08.09.2004 19:49:01

Hallo Nepumuk,

vielen Dank für Deine Rückmeldung.
Der Hinweis war gut. Allerdings bleibt Excel jetzt hier hängen:

For Each ws In Arr
Worksheets(ws).Activate

(unterlegte Zeile: For Each ws in Arr) und meldet: "Objekt erforderlich".
Kannst Du mir nochmal helfen?

Gruß
Torsten


  


Betrifft: AW: Probleme mit Array von: Nepumuk
Geschrieben am: 08.09.2004 19:54:55

Hallo Thorsten,
ws muss auch als Variant deklariert sein.
Gruß
Nepumuk


  


Betrifft: AW: Probleme mit Array von: Torsten K.
Geschrieben am: 09.09.2004 11:05:19

Hallo Nepumuk,

ich habe nunmehr auch ws als Variant deklariert und nach mehreren Versuchen und Umstellungen komme ich jedoch immer noch nicht weiter:

Private Sub CommandButton1_Click()

If MsgBox("Soll der Text jetzt in die Kostendateien eingefügt werden?", vbYesNo) = vbYes Then

Dim i As Integer
Dim i2 As Integer
Dim ws As Variant
Dim Arr As Variant
Dim irow As Integer
Dim wbName As String

'On Error GoTo errHandler

Application.ScreenUpdating = False
Application.StatusBar = "Dieser Vorgang dauert ein paar Minuten. Bitte Geduld haben..."
Application.DisplayAlerts = False
Application.EnableEvents = False

For i = 1 To Sheets("FILES").Range("A1").End(xlDown).Row
wbName = Sheets("FILES").Cells(i, 1)
Workbooks.Open wbName, 3

Arr = Array("ET120", "ET140", "ET150", "ET210", "ET220", "ET600", "ETMISC")
For i2 = LBound(Arr, 1) To UBound(Arr, 1)
    Sheets(Arr(i2)).Unprotect password:="maze"
For Each ws In Arr
   Worksheets(ws).Activate
With Range("B2")
    .Value = "'C = Realisierung nicht vor dem 01.10.2005!"
    .Font.ColorIndex = 3
    .Font.Bold = True
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
 
End With
Next ws
Next i2

Arr = Array("ET120", "ET140", "ET150", "ET210", "ET220", "ET600", "ETMISC")
For i2 = LBound(Arr, 1) To UBound(Arr, 1)
    Sheets(Arr(i2)).Protect password:="maze"
Next i2

ActiveWorkbook.Save
ActiveWorkbook.Close , True
    
Next i

Application.DisplayAlerts = True
Application.StatusBar = False
Application.EnableEvents = True

MsgBox "Dateien wurden aktualisiert", vbOKOnly

Application.ScreenUpdating = True

Else
End If

Exit Sub

errHandler:
Application.DisplayAlerts = True
Application.StatusBar = False
Application.EnableEvents = True
MsgBox "Beim Update der Datei" & vbCr & wbName & vbCr & _
        "ist ein Fehler aufgetreten!", vbCritical + vbOKOnly, "ABBRUCH!"
'ActiveWorkbook.Close , True

End Sub


Excel trägt den Text("C=Realisierbar nicht vor dem....") in das Workbook, aus dem ich ich heraus das Makro starte und nicht in die einzelnen ws des Array und bleibt hängen bei
.HorizontalAlignment = xlCenter
mit der Meldung: "Die Horizontal-Eigenschaft des Range-Objekts kann nicht festgelegt werden". Was ist denn noch falsch an meinem Code?
Kannst Du da nochmal drüberschauen?
Vielen Dank im voraus.

Gruß
Torsten


  


Betrifft: AW: Probleme mit Array von: Udo
Geschrieben am: 09.09.2004 15:18:04

With Range("B2")
.Value = "'C = Realisierung nicht vor dem 01.10.2005!"
.Font.ColorIndex = 3
.Font.Bold = True
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

End With

Zelle B2 wird nicht selektiert aber als Selection angesprochen!

Udo


  


Betrifft: AW: Probleme mit Array von: Torsten K.
Geschrieben am: 09.09.2004 15:59:10

Hallo Udo,

vielen Dank für Deine Rückmeldung.
Das sehe ich jetzt auch so, aber auch mit

(...)
With Range("B2")
.Value = "'C = Realisierung nicht vor dem 01.10.2005!"
.Font.ColorIndex = 3
.Font.Bold = True
.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
(...)

will's nicht klappen. Außerdem bleibt ja die Frage, warum der Eintrag "C=Realisierung..." in der Datei eingetragen wird, aus der ich heraus das Makro starte und nicht in die einzelnen WS des Arrays.
Hast Du noch weitere Ideen?

Gruß
Torsten


  


Betrifft: AW: Probleme mit Array von: Nepumuk
Geschrieben am: 09.09.2004 21:40:15

Hallo Torsten,
da war viel Unsinn in dem Makro. Ganz optimiert ist es noch nicht, aber dein Chef gibt mir ja auch kein Geld dafür.


Private Sub CommandButton1_Click()
    Dim As Integer
    Dim i2 As Integer
    Dim Arr As Variant
    Dim wbName As String
    If MsgBox("Soll der Text jetzt in die Kostendateien eingefügt werden?", vbYesNo) = vbYes Then
        Arr = Array("ET120", "ET140", "ET150", "ET210", "ET220", "ET600", "ETMISC")
        On Error GoTo errHandler
        With Application
            .ScreenUpdating = False
            .StatusBar = "Dieser Vorgang dauert ein paar Minuten. Bitte Geduld haben..."
            .EnableEvents = False
        End With
        For i = 1 To Sheets("FILES").Range("A1").End(xlDown).Row
            wbName = Sheets("FILES").Cells(i, 1)
            Workbooks.Open wbName, 3
            With ActiveWorkbook
                For i2 = LBound(Arr) To UBound(Arr)
                    With .Worksheets(Arr(i2))
                        .Protect password:="maze", UserInterfaceOnly:=True
                        With .Range("B2")
                            .Value = "'C = Realisierung nicht vor dem 01.10.2005!"
                            .Font.ColorIndex = 3
                            .Font.Bold = True
                            .HorizontalAlignment = xlCenter
                            .VerticalAlignment = xlBottom
                            .Borders(xlEdgeTop).Weight = xlThin
                        End With
                    End With
                Next
                .Close True
            End With
        Next
        With Application
            .StatusBar = False
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        MsgBox "Dateien wurden aktualisiert"
    End If
    Exit Sub
errHandler:
    With Application
        .StatusBar = False
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    MsgBox "Beim Update der Datei" & vbLf & wbName & vbLf & "ist ein Fehler aufgetreten!", 16, "ABBRUCH!"
End Sub


Gruß
Nepumuk


  


Betrifft: AW: erledigt - mT von: Torsten K.
Geschrieben am: 10.09.2004 11:35:02

Hallo Nepumuk,

soso, viel Unsin also! :-(
Na gut, ich hoffe, daß ich nach meiner Budgetphase dazu komme, meinen "Unsinn" mit Deiner Lösung zu vergleichen, damit ich aus meinen Fehlern lernen kann.
Ansonsten läuft Dein Code in meinen Test-Dateien problemlos durch. Heute Abend werde ich meine 30 Realdateien angehen.
In der Zwischenzeit danke ich Dir sehr für Deine Unterstützung.

Viele Grüße
Torsten


  


Betrifft: AW: Probleme mit Array von: Ramses
Geschrieben am: 08.09.2004 19:57:58

Hallo Nepumuk

wäre der ganze Aufbau so nicht sinnvoller ?

For i = 1 To UBound(Arr)
With Worksheets(i)
With Range("B2")
.FormulaR1C1 = "'C = Realisierung nicht vor dem 01.10.2005!"
.Font.ColorIndex = 3
.Font.Bold = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Orientation = 0
End With
End With
Next i

Da flackert nix und die Variablendeklaration könnte man behalten ?

Gruss Rainer


  


Betrifft: AW: Probleme mit Array von: Nepumuk
Geschrieben am: 08.09.2004 20:12:01

Hallo Rainer,

ich habe mir den Code, bis auf die fehlerhaften Zeilen nicht genau angesehen. Aber:
1. For i = 1 To UBound(Arr) 'LBound des von Arr fängt bei 0 an.
2. Du bearbeitest die ersten sechs Tabellen. Das müssen nicht die sein, die Torsten benötigt.
3. .FormulaR1C1 = "'C = Realisierung ... 'sieht nach Makroaufzeichnung aus, besser Value verwenden.

und 4. Zum Beitrag von dir an Andreas:

eieieieieiei!!!

Function Check_Protect(wks As String) As Boolean
If Worksheets(wks).ProtectContents = True Then Check_Protect = True
End Function


Function Check_Protect(wks As String) As Boolean
Check_Protect = Worksheets(wks).ProtectContents
End Function


Gruß
Nepumuk :-)


  


Betrifft: AW: Probleme mit Array von: Ramses
Geschrieben am: 08.09.2004 20:20:53

Hallo Nepumuk

Ich habe mir den Code auch nicht ganz angesehen, bin bloss über das Activate gestolpert :-)

EiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEiEi

Oh Gott, oh Gott,.....

Du hast recht,... Asche über mein Haupt.
Wie hat heute jemand gesagt,... bloss gut, dass einer mit Verstand drüber schaut

Gruss Rainer