unkwownuser
Goto Top

VBA Excel - Rahmen hinzufügen

Hallo liebes Adminstrator.de Forum,

ich habe ein kleines Problemchen mit meinem VBA Script.
Ich möchte gerne noch einen Rahmen in die bestehende Sub einfügen. Jedoch klappt es nicht so richtig.


Hier mal der aktuelle Code:
Sub assignStyle(xE, fromColumnNumber, toColumnNumber)

	xE.Range(fromColumnNumber, toColumnNumber) = value
	xE.Range(fromColumnNumber, toColumnNumber).Font.Name = "Tahoma"  
	xE.Range(fromColumnNumber, toColumnNumber).Font.Size = 12
	xE.Range(fromColumnNumber, toColumnNumber).Font.Italic = True
	xE.Range(fromColumnNumber, toColumnNumber).Font.Bold = True
	xEl.Range(fromColumnNumber, toColumnNumber).Font.Underline = True
		
	With xE.Range("A1")  
		.Borders(xlDiagonalDown).LineStyle = xlNone
		.Borders(xlDiagonalUp).LineStyle = xlNone 
			With .Borders
				.LineStyle = xlContinuous
				.Weight = xlThin
				.ColorIndex = xlAutomatic 
			End With
	End With
End Sub


Gruß,
unkwownuser

Content-Key: 124201

Url: https://administrator.de/contentid/124201

Printed on: April 23, 2024 at 13:04 o'clock

Mitglied: 76109
76109 Sep 04, 2009 at 10:05:58 (UTC)
Goto Top
Hallo unkwownuser!

Versuchs mal mit:
    With .Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With .Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With .Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With .Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

Gruß Dieter
Member: unkwownuser
unkwownuser Sep 04, 2009 at 10:15:40 (UTC)
Goto Top
Hallo didi1954,

erstmal Danke für deinen Vorschlag, jedoch spuckt er mir immer noch Fehler aus.
Das Problem ist halt, dass es unter einer bestehenden Sub ausgeführt werden soll.
Jedoch führt das irgendwie zum Fehler.


Gruß,
unkwownuser
Mitglied: 76109
76109 Sep 04, 2009 at 10:28:41 (UTC)
Goto Top
Hallo unkwownuser!

Der Rahmen sollte funktionieren und der Fehler ist wohl das hier:
xE.Range(fromColumnNumber, toColumnNumber) = value
Was ist value? sehe ich nirgendsface-smile

Gruß Dieter
Member: unkwownuser
unkwownuser Sep 04, 2009 at 10:33:26 (UTC)
Goto Top
Hallo didi1954,

in einer eigenen Sub funktioniert es, aber sobald ich es in eine vorhande Sub reinschreibe, crasht es.

Hier nochmal der aktuelle Code:
	Sub assignStyle(xE, fromColumnNumber, toColumnNumber)
		xE.Range(fromColumnNumber, toColumnNumber).Font.Name = "Tahoma"  
		xE.Range(fromColumnNumber, toColumnNumber).Font.Size = 12
		xE.Range(fromColumnNumber, toColumnNumber).Font.Italic = True
		xE.Range(fromColumnNumber, toColumnNumber).Font.Bold = True
		xE.Range(fromColumnNumber, toColumnNumber).Font.Underline = True

		With xE.Range("A1:F10")  
			With .Borders(xlEdgeLeft)
				.LineStyle = xlContinuous
				.Weight = xlThin
				.ColorIndex = xlAutomatic
			End With
			With .Borders(xlEdgeTop)
				.LineStyle = xlContinuous
				.Weight = xlThin
				.ColorIndex = xlAutomatic
			End With
			With .Borders(xlEdgeBottom)
				.LineStyle = xlContinuous
				.Weight = xlThin
				.ColorIndex = xlAutomatic
			End With
			With .Borders(xlEdgeRight)
				.LineStyle = xlContinuous
				.Weight = xlThin
				.ColorIndex = xlAutomatic
			End With
		End With
		
	End Sub


Gruß,
unkwownuser
Mitglied: 76109
76109 Sep 04, 2009 at 10:55:21 (UTC)
Goto Top
Hallo unkwownuser!

Unklar ist, was Du für Parameter an die Sub übergibst (Call assignStyle(?, ?, ?,...)

Sollte sein:
Call assignStyle( Sheet, Integer, Integer ...)

Die Sub assignStyle(xE, fromColumnNumber, toColumnNumber,...) sollte lauten:
Sub assignStyle(ByRef xE , ByVal fromCol... As Integer, ByVal toCol... As Integer,...)
oder:
Sub assignStyle( ByVal xE As Worksheet , ByVal fromCol... As Integer, ByVal toCol... As Integer,...)

Range ( fromColumn, toColumn) ist ja total falsche Syntax. Hatte ich garnicht drauf geachtetface-smile

Wohl eher:
xE.Range(xE.Cells(fromRow, fromColumn), xE.Cells(toRow, toColumn))
D.h. bei den Parametern fehlen noch die Zeilen?

Gruß Dieter
Member: unkwownuser
unkwownuser Sep 04, 2009 at 12:06:33 (UTC)
Goto Top
Hallo didi1954,

die Antwort kommt ein bisschen spät, war gerade zu Tisch.
Jetzt hast du mich ein wenig überfordert mit so vielen Parametern face-smile
Was ich noch vergessen hatte zu sagen, es handelt sich hierbei um eine exteren *.vbs-Datei.
Eventuell hat das auch damit was zu tuen.


Gruß,
unkwownuser
Member: bastla
bastla Sep 04, 2009 at 13:13:02 (UTC)
Goto Top
Hallo unknownuser und didi1954!

Nur als Anmerkung: VBS kennt natürlich keine Excel-Konstanten, daher entweder diese am Beginn des Scripts festlegen, etwa:
Const xlEdgeLeft = 7
oder (q & d) den Wert (7) direkt verwenden.

Zu finden sind die entsprechenden Werte durch Ausgabe in VBA, also etwa
MsgBox xlEdgeLeft & "_" & xlEdgeTop & "_" & xlEdgeRight & "_" & xlEdgeBottom
Grüße
bastla
Mitglied: 76109
76109 Sep 04, 2009 at 13:35:31 (UTC)
Goto Top
Hallo unkwownuser und bastla!

In Deinem Beitrag steht VBA-Excel und VBA-Script. Das es ein VB-Script (*.vbs) ist, ist so nicht zu erkennen. Aber egal, die Argumente, die Du an die Routine übergibst sind mir immer noch unbekannt? Und wie bastla schreibt, sind in VBS die Border-Konstanten unbekannt.

Wenn Deine Argumente nur aus vonSpalte und bisSpalte besteht, fehlen die Zeilenangaben? Oder sind es z.B. vonRange("A1") und bisRange("XY"). Habe leider keine Zauberkugelface-smile

Gruß Dieter
Mitglied: 76109
76109 Sep 04, 2009 at 17:14:38 (UTC)
Goto Top
Hallo unkwownuser!

In VBS würde z.B. das (etwas optimiert) funktionieren:
Const xlContinuous = 1
Const xlThin = 2
Const xlAutomatic = &HFFFFEFF7

Const xlEdgeLeft = 7
Const xlEdgeTop = 8
Const xlEdgeBottom = 9
Const xlEdgeRight = 10

Set objExcel = CreateObject("Excel.Application")  

objExcel.Workbooks.Add:  objExcel.Visible = True

Call AssignStyle(objExcel.ActiveWorkbook.ActiveSheet, "B2", "F10")  

Sub AssignStyle(ByRef Wks, ByRef FromRange, ByRef ToRange)
    With Wks.Range(Wks.Range(FromRange), Wks.Range(ToRange)).Font
        .Name = "Tahoma"  
        .Size = 12
        .Italic = True
        .Bold = True
        .Underline = True
    End With
    
    For i = xlEdgeLeft To xlEdgeRight
        With Wks.Range(Wks.Range(FromRange), Wks.Range(ToRange)).Borders(i)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
    Next
End Sub

Gruß Dieter
Member: unkwownuser
unkwownuser Sep 08, 2009 at 08:07:47 (UTC)
Goto Top
Hallo didi1954,

das sieht super aus und entspricht genau meinen Vorstellungen.
Jetzt habe ich noch eine Frage dazu.
Kann man z.B. in einer Sub "defineStyle" den Style festlegen und dann in einer neuen Sub "assignStyle" den Style zuweisen?
Also sprich, man legt in der ersten Sub einen Style für die ganze Arbeitsmappe an und in der zweiten Sub wählt man die gewünschten Felder an.


Gruß,
unkwownuser