<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Clever-Excel-Forum - Workshops und Anleitungen]]></title>
		<link>https://www.clever-excel-forum.de/</link>
		<description><![CDATA[Clever-Excel-Forum - https://www.clever-excel-forum.de]]></description>
		<pubDate>Mon, 04 May 2026 14:33:45 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Userform transparent machen und Kopf und Rahmen entfernen]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Userform-transparent-machen-und-Kopf-und-Rahmen-entfernen</link>
			<pubDate>Wed, 18 Feb 2026 09:47:24 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=18350">volti</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Userform-transparent-machen-und-Kopf-und-Rahmen-entfernen</guid>
			<description><![CDATA[Hallo Forum,<br /><br />kann man eine Userform auch transparent machen?<br /><br />Ja, das kann man ganz einfach bewerkstelligen.<br />Indem man den Style der Userform auf WS_EX_LAYERED stellt und eine Farbe zuweist, deren Pixel dann transparent dargestellt werden.<br /><br />Hier mal ein ganz einfacher, stark reduzierter Code als Beispiel.<br />Bitte beachten, dass der Hintergrund der Userform mit einer Farbe aus der Palette versehen wird und keine Systemfarbe verwendet wird.<br /><br /><!--- erstellt am 18.02.2026 10:31:44 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 900px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA103144' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetActiveWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>#If</font> <font color=blue><b>Win64</b></font> <font color=blue>Then</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>SetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>GetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>#Else</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; (<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>#End If</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetLayeredWindowAttributes</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> crKey <font color=blue>As Long</font>, <font color=blue>ByVal</font> bAlpha <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dwFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><br><strong><font color=blue>Private Sub</font> UserForm_Activate()</strong><br><font color=#00a000>' GWL_EXSTYLE = (-20&), WS_EX_LAYERED = &H80000, LWA_COLORKEY&nbsp;&nbsp;= &H1</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowLongA</font> <font color=#d000d0>GetActiveWindow</font>, <font color=#ff6060>-20</font>, _<br>&nbsp;&nbsp;<font color=#d000d0>GetWindowLongA</font>(<font color=#d000d0>GetActiveWindow</font>, <font color=#ff6060>-20</font>) <font color=blue>Or</font> <font color=#ff6060>&H80000</font><br>&nbsp;&nbsp;<font color=#d000d0>SetLayeredWindowAttributes</font> <font color=#d000d0>GetActiveWindow</font>, BackColor, <font color=#ff6060>0</font>, <font color=#ff6060>1</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br />Wer zusätzlich noch den Kopf und den Rahmen entfernen möchte, muss noch etwas mehr Aufwand betreiben.<br />Hier ein Beispiel, bei dem nur noch ein Textfeld und eine Schaltfläche sichtbar sind.<br />Die Userform wird zusätzlich noch an die gerade aktive Excelzelle platziert. So könnte man alle möglichen Spezialanwendungen programmieren.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=57240" target="_blank" title="18.02.2026, 11:45">Userform_TransparenteUserform.xlsb</a> (Größe: 52,4 KB / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br /><br /><!--- erstellt am 18.02.2026 10:40:43 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 940px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus104043' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA104043' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetActiveWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>#If</font> <font color=blue><b>Win64</b></font> <font color=blue>Then</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>SetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>GetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>#Else</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; (<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>#End If</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowPos</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hWndInsertAfter <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> x <font color=blue>As Long</font>, <font color=blue>ByVal</font> y <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> cx <font color=blue>As Long</font>, <font color=blue>ByVal</font> cy <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetLayeredWindowAttributes</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> crKey <font color=blue>As Long</font>, <font color=blue>ByVal</font> bAlpha <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dwFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowRgn</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hRgn <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> bRedraw <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateRoundRectRgn</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> X1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> Y1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> X2 <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> Y2 <font color=blue>As Long</font>, <font color=blue>ByVal</font> X3 <font color=blue>As Long</font>, <font color=blue>ByVal</font> Y3 <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DrawMenuBar</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; (<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateRectRgnIndirect</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; (lpRect <font color=blue>As RECT</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DeleteObject</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; (<font color=blue>ByVal</font> hObject <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowRect</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, lpRect <font color=blue>As RECT</font>) <font color=blue>As Long</font><br><font color=blue>Private Type RECT</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Left&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Top&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Right&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Bottom <font color=blue>As Long</font><br><font color=blue>End Type</font><br><br><br><strong><font color=blue>Private Sub</font> UserForm_Activate()</strong><br>&nbsp;&nbsp;<font color=blue>Dim</font> R <font color=blue>As RECT</font>, oCell <font color=blue>As</font> Range<br>&nbsp;&nbsp;<font color=blue>Dim</font> hRegion <font color=blue>As LongPtr</font>, hWndUF <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>GWL_EXSTYLE</font>&nbsp;&nbsp; <font color=blue>As Long</font> = (-20&)<br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>GWL_STYLE</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = (<font color=#ff6060>-16</font>)<br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>WS_EX_LAYERED</font> <font color=blue>As Long</font> = <font color=#ff6060>&H80000</font><br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>LWA_COLORKEY</font>&nbsp;&nbsp;<font color=blue>As Long</font> = <font color=#ff6060>&H1</font><br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>WS_CAPTION</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font> = <font color=#ff6060>&HC00000</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;hWndUF = <font color=#d000d0>GetActiveWindow</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Userform: Handle holen</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowLongA</font> hWndUF, <font color=#d000d0>GWL_STYLE</font>, <font color=#d000d0>GetWindowLongA</font>(hWndUF, <font color=#d000d0>GWL_STYLE</font>) <font color=blue>And Not</font> <font color=#d000d0>WS_CAPTION</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowLongA</font> hWndUF, <font color=#d000d0>GWL_EXSTYLE</font>, <font color=#d000d0>GetWindowLongA</font>(hWndUF, <font color=#d000d0>GWL_EXSTYLE</font>) <font color=blue>Or</font> <font color=#d000d0>WS_EX_LAYERED</font><br>&nbsp;&nbsp;<font color=#d000d0>SetLayeredWindowAttributes</font> hWndUF, Me.BackColor, <font color=#ff6060>0&</font>, <font color=#d000d0>LWA_COLORKEY</font><br>&nbsp;&nbsp;<font color=#d000d0>DrawMenuBar</font> hWndUF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Userform neu zeichnen</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<font color=#d000d0>GetWindowRect</font> hWndUF, R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Userform: Koordinaten holen</font><br>&nbsp;&nbsp;R.Bottom = R.Bottom - R.Top - <font color=#ff6060>8</font>:&nbsp;&nbsp;R.Top = <font color=#ff6060>4</font>&nbsp;&nbsp;<font color=#00a000>&nbsp;' Bereich zurecht</font><br>&nbsp;&nbsp;R.Right = R.Right - R.Left - <font color=#ff6060>8</font>:&nbsp;&nbsp; R.Left = <font color=#ff6060>4</font> <font color=#00a000>&nbsp;' schneiden</font><br>&nbsp;&nbsp;hRegion = <font color=#d000d0>CreateRectRgnIndirect</font>(R)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Eine Region erstellen</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowRgn</font> hWndUF, hRegion, <font color=#ff6060>1&</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Region scharf schalten</font><br>&nbsp;&nbsp;<font color=#d000d0>DeleteObject</font> hRegion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Region l&ouml;schen</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<font color=blue>Set</font> oCell = ActiveCell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Bindezelle setzen</font><br>&nbsp;&nbsp;<font color=blue>With</font> ActiveWindow.ActivePane<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#d000d0>SetWindowPos</font> hWndUF, <font color=#ff6060>0&</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.PointsToScreenPixelsX(oCell.Left - <font color=#ff6060>3</font>), _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.PointsToScreenPixelsY(oCell.Top - <font color=#ff6060>3</font>), _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>&H1</font><font color=#00a000>&nbsp;' &H1 = SWP_NOSIZE</font><br>&nbsp;&nbsp;<font color=blue>End With</font><br><br>&nbsp;&nbsp;Me.TextBox1.Value = ActiveCell.Value<br><strong><font color=blue>End Sub</font></strong></div></div><div style='line-height: 5px;'><br></div></div></div><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div>]]></description>
			<content:encoded><![CDATA[Hallo Forum,<br /><br />kann man eine Userform auch transparent machen?<br /><br />Ja, das kann man ganz einfach bewerkstelligen.<br />Indem man den Style der Userform auf WS_EX_LAYERED stellt und eine Farbe zuweist, deren Pixel dann transparent dargestellt werden.<br /><br />Hier mal ein ganz einfacher, stark reduzierter Code als Beispiel.<br />Bitte beachten, dass der Hintergrund der Userform mit einer Farbe aus der Palette versehen wird und keine Systemfarbe verwendet wird.<br /><br /><!--- erstellt am 18.02.2026 10:31:44 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 900px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA103144' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetActiveWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>#If</font> <font color=blue><b>Win64</b></font> <font color=blue>Then</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>SetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>GetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>#Else</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; (<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>#End If</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetLayeredWindowAttributes</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> crKey <font color=blue>As Long</font>, <font color=blue>ByVal</font> bAlpha <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dwFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><br><strong><font color=blue>Private Sub</font> UserForm_Activate()</strong><br><font color=#00a000>' GWL_EXSTYLE = (-20&), WS_EX_LAYERED = &H80000, LWA_COLORKEY&nbsp;&nbsp;= &H1</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowLongA</font> <font color=#d000d0>GetActiveWindow</font>, <font color=#ff6060>-20</font>, _<br>&nbsp;&nbsp;<font color=#d000d0>GetWindowLongA</font>(<font color=#d000d0>GetActiveWindow</font>, <font color=#ff6060>-20</font>) <font color=blue>Or</font> <font color=#ff6060>&H80000</font><br>&nbsp;&nbsp;<font color=#d000d0>SetLayeredWindowAttributes</font> <font color=#d000d0>GetActiveWindow</font>, BackColor, <font color=#ff6060>0</font>, <font color=#ff6060>1</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br />Wer zusätzlich noch den Kopf und den Rahmen entfernen möchte, muss noch etwas mehr Aufwand betreiben.<br />Hier ein Beispiel, bei dem nur noch ein Textfeld und eine Schaltfläche sichtbar sind.<br />Die Userform wird zusätzlich noch an die gerade aktive Excelzelle platziert. So könnte man alle möglichen Spezialanwendungen programmieren.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=57240" target="_blank" title="18.02.2026, 11:45">Userform_TransparenteUserform.xlsb</a> (Größe: 52,4 KB / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br /><br /><!--- erstellt am 18.02.2026 10:40:43 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 940px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus104043' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA104043' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetActiveWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>#If</font> <font color=blue><b>Win64</b></font> <font color=blue>Then</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>SetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>GetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>#Else</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; (<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>#End If</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowPos</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hWndInsertAfter <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> x <font color=blue>As Long</font>, <font color=blue>ByVal</font> y <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> cx <font color=blue>As Long</font>, <font color=blue>ByVal</font> cy <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetLayeredWindowAttributes</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> crKey <font color=blue>As Long</font>, <font color=blue>ByVal</font> bAlpha <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dwFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowRgn</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hRgn <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> bRedraw <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateRoundRectRgn</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> X1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> Y1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> X2 <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> Y2 <font color=blue>As Long</font>, <font color=blue>ByVal</font> X3 <font color=blue>As Long</font>, <font color=blue>ByVal</font> Y3 <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DrawMenuBar</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; (<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateRectRgnIndirect</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; (lpRect <font color=blue>As RECT</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DeleteObject</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; (<font color=blue>ByVal</font> hObject <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowRect</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, lpRect <font color=blue>As RECT</font>) <font color=blue>As Long</font><br><font color=blue>Private Type RECT</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Left&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Top&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Right&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Bottom <font color=blue>As Long</font><br><font color=blue>End Type</font><br><br><br><strong><font color=blue>Private Sub</font> UserForm_Activate()</strong><br>&nbsp;&nbsp;<font color=blue>Dim</font> R <font color=blue>As RECT</font>, oCell <font color=blue>As</font> Range<br>&nbsp;&nbsp;<font color=blue>Dim</font> hRegion <font color=blue>As LongPtr</font>, hWndUF <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>GWL_EXSTYLE</font>&nbsp;&nbsp; <font color=blue>As Long</font> = (-20&)<br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>GWL_STYLE</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = (<font color=#ff6060>-16</font>)<br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>WS_EX_LAYERED</font> <font color=blue>As Long</font> = <font color=#ff6060>&H80000</font><br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>LWA_COLORKEY</font>&nbsp;&nbsp;<font color=blue>As Long</font> = <font color=#ff6060>&H1</font><br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>WS_CAPTION</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font> = <font color=#ff6060>&HC00000</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;hWndUF = <font color=#d000d0>GetActiveWindow</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Userform: Handle holen</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowLongA</font> hWndUF, <font color=#d000d0>GWL_STYLE</font>, <font color=#d000d0>GetWindowLongA</font>(hWndUF, <font color=#d000d0>GWL_STYLE</font>) <font color=blue>And Not</font> <font color=#d000d0>WS_CAPTION</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowLongA</font> hWndUF, <font color=#d000d0>GWL_EXSTYLE</font>, <font color=#d000d0>GetWindowLongA</font>(hWndUF, <font color=#d000d0>GWL_EXSTYLE</font>) <font color=blue>Or</font> <font color=#d000d0>WS_EX_LAYERED</font><br>&nbsp;&nbsp;<font color=#d000d0>SetLayeredWindowAttributes</font> hWndUF, Me.BackColor, <font color=#ff6060>0&</font>, <font color=#d000d0>LWA_COLORKEY</font><br>&nbsp;&nbsp;<font color=#d000d0>DrawMenuBar</font> hWndUF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Userform neu zeichnen</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<font color=#d000d0>GetWindowRect</font> hWndUF, R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Userform: Koordinaten holen</font><br>&nbsp;&nbsp;R.Bottom = R.Bottom - R.Top - <font color=#ff6060>8</font>:&nbsp;&nbsp;R.Top = <font color=#ff6060>4</font>&nbsp;&nbsp;<font color=#00a000>&nbsp;' Bereich zurecht</font><br>&nbsp;&nbsp;R.Right = R.Right - R.Left - <font color=#ff6060>8</font>:&nbsp;&nbsp; R.Left = <font color=#ff6060>4</font> <font color=#00a000>&nbsp;' schneiden</font><br>&nbsp;&nbsp;hRegion = <font color=#d000d0>CreateRectRgnIndirect</font>(R)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Eine Region erstellen</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowRgn</font> hWndUF, hRegion, <font color=#ff6060>1&</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Region scharf schalten</font><br>&nbsp;&nbsp;<font color=#d000d0>DeleteObject</font> hRegion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Region l&ouml;schen</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<font color=blue>Set</font> oCell = ActiveCell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Bindezelle setzen</font><br>&nbsp;&nbsp;<font color=blue>With</font> ActiveWindow.ActivePane<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#d000d0>SetWindowPos</font> hWndUF, <font color=#ff6060>0&</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.PointsToScreenPixelsX(oCell.Left - <font color=#ff6060>3</font>), _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.PointsToScreenPixelsY(oCell.Top - <font color=#ff6060>3</font>), _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>&H1</font><font color=#00a000>&nbsp;' &H1 = SWP_NOSIZE</font><br>&nbsp;&nbsp;<font color=blue>End With</font><br><br>&nbsp;&nbsp;Me.TextBox1.Value = ActiveCell.Value<br><strong><font color=blue>End Sub</font></strong></div></div><div style='line-height: 5px;'><br></div></div></div><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Daten anonymisieren]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Daten-anonymisieren</link>
			<pubDate>Fri, 15 Aug 2025 13:39:49 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=1">schauan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Daten-anonymisieren</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">[Daten anonymisieren Teil 1]</span><br /><br />Hallöchen zusammen,<br /><br />zur besseren Veranschaulichung von Problemen und gewünschten Lösungen ist oftmals eine Bereitstellung von Daten hilfreich oder erforderlich. Die Helfer können so, ohne die Dateien nachzubauen, mit der Lösungsfindung beginnen, eventuelle Lösungsansätze mit den bereitgestellten Daten testen und den gewünschten Lösungen vergleichen.<br /><br />Der Datenschutz gebietet, dass das natürlich nicht mit Originaldaten, insbesondere Firmen - und Mitarbeiterdaten, geschieht. Bereitgestellte Dateien sollten daher immer entsprechend anonymisierte Daten enthalten. Daten werden dabei willkürlich ersetzt, sodass im Gegensatz zu einer Verschlüsselung eine Entschlüsselung nicht möglich sein sollte.<br /><br />Die Ersetzung sollte natürlich so erfolgen, dass keine Rückschlüsse auf die Originaldaten möglich sind. Einfach nur Buchstaben durcheinander zu bringen reicht da z.B. nicht. hzine lässt sicher den Namen Heinz vermuten ...<br /><br />Die Anonymisierung kann man manuell durchführen oder auch makrogestützt. Hier in diesem ersten Teil stelle ich kurz eine Formellösung anhand Vor- und Nachnamen in 5 Schritten vor.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='15' style='font-family:Aptos Narrow; color:#000000; border-collapse:collapse; background-color:#FFFFFF; font-size:16px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='19,5pt'><col width='19,5pt'><col width='19,5pt'><col width='19,5pt'><col width='60pt'><col width='60pt'><col width='19,5pt'><col width='60pt'><col width='60pt'><col width='19,5pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#cacaca'><td></td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td><td align='middle'>F</td><td align='middle'>G</td><td align='middle'>H</td><td align='middle'>I</td><td align='middle'>J</td><td align='middle'>K</td><td align='middle'>L</td><td align='middle'>M</td><td align='middle'>N</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='left' >Anton</td><td align='left' >Freitag</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Anton</td><td align='left' style='color:#275317; ' >Name01</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Freitag</td><td align='left' style='color:#7030A0; ' >NachName01</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name01</td><td align='left' style='color:#7E350E; ' >NachName01</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >Berta</td><td align='left' >Schön</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Berta</td><td align='left' style='color:#275317; ' >Name02</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Schön</td><td align='left' style='color:#7030A0; ' >NachName02</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name02</td><td align='left' style='color:#7E350E; ' >NachName02</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >Caesar</td><td align='left' >Glöckner</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Caesar</td><td align='left' style='color:#275317; ' >Name03</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Glöckner</td><td align='left' style='color:#7030A0; ' >NachName03</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name03</td><td align='left' style='color:#7E350E; ' >NachName03</td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='left' >Anton</td><td align='left' >Freitag</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Dieter</td><td align='left' style='color:#275317; ' >Name04</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Leden</td><td align='left' style='color:#7030A0; ' >NachName04</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name01</td><td align='left' style='color:#7E350E; ' >NachName01</td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='left' >Dieter</td><td align='left' >Leden</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Heinrich</td><td align='left' style='color:#275317; ' >Name05</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Booter</td><td align='left' style='color:#7030A0; ' >NachName05</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name04</td><td align='left' style='color:#7E350E; ' >NachName04</td></tr><tr><td style='background-color:#cacaca' align='middle'>6</td><td align='left' >Heinrich</td><td align='left' >Booter</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name05</td><td align='left' style='color:#7E350E; ' >NachName05</td></tr><tr><td style='background-color:#cacaca' align='middle'>7</td><td align='left' >Berta</td><td align='left' >Schön</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Schritt 1</td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Schritt 1</td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name02</td><td align='left' style='color:#7E350E; ' >NachName02</td></tr><tr><td style='background-color:#cacaca' align='middle'>8</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#275317; ' >Schritt 2</td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#7030A0; ' >Schritt 2</td><td align='right' ></td><td align='right' ></td><td align='right' ></td></tr><tr><td style='background-color:#cacaca' align='middle'>9</td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='left' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;color:#7E350E; ' >Schritt 3</td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td></tr></table><br><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:fixed; color:#000000; background-color:#FFFFFF; border-collapse:collapse; font-family:Aptos Narrow; font-size:16px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td style='border-bottom-left-radius: 0px;'>M1</td><td style='border-bottom-right-radius: 0px;'><Span style='color:#222222'>=SVERWEIS</Span><Span style='color:#0000DD'>(A1;G&#36;1:H&#36;5;2;FALSCH)</Span><Span style='color:#222222'></Span></td></tr><tr><td style='border-bottom-left-radius: 0px;'>N1</td><td style='border-bottom-right-radius: 0px;'><Span style='color:#222222'>=SVERWEIS</Span><Span style='color:#0000DD'>(B1;J&#36;1:K&#36;5;2;FALSCH)</Span><Span style='color:#222222'></Span></td></tr></table><table style='font-family:Arial; font-size:13px'><tr><td style='color:#333333'>Verwendete Systemkomponenten: [Windows (64-bit) NT 10.00] / MS Excel 365 </td></tr><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.7.2) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Schritt 1</span><br />Eindeutige Listen der Vornamen und Nachnamen erzeugen (hier Spalten G und J)<br /><span style="font-weight: bold;" class="mycode_b">Schritt 2</span><br />Neben Vornamen und Nachnamen Name01 bzw. Nachname01 usw. eintragen  (hier Spalten H und K)<br /><span style="font-weight: bold;" class="mycode_b">Schritt 3</span><br />Mit SVERWEIS ein Abbild der Originalliste mit den Ersatznaman und -vornamen erzeugen  (hier Spalten M und N)<br /><span style="font-weight: bold;" class="mycode_b">Schritt 4</span><br />Originale ersetzen. Dazu die erzeugten Daten kopieren und mit Inhalte einfügen - Werte einfügen (hier nicht dargestellt, da Spalten A und B damit überschrieben werden)<br /><span style="font-weight: bold;" class="mycode_b">Schritt 5</span><br />Hilfsdaten löschen  (hier Spalten M und N)]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">[Daten anonymisieren Teil 1]</span><br /><br />Hallöchen zusammen,<br /><br />zur besseren Veranschaulichung von Problemen und gewünschten Lösungen ist oftmals eine Bereitstellung von Daten hilfreich oder erforderlich. Die Helfer können so, ohne die Dateien nachzubauen, mit der Lösungsfindung beginnen, eventuelle Lösungsansätze mit den bereitgestellten Daten testen und den gewünschten Lösungen vergleichen.<br /><br />Der Datenschutz gebietet, dass das natürlich nicht mit Originaldaten, insbesondere Firmen - und Mitarbeiterdaten, geschieht. Bereitgestellte Dateien sollten daher immer entsprechend anonymisierte Daten enthalten. Daten werden dabei willkürlich ersetzt, sodass im Gegensatz zu einer Verschlüsselung eine Entschlüsselung nicht möglich sein sollte.<br /><br />Die Ersetzung sollte natürlich so erfolgen, dass keine Rückschlüsse auf die Originaldaten möglich sind. Einfach nur Buchstaben durcheinander zu bringen reicht da z.B. nicht. hzine lässt sicher den Namen Heinz vermuten ...<br /><br />Die Anonymisierung kann man manuell durchführen oder auch makrogestützt. Hier in diesem ersten Teil stelle ich kurz eine Formellösung anhand Vor- und Nachnamen in 5 Schritten vor.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='15' style='font-family:Aptos Narrow; color:#000000; border-collapse:collapse; background-color:#FFFFFF; font-size:16px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='19,5pt'><col width='19,5pt'><col width='19,5pt'><col width='19,5pt'><col width='60pt'><col width='60pt'><col width='19,5pt'><col width='60pt'><col width='60pt'><col width='19,5pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#cacaca'><td></td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td><td align='middle'>F</td><td align='middle'>G</td><td align='middle'>H</td><td align='middle'>I</td><td align='middle'>J</td><td align='middle'>K</td><td align='middle'>L</td><td align='middle'>M</td><td align='middle'>N</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='left' >Anton</td><td align='left' >Freitag</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Anton</td><td align='left' style='color:#275317; ' >Name01</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Freitag</td><td align='left' style='color:#7030A0; ' >NachName01</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name01</td><td align='left' style='color:#7E350E; ' >NachName01</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >Berta</td><td align='left' >Schön</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Berta</td><td align='left' style='color:#275317; ' >Name02</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Schön</td><td align='left' style='color:#7030A0; ' >NachName02</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name02</td><td align='left' style='color:#7E350E; ' >NachName02</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >Caesar</td><td align='left' >Glöckner</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Caesar</td><td align='left' style='color:#275317; ' >Name03</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Glöckner</td><td align='left' style='color:#7030A0; ' >NachName03</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name03</td><td align='left' style='color:#7E350E; ' >NachName03</td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='left' >Anton</td><td align='left' >Freitag</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Dieter</td><td align='left' style='color:#275317; ' >Name04</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Leden</td><td align='left' style='color:#7030A0; ' >NachName04</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name01</td><td align='left' style='color:#7E350E; ' >NachName01</td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='left' >Dieter</td><td align='left' >Leden</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Heinrich</td><td align='left' style='color:#275317; ' >Name05</td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Booter</td><td align='left' style='color:#7030A0; ' >NachName05</td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name04</td><td align='left' style='color:#7E350E; ' >NachName04</td></tr><tr><td style='background-color:#cacaca' align='middle'>6</td><td align='left' >Heinrich</td><td align='left' >Booter</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name05</td><td align='left' style='color:#7E350E; ' >NachName05</td></tr><tr><td style='background-color:#cacaca' align='middle'>7</td><td align='left' >Berta</td><td align='left' >Schön</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#FF0000; ' >Schritt 1</td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#0070C0; ' >Schritt 1</td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#7E350E; ' >Name02</td><td align='left' style='color:#7E350E; ' >NachName02</td></tr><tr><td style='background-color:#cacaca' align='middle'>8</td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#275317; ' >Schritt 2</td><td align='right' ></td><td align='right' ></td><td align='left' style='color:#7030A0; ' >Schritt 2</td><td align='right' ></td><td align='right' ></td><td align='right' ></td></tr><tr><td style='background-color:#cacaca' align='middle'>9</td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td><td align='left' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;color:#7E350E; ' >Schritt 3</td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' ></td></tr></table><br><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:fixed; color:#000000; background-color:#FFFFFF; border-collapse:collapse; font-family:Aptos Narrow; font-size:16px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td style='border-bottom-left-radius: 0px;'>M1</td><td style='border-bottom-right-radius: 0px;'><Span style='color:#222222'>=SVERWEIS</Span><Span style='color:#0000DD'>(A1;G&#36;1:H&#36;5;2;FALSCH)</Span><Span style='color:#222222'></Span></td></tr><tr><td style='border-bottom-left-radius: 0px;'>N1</td><td style='border-bottom-right-radius: 0px;'><Span style='color:#222222'>=SVERWEIS</Span><Span style='color:#0000DD'>(B1;J&#36;1:K&#36;5;2;FALSCH)</Span><Span style='color:#222222'></Span></td></tr></table><table style='font-family:Arial; font-size:13px'><tr><td style='color:#333333'>Verwendete Systemkomponenten: [Windows (64-bit) NT 10.00] / MS Excel 365 </td></tr><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.7.2) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Schritt 1</span><br />Eindeutige Listen der Vornamen und Nachnamen erzeugen (hier Spalten G und J)<br /><span style="font-weight: bold;" class="mycode_b">Schritt 2</span><br />Neben Vornamen und Nachnamen Name01 bzw. Nachname01 usw. eintragen  (hier Spalten H und K)<br /><span style="font-weight: bold;" class="mycode_b">Schritt 3</span><br />Mit SVERWEIS ein Abbild der Originalliste mit den Ersatznaman und -vornamen erzeugen  (hier Spalten M und N)<br /><span style="font-weight: bold;" class="mycode_b">Schritt 4</span><br />Originale ersetzen. Dazu die erzeugten Daten kopieren und mit Inhalte einfügen - Werte einfügen (hier nicht dargestellt, da Spalten A und B damit überschrieben werden)<br /><span style="font-weight: bold;" class="mycode_b">Schritt 5</span><br />Hilfsdaten löschen  (hier Spalten M und N)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Externe formatierte Listbox mit Bildern und Zwischenüberschriften]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Externe-formatierte-Listbox-mit-Bildern-und-Zwischenueberschriften</link>
			<pubDate>Thu, 27 Mar 2025 11:50:51 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=18350">volti</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Externe-formatierte-Listbox-mit-Bildern-und-Zwischenueberschriften</guid>
			<description><![CDATA[Liebe Leserin, lieber Leser,<br /><br />obwohl ich selbst bisher noch keine Listbox im Einsatz hatte, möchte ich heute trotzdem mal das spannnende Thema <b>formatierte Listbox mit Bildern</b> aufgreifen und hier in diesem Workshop einige Beispiele hierzu geben.<br />Denn die Listbox scheint mir das beliebteste Control zu sein.<br />Listboxen werden ja meistens in eine Userform eingebettet. Ob hier mit Bordmitteln Bilder hinzugefügt werden können, weiß ich derzeit leider nicht.<br /><br />Für eine <u>schnelle</u> Auswahl aus einer Listbox ohne Userform bietet sich ohnehin wieder die Einbettung in eine fertige Dialogbox an. Die Wahl fiel wieder auf die Inputbox.<br />Diese bringt schon einige Funktionalitäten von Haus aus mit und lässt sich mit ein paar API-Funktionen leicht manipulieren.<br /><br />Hierzu beschaffen wir uns z.B. über den Timer das Handle (interner Zeiger auf die Inputbox) und können nun loslegen mit unserer Manipulation.<br /><br />Wir fügen der Inputbox eine Listbox hinzu und legen sie über die vorher ausgeblendete Editbox.<br />Optional können wir die beiden Buttons "OK" und "Abbrechen" nach unten unter die Listbox verschieben, so dass der Platz optiomal genutzt werden kann. <br /><br />Nach dem Hinzufügen der gewünschten Elemente ist unsere Listboxdialogbox auch schon fertig.<br />Mit der Auswahl eines Elements wird dessen Text in die Originaleditbox überführt. Damit überlassen wir der Inputbox das Managen der Rückgabe und haben keine Arbeit damit.<br /><br />Der hier gezeigte bzw. der in der Beispieldatei enthaltene Code zeigt, wie man<ul><li>eine Listbox in die Inputbox eingebettet</li><li>den Font der Listbox ändern kann</li><li>kleine BitMaps den Elementen hinzufügt</li><li>die Farben des Selektionsbalkens ändern kann</li><li>MultiSelect realisiert und ggf. mehrere Spalten anlegt</li><li>andersfarbige Zwischenüberschriften in fetter Schrift darstellt und die Items aus der Auswahl ausschließt</li></ul><br />Hier ein paar Ansichten:<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55197" target="_blank" title="27.03.2025, 13:48">Inputbox_Listbox.png</a> (Größe: 51,58 KB / Downloads: 39)
<!-- end: postbit_attachments_attachment --><br /><br /><b><font color=red>Achtung:</font></b> Dieser Beispielcode verwendet die BitMaps aus einem Dateiordner. Es funktioniert daher nur, wenn die in der beigefügten Zip-Datei enthaltenen Dateien in den vorher angelegten Ordner <b>ThisWorkbook.Path & "\Bitmaps\"</b> extrahiert wurden.<br />Oder Du änderst den Code entsprechend ab.<br /><br />PS. In der anliegenden Datei findest Du auch noch einige andere Beispiele, von der einfachen codesparenden Minimalversion bis zur mehrfabigen Version mit Multiselect.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55198" target="_blank" title="27.03.2025, 13:48">Inputbox_Listbox_CEF.xlsb</a> (Größe: 155,5 KB / Downloads: 0)
<!-- end: postbit_attachments_attachment --><br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55199" target="_blank" title="27.03.2025, 13:49">BitMaps_Flaggen.zip</a> (Größe: 27,07 KB / Downloads: 0)
<!-- end: postbit_attachments_attachment --><br /><br />So, und nun viel Spaß beim Ausprobieren...<br /><br /><!--- erstellt am 27.03.2025 12:41:13 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 1270px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus124113' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA124113' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=blue>Private Const</font> <font color=#d000d0>ciHoch</font>&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>300</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Dlg-H&ouml;he</font><br><font color=blue>Private Const</font> <font color=#d000d0>cx</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>18</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' BitMap-Breite</font><br><font color=blue>Private Const</font> <font color=#d000d0>cy</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>12</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' BitMap-H&ouml;he</font><br><br><font color=#00a000>' GDI-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetSysColorBrush</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetSysColor</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As Long</font><br><br><font color=#00a000>' Timer-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetTimer</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> uElapse <font color=blue>As Long</font>, <font color=blue>ByVal</font> lpTimerFunc <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>KillTimer</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><br><font color=#00a000>' Window-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetActiveWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ShowWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nCmdShow <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateWindowExA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwExStyle <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> lpClassName <font color=blue>As String</font>, <font color=blue>ByVal</font> lpWindowName <font color=blue>As String</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwStyle <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> x <font color=blue>As Long</font>, <font color=blue>ByVal</font> y <font color=blue>As Long</font>, <font color=blue>ByVal</font> nWidth <font color=blue>As Long</font>, <font color=blue>ByVal</font> nHeight <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWndParent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hMenu <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hInstance <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpParam <font color=blue>As Any</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Const</font> <font color=#d000d0>WS_LB1</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&H50010000</font><font color=#00a000>&nbsp;' WS_CHILD or WS_VISIBLE or WS_TABSTOP</font><br><font color=blue>Private Const</font> <font color=#d000d0>WS_LB2</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&HA00000</font>&nbsp;&nbsp;<font color=#00a000>&nbsp;' WS_SCROLL + WS_BORDER</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_ADDSTRING</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&H180</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_GETTEXT</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&H189</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowPos</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hWndInsertAfter <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> x <font color=blue>As Long</font>, <font color=blue>ByVal</font> y <font color=blue>As Long</font>, <font color=blue>ByVal</font> <font color=#d000d0>cx</font> <font color=blue>As Long</font>, <font color=blue>ByVal</font> <font color=#d000d0>cy</font> <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Const</font> <font color=#d000d0>SWP_NOMOVE</font> <font color=blue>As Long</font> = <font color=#ff6060>&H2</font><br><font color=blue>Private Const</font> <font color=#d000d0>SWP_NOSIZE</font> <font color=blue>As Long</font> = <font color=#ff6060>&H1</font><br><br><font color=#00a000>' Sub-Classing-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CallWindowProcA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> lpPrevWndFunc <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> Msg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#If</font> <font color=blue><b>Win64</b></font> <font color=blue>Then</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>SetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#Else</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#End If</font><br><font color=blue>Private Const</font> <font color=#d000d0>GWL_WNDPROC</font> <font color=blue>As Long</font> = (<font color=#ff6060>-4</font>)<br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetDlgItem</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hDlg <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDDlgItem <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowTextA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpString <font color=blue>As String</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SendMessageA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> wMsg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, lParam <font color=blue>As Any</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Const</font> <font color=#d000d0>WS_LB3</font> <font color=blue>As Long</font> = <font color=#ff6060>&H51</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' LBS_NOTIFY + LBS_OWNERDRAWFIXED + LBS_HASSTRINGS</font><br><font color=blue>Private Type Rect</font><br>&nbsp;&nbsp; Left&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp; Top&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; Right&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; Bottom <font color=blue>As Long</font><br><font color=blue>End Type</font><br><br><font color=blue>Private Type DRAWITEMSTRUCT</font><br>&nbsp;&nbsp; CtlType&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; CtlID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; Nr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' original itemID</font><br>&nbsp;&nbsp; itemAction <font color=blue>As Long</font><br>&nbsp;&nbsp; itemState&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; hwndItem&nbsp;&nbsp; <font color=blue>As LongPtr</font><br>&nbsp;&nbsp; hDC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As LongPtr</font><br>&nbsp;&nbsp; rcItem&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Rect</font><br>&nbsp;&nbsp; itemData&nbsp;&nbsp; <font color=blue>As LongPtr</font><br><font color=blue>End Type</font><br><br><font color=blue>Private Declare PtrSafe Sub</font> <font color=#d000d0>CopyMemory</font> <font color=blue>Lib</font> &quot;<font color=red>kernel32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>RtlMoveMemory</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Destination As Any</font>, <font color=blue>Source As Any</font>, <font color=blue>ByVal Length As LongPtr</font>)<br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>FillRect</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, lpRect <font color=blue>As Rect</font>, <font color=blue>ByVal</font> hBrush <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetBkMode</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nBkMode <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetTextColor</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> crColor <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DrawTextA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpStr <font color=blue>As String</font>, <font color=blue>ByVal</font> nCount <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpRect <font color=blue>As Rect</font>, <font color=blue>ByVal</font> wFormat <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DrawState</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>DrawStateA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hBrush <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> lpDrawStateProc <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> n1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> n2 <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> n3 <font color=blue>As Long</font>, <font color=blue>ByVal</font> n4 <font color=blue>As Long</font>, <font color=blue>ByVal</font> un <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateSolidBrush</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> crColor <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DeleteObject</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hObject <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_SETITEMHEIGHT</font> <font color=blue>As Long</font> = <font color=#ff6060>&H1A0</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><font color=#00a000>' #### Wird nur ben&ouml;tigt, wenn BitMaps aus Datei geladen werden ####</font><br><font color=blue>Private Const</font> <font color=#d000d0>csPfad</font> <font color=blue>As String</font> = &quot;<font color=red>#PATH#&bsol;Bitmaps&bsol;#.bmp</font>&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' &lt;&lt;&lt;&lt; Pfad ggf. anpassen &gt;&gt;&gt;&gt;</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>LoadImageA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hInst <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpsz <font color=blue>As String</font>, <font color=blue>ByVal</font> un1 <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> n1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> n2 <font color=blue>As Long</font>, <font color=blue>ByVal</font> un2 <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_SETITEMDATA</font>&nbsp;&nbsp;<font color=blue>As Long</font> = <font color=#ff6060>&H19A</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_GETITEMDATA</font>&nbsp;&nbsp;<font color=blue>As Long</font> = <font color=#ff6060>&H199</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_GETCOUNT</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&H18B</font><br><br><font color=blue>Dim</font> mhTimer <font color=blue>As LongPtr</font>, mlpOldProc <font color=blue>As LongPtr</font><br><font color=blue>Dim</font> mhLB&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As LongPtr</font>, mhBmp&nbsp;&nbsp;<font color=blue>As LongPtr</font><br><font color=blue>Dim</font> msArr() <font color=blue>As String</font><br><br><strong><font color=blue>Private Function</font> ListboxEx(sMsgTxt <font color=blue>As String</font>, sCaption <font color=blue>As String</font>, _</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sLBElemente <font color=blue>As String</font>, <font color=blue>Optional</font> sDefault <font color=blue>As String</font>) <font color=blue>As Variant</font><br><font color=#00a000>' Anzeigen einer Inputbox als ListBox mit Bildern</font><br>&nbsp;&nbsp;msArr = <font color=#5050f0>Split</font>(sLBElemente, &quot;<font color=red>,</font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Array mit Elementen global</font><br>&nbsp;&nbsp;mhTimer = <font color=#d000d0>SetTimer</font>(<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>10</font>, <font color=blue>AddressOf</font> ListBoxHookProc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Timer setzen</font><br>&nbsp;&nbsp;ListboxEx = <font color=#5050f0>InputBox</font>(sMsgTxt, sCaption, sDefault)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' (Excel)-Inputbox starten</font><br><strong><font color=blue>End Function</font></strong><br><br><strong><font color=blue>Private Sub</font> ListBoxHookProc()</strong><br><font color=#00a000>' Setzt die Hooking-Prozedur f&uuml;r die Listbox</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> i <font color=blue>As Long</font>, hDlg&nbsp;&nbsp;<font color=blue>As LongPtr</font>, sBmpDatei <font color=blue>As String</font><br><br>&nbsp;&nbsp;<font color=#d000d0>KillTimer</font> <font color=#ff6060>0&</font>, mhTimer: mhTimer = <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer l&ouml;schen</font><br>&nbsp;<br>&nbsp;&nbsp;hDlg = <font color=#d000d0>GetActiveWindow</font>&nbsp;&nbsp; <font color=#00a000>&nbsp;' 4900 = Edit_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Handle der Inputbox</font><br>&nbsp;&nbsp;<font color=#d000d0>ShowWindow</font> <font color=#d000d0>GetDlgItem</font>(hDlg, <font color=#ff6060>4900</font>), <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Editbox ausblenden</font><br>&nbsp;&nbsp;<br><font color=#00a000>' Dlg-Gr&ouml;ße anpassen und Button verschieben</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowPos</font> hDlg, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>510</font>, <font color=#d000d0>ciHoch</font>, <font color=#d000d0>SWP_NOMOVE</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Dlg-Gr&ouml;ße anpassen</font><br><br><font color=#00a000>' Eine ListBox erstellen, mit Elementen f&uuml;llen&nbsp;&nbsp;und anzeigen&nbsp;&nbsp;&lt;&lt;&lt;&lt; Maße ggf. anpassen &gt;&gt;&gt;&gt;</font><br>&nbsp;&nbsp;mhLB = <font color=#d000d0>CreateWindowExA</font>(<font color=#ff6060>0&</font>, &quot;<font color=red>Listbox</font>&quot;, &quot;<font color=red></font>&quot;, <font color=#d000d0>WS_LB1</font> + <font color=#d000d0>WS_LB2</font> + <font color=#d000d0>WS_LB3</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff6060>12</font>, <font color=#ff6060>48</font>, <font color=#ff6060>350</font>, <font color=#d000d0>ciHoch</font> - <font color=#ff6060>100</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hDlg, <font color=#ff6060>0</font>, Application.HinstancePtr, <font color=#ff6060>0&</font>)<br><font color=#00a000>' Elemente einf&uuml;gen</font><br>&nbsp;&nbsp;<font color=blue>For</font> i = <font color=#ff6060>0</font> <font color=blue>To</font> <font color=#5050f0>UBound</font>(msArr)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SendMessageA</font> mhLB, <font color=#d000d0>LB_ADDSTRING</font>, <font color=#ff6060>1</font>, <font color=blue>ByVal</font> msArr(i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Item-Text einsetzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sBmpDatei = <font color=#5050f0>Replace</font>(<font color=#d000d0>csPfad</font>, &quot;<font color=red>#PATH#</font>&quot;, ThisWorkbook.Path)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sBmpDatei = <font color=#5050f0>Replace</font>(sBmpDatei, &quot;<font color=red>#</font>&quot;, <font color=#5050f0>Split</font>(msArr(i))(<font color=#ff6060>0</font>))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' BMP-Datei ermitteln</font><br><font color=#00a000>' Bitmap laden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGE_BITMAP = &H0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&H10 = LR_LOADFROMFILE</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhBmp = <font color=#d000d0>LoadImageA</font>(<font color=#ff6060>0</font>, <font color=blue>ByVal</font> sBmpDatei, <font color=#ff6060>&H0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>&H10</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Bitmap aus Datei</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> mhBmp &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font> <font color=#d000d0>SendMessageA</font> mhLB, <font color=#d000d0>LB_SETITEMDATA</font>, i, <font color=blue>ByVal</font> mhBmp<br>&nbsp;&nbsp;<font color=blue>Next</font> i<br><br><font color=#00a000>' Inputbox hooken</font><br>&nbsp;&nbsp;mlpOldProc = <font color=#d000d0>SetWindowLongA</font>(hDlg, <font color=#d000d0>GWL_WNDPROC</font>, <font color=blue>AddressOf</font> WindowProc) <font color=#00a000>&nbsp;' Alte Prozeduradresse retten</font><br><strong><font color=blue>End Sub</font></strong><br><br><strong><font color=blue>Private Function</font> WindowProc(<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> uMsg <font color=blue>As Long</font>, _</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> bSel&nbsp;&nbsp;<font color=blue>As Boolean</font>, i <font color=blue>As Long</font>, l <font color=blue>As Long</font>, R <font color=blue>As Rect</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> sText <font color=blue>As String *</font> <font color=#ff6060>255</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> tDrawItemSet&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As DRAWITEMSTRUCT</font><br><br>&nbsp;&nbsp;<font color=blue>With</font> tDrawItemSet<br><font color=#00a000>' .hwndItem entspricht dem LB-Handle, hwnd entspricht dem Dlg-Handle</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Select Case</font> uMsg<br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Case</font> <font color=#ff6060>&H2B</font><font color=#00a000>&nbsp;' WM_DRAWITEM</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>CopyMemory</font> tDrawItemSet, <font color=blue>ByVal</font> lParam, <font color=#5050f0>LenB</font>(tDrawItemSet)&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Pointer in Struktur kopieren</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> .Nr = <font color=#ff6060>&HFFFFFFFF</font> <font color=blue>Then Exit Function</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Liste ist leer =&gt;raus</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R = .rcItem<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SendMessageA</font> .hwndItem, <font color=#d000d0>LB_GETTEXT</font>, .Nr, <font color=blue>ByVal</font> sText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Item-Text holen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bSel = (.itemState <font color=blue>And</font> <font color=#ff6060>1</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' 1 = ODS_SELECTED</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> bSel <font color=blue>Then</font> <font color=#d000d0>SetWindowTextA</font> <font color=#d000d0>GetDlgItem</font>(hWnd, <font color=#ff6060>4900</font>), sText&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Editbox mit selektiertem Item updaten</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><font color=#00a000>' 5=COLOR_WINDOW, 13=COLOR_HIGHLIGHT, 8=COLOR_WINDOWTEXT, 14=COLOR_HIGHLIGHTTEXT</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>FillRect</font> .hDC, R, <font color=#d000d0>GetSysColorBrush</font>(<font color=blue>IIf</font>(bSel, <font color=#ff6060>13</font>, <font color=#ff6060>5</font>))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Hintergrund zeichnen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SetBkMode</font> .hDC, <font color=#ff6060>1</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Hintergrund auf TRANSPARENT = 1 setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SetTextColor</font> .hDC, <font color=#d000d0>GetSysColor</font>(<font color=blue>IIf</font>(bSel, <font color=#ff6060>14</font>, <font color=#ff6060>8</font>))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Schriftfarbe setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R.Left = <font color=#d000d0>cx</font> + <font color=#ff6060>10</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' &H24 = DT_SINGLELINE + DT_LEFT + DT_VCENTER</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>DrawTextA</font> .hDC, sText, <font color=#ff6060>255</font>, R, <font color=#ff6060>&H24</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Text schreiben</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><font color=#00a000>' BitMap: Handle holen und zeichnen,</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhBmp = <font color=#d000d0>SendMessageA</font>(.hwndItem, <font color=#d000d0>LB_GETITEMDATA</font>, .Nr, <font color=blue>ByVal</font> <font color=#ff6060>0</font>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>DrawState</font> .hDC, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, mhBmp, <font color=#ff6060>0</font>, <font color=#ff6060>3</font>, R.Top + <font color=#ff6060>4</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>&H4</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' &H4 = DST_BITMAP</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Case</font> <font color=#ff6060>&H2</font> <font color=#00a000>&nbsp;' WM_DESTROY</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>For</font> i = <font color=#ff6060>0</font> <font color=blue>To</font> <font color=#5050f0>CLng</font>(<font color=#d000d0>SendMessageA</font>(mhLB, <font color=#d000d0>LB_GETCOUNT</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>)) - <font color=#ff6060>1</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhBmp = <font color=#d000d0>SendMessageA</font>(mhLB, <font color=#d000d0>LB_GETITEMDATA</font>, i, <font color=blue>ByVal</font> <font color=#ff6060>0</font>)&nbsp;&nbsp; <font color=#00a000>&nbsp;' BitMap-Handle holen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>DeleteObject</font> mhBmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' BitMap-Handle l&ouml;schen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Next</font> i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SetWindowLongA</font> hWnd, <font color=#d000d0>GWL_WNDPROC</font>, mlpOldProc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' InputBox unhooken</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End Select</font><br>&nbsp;&nbsp;<font color=blue>End With</font><br>&nbsp;&nbsp;WindowProc = <font color=#d000d0>CallWindowProcA</font>(mlpOldProc, hWnd, uMsg, wParam, <font color=blue>ByVal</font> lParam)<font color=#00a000>&nbsp;' Andere Messages weiterleiten</font><br><br><strong><font color=blue>End Function</font></strong><br><br><font color=#00a000>' #####################################################################</font><br><strong><font color=blue>Sub</font> AufrufListboxCEF()</strong><br>&nbsp;&nbsp;<font color=blue>MsgBox</font> ListboxEx(&quot;<font color=red>Bitte w&auml;hle ein Land aus!</font>&quot;, &quot;<font color=red>Land ausw&auml;hlen</font>&quot;, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;<font color=red>D&auml;nemark,Deutschland,England,Island,Italien,Niederlande,Norwegen,Portugal,Schweden</font>&quot;, <font color=#ff6060>2</font>)<br><strong><font color=blue>End Sub</font></strong></div></div><div style='line-height: 5px;'><br></div></div></div><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div>]]></description>
			<content:encoded><![CDATA[Liebe Leserin, lieber Leser,<br /><br />obwohl ich selbst bisher noch keine Listbox im Einsatz hatte, möchte ich heute trotzdem mal das spannnende Thema <b>formatierte Listbox mit Bildern</b> aufgreifen und hier in diesem Workshop einige Beispiele hierzu geben.<br />Denn die Listbox scheint mir das beliebteste Control zu sein.<br />Listboxen werden ja meistens in eine Userform eingebettet. Ob hier mit Bordmitteln Bilder hinzugefügt werden können, weiß ich derzeit leider nicht.<br /><br />Für eine <u>schnelle</u> Auswahl aus einer Listbox ohne Userform bietet sich ohnehin wieder die Einbettung in eine fertige Dialogbox an. Die Wahl fiel wieder auf die Inputbox.<br />Diese bringt schon einige Funktionalitäten von Haus aus mit und lässt sich mit ein paar API-Funktionen leicht manipulieren.<br /><br />Hierzu beschaffen wir uns z.B. über den Timer das Handle (interner Zeiger auf die Inputbox) und können nun loslegen mit unserer Manipulation.<br /><br />Wir fügen der Inputbox eine Listbox hinzu und legen sie über die vorher ausgeblendete Editbox.<br />Optional können wir die beiden Buttons "OK" und "Abbrechen" nach unten unter die Listbox verschieben, so dass der Platz optiomal genutzt werden kann. <br /><br />Nach dem Hinzufügen der gewünschten Elemente ist unsere Listboxdialogbox auch schon fertig.<br />Mit der Auswahl eines Elements wird dessen Text in die Originaleditbox überführt. Damit überlassen wir der Inputbox das Managen der Rückgabe und haben keine Arbeit damit.<br /><br />Der hier gezeigte bzw. der in der Beispieldatei enthaltene Code zeigt, wie man<ul><li>eine Listbox in die Inputbox eingebettet</li><li>den Font der Listbox ändern kann</li><li>kleine BitMaps den Elementen hinzufügt</li><li>die Farben des Selektionsbalkens ändern kann</li><li>MultiSelect realisiert und ggf. mehrere Spalten anlegt</li><li>andersfarbige Zwischenüberschriften in fetter Schrift darstellt und die Items aus der Auswahl ausschließt</li></ul><br />Hier ein paar Ansichten:<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55197" target="_blank" title="27.03.2025, 13:48">Inputbox_Listbox.png</a> (Größe: 51,58 KB / Downloads: 39)
<!-- end: postbit_attachments_attachment --><br /><br /><b><font color=red>Achtung:</font></b> Dieser Beispielcode verwendet die BitMaps aus einem Dateiordner. Es funktioniert daher nur, wenn die in der beigefügten Zip-Datei enthaltenen Dateien in den vorher angelegten Ordner <b>ThisWorkbook.Path & "\Bitmaps\"</b> extrahiert wurden.<br />Oder Du änderst den Code entsprechend ab.<br /><br />PS. In der anliegenden Datei findest Du auch noch einige andere Beispiele, von der einfachen codesparenden Minimalversion bis zur mehrfabigen Version mit Multiselect.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55198" target="_blank" title="27.03.2025, 13:48">Inputbox_Listbox_CEF.xlsb</a> (Größe: 155,5 KB / Downloads: 0)
<!-- end: postbit_attachments_attachment --><br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55199" target="_blank" title="27.03.2025, 13:49">BitMaps_Flaggen.zip</a> (Größe: 27,07 KB / Downloads: 0)
<!-- end: postbit_attachments_attachment --><br /><br />So, und nun viel Spaß beim Ausprobieren...<br /><br /><!--- erstellt am 27.03.2025 12:41:13 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 1270px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus124113' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA124113' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=blue>Private Const</font> <font color=#d000d0>ciHoch</font>&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>300</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Dlg-H&ouml;he</font><br><font color=blue>Private Const</font> <font color=#d000d0>cx</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>18</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' BitMap-Breite</font><br><font color=blue>Private Const</font> <font color=#d000d0>cy</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>12</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' BitMap-H&ouml;he</font><br><br><font color=#00a000>' GDI-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetSysColorBrush</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetSysColor</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>) <font color=blue>As Long</font><br><br><font color=#00a000>' Timer-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetTimer</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> uElapse <font color=blue>As Long</font>, <font color=blue>ByVal</font> lpTimerFunc <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>KillTimer</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><br><font color=#00a000>' Window-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetActiveWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ShowWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nCmdShow <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateWindowExA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwExStyle <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> lpClassName <font color=blue>As String</font>, <font color=blue>ByVal</font> lpWindowName <font color=blue>As String</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwStyle <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> x <font color=blue>As Long</font>, <font color=blue>ByVal</font> y <font color=blue>As Long</font>, <font color=blue>ByVal</font> nWidth <font color=blue>As Long</font>, <font color=blue>ByVal</font> nHeight <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWndParent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hMenu <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hInstance <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpParam <font color=blue>As Any</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Const</font> <font color=#d000d0>WS_LB1</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&H50010000</font><font color=#00a000>&nbsp;' WS_CHILD or WS_VISIBLE or WS_TABSTOP</font><br><font color=blue>Private Const</font> <font color=#d000d0>WS_LB2</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&HA00000</font>&nbsp;&nbsp;<font color=#00a000>&nbsp;' WS_SCROLL + WS_BORDER</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_ADDSTRING</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&H180</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_GETTEXT</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&H189</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowPos</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hWndInsertAfter <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> x <font color=blue>As Long</font>, <font color=blue>ByVal</font> y <font color=blue>As Long</font>, <font color=blue>ByVal</font> <font color=#d000d0>cx</font> <font color=blue>As Long</font>, <font color=blue>ByVal</font> <font color=#d000d0>cy</font> <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Const</font> <font color=#d000d0>SWP_NOMOVE</font> <font color=blue>As Long</font> = <font color=#ff6060>&H2</font><br><font color=blue>Private Const</font> <font color=#d000d0>SWP_NOSIZE</font> <font color=blue>As Long</font> = <font color=#ff6060>&H1</font><br><br><font color=#00a000>' Sub-Classing-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CallWindowProcA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> lpPrevWndFunc <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> Msg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#If</font> <font color=blue><b>Win64</b></font> <font color=blue>Then</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>SetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#Else</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#End If</font><br><font color=blue>Private Const</font> <font color=#d000d0>GWL_WNDPROC</font> <font color=blue>As Long</font> = (<font color=#ff6060>-4</font>)<br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetDlgItem</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hDlg <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDDlgItem <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowTextA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpString <font color=blue>As String</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SendMessageA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> wMsg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, lParam <font color=blue>As Any</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Const</font> <font color=#d000d0>WS_LB3</font> <font color=blue>As Long</font> = <font color=#ff6060>&H51</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' LBS_NOTIFY + LBS_OWNERDRAWFIXED + LBS_HASSTRINGS</font><br><font color=blue>Private Type Rect</font><br>&nbsp;&nbsp; Left&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp; Top&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; Right&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; Bottom <font color=blue>As Long</font><br><font color=blue>End Type</font><br><br><font color=blue>Private Type DRAWITEMSTRUCT</font><br>&nbsp;&nbsp; CtlType&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; CtlID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; Nr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' original itemID</font><br>&nbsp;&nbsp; itemAction <font color=blue>As Long</font><br>&nbsp;&nbsp; itemState&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; hwndItem&nbsp;&nbsp; <font color=blue>As LongPtr</font><br>&nbsp;&nbsp; hDC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As LongPtr</font><br>&nbsp;&nbsp; rcItem&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Rect</font><br>&nbsp;&nbsp; itemData&nbsp;&nbsp; <font color=blue>As LongPtr</font><br><font color=blue>End Type</font><br><br><font color=blue>Private Declare PtrSafe Sub</font> <font color=#d000d0>CopyMemory</font> <font color=blue>Lib</font> &quot;<font color=red>kernel32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>RtlMoveMemory</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Destination As Any</font>, <font color=blue>Source As Any</font>, <font color=blue>ByVal Length As LongPtr</font>)<br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>FillRect</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, lpRect <font color=blue>As Rect</font>, <font color=blue>ByVal</font> hBrush <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetBkMode</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nBkMode <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetTextColor</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> crColor <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DrawTextA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpStr <font color=blue>As String</font>, <font color=blue>ByVal</font> nCount <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpRect <font color=blue>As Rect</font>, <font color=blue>ByVal</font> wFormat <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DrawState</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>DrawStateA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hDC <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hBrush <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> lpDrawStateProc <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> n1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> n2 <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> n3 <font color=blue>As Long</font>, <font color=blue>ByVal</font> n4 <font color=blue>As Long</font>, <font color=blue>ByVal</font> un <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateSolidBrush</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> crColor <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DeleteObject</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hObject <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_SETITEMHEIGHT</font> <font color=blue>As Long</font> = <font color=#ff6060>&H1A0</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><font color=#00a000>' #### Wird nur ben&ouml;tigt, wenn BitMaps aus Datei geladen werden ####</font><br><font color=blue>Private Const</font> <font color=#d000d0>csPfad</font> <font color=blue>As String</font> = &quot;<font color=red>#PATH#&bsol;Bitmaps&bsol;#.bmp</font>&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' &lt;&lt;&lt;&lt; Pfad ggf. anpassen &gt;&gt;&gt;&gt;</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>LoadImageA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hInst <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpsz <font color=blue>As String</font>, <font color=blue>ByVal</font> un1 <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> n1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> n2 <font color=blue>As Long</font>, <font color=blue>ByVal</font> un2 <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_SETITEMDATA</font>&nbsp;&nbsp;<font color=blue>As Long</font> = <font color=#ff6060>&H19A</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_GETITEMDATA</font>&nbsp;&nbsp;<font color=blue>As Long</font> = <font color=#ff6060>&H199</font><br><font color=blue>Private Const</font> <font color=#d000d0>LB_GETCOUNT</font>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font> = <font color=#ff6060>&H18B</font><br><br><font color=blue>Dim</font> mhTimer <font color=blue>As LongPtr</font>, mlpOldProc <font color=blue>As LongPtr</font><br><font color=blue>Dim</font> mhLB&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As LongPtr</font>, mhBmp&nbsp;&nbsp;<font color=blue>As LongPtr</font><br><font color=blue>Dim</font> msArr() <font color=blue>As String</font><br><br><strong><font color=blue>Private Function</font> ListboxEx(sMsgTxt <font color=blue>As String</font>, sCaption <font color=blue>As String</font>, _</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sLBElemente <font color=blue>As String</font>, <font color=blue>Optional</font> sDefault <font color=blue>As String</font>) <font color=blue>As Variant</font><br><font color=#00a000>' Anzeigen einer Inputbox als ListBox mit Bildern</font><br>&nbsp;&nbsp;msArr = <font color=#5050f0>Split</font>(sLBElemente, &quot;<font color=red>,</font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Array mit Elementen global</font><br>&nbsp;&nbsp;mhTimer = <font color=#d000d0>SetTimer</font>(<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>10</font>, <font color=blue>AddressOf</font> ListBoxHookProc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Timer setzen</font><br>&nbsp;&nbsp;ListboxEx = <font color=#5050f0>InputBox</font>(sMsgTxt, sCaption, sDefault)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' (Excel)-Inputbox starten</font><br><strong><font color=blue>End Function</font></strong><br><br><strong><font color=blue>Private Sub</font> ListBoxHookProc()</strong><br><font color=#00a000>' Setzt die Hooking-Prozedur f&uuml;r die Listbox</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> i <font color=blue>As Long</font>, hDlg&nbsp;&nbsp;<font color=blue>As LongPtr</font>, sBmpDatei <font color=blue>As String</font><br><br>&nbsp;&nbsp;<font color=#d000d0>KillTimer</font> <font color=#ff6060>0&</font>, mhTimer: mhTimer = <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer l&ouml;schen</font><br>&nbsp;<br>&nbsp;&nbsp;hDlg = <font color=#d000d0>GetActiveWindow</font>&nbsp;&nbsp; <font color=#00a000>&nbsp;' 4900 = Edit_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Handle der Inputbox</font><br>&nbsp;&nbsp;<font color=#d000d0>ShowWindow</font> <font color=#d000d0>GetDlgItem</font>(hDlg, <font color=#ff6060>4900</font>), <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Editbox ausblenden</font><br>&nbsp;&nbsp;<br><font color=#00a000>' Dlg-Gr&ouml;ße anpassen und Button verschieben</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowPos</font> hDlg, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>510</font>, <font color=#d000d0>ciHoch</font>, <font color=#d000d0>SWP_NOMOVE</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Dlg-Gr&ouml;ße anpassen</font><br><br><font color=#00a000>' Eine ListBox erstellen, mit Elementen f&uuml;llen&nbsp;&nbsp;und anzeigen&nbsp;&nbsp;&lt;&lt;&lt;&lt; Maße ggf. anpassen &gt;&gt;&gt;&gt;</font><br>&nbsp;&nbsp;mhLB = <font color=#d000d0>CreateWindowExA</font>(<font color=#ff6060>0&</font>, &quot;<font color=red>Listbox</font>&quot;, &quot;<font color=red></font>&quot;, <font color=#d000d0>WS_LB1</font> + <font color=#d000d0>WS_LB2</font> + <font color=#d000d0>WS_LB3</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff6060>12</font>, <font color=#ff6060>48</font>, <font color=#ff6060>350</font>, <font color=#d000d0>ciHoch</font> - <font color=#ff6060>100</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hDlg, <font color=#ff6060>0</font>, Application.HinstancePtr, <font color=#ff6060>0&</font>)<br><font color=#00a000>' Elemente einf&uuml;gen</font><br>&nbsp;&nbsp;<font color=blue>For</font> i = <font color=#ff6060>0</font> <font color=blue>To</font> <font color=#5050f0>UBound</font>(msArr)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SendMessageA</font> mhLB, <font color=#d000d0>LB_ADDSTRING</font>, <font color=#ff6060>1</font>, <font color=blue>ByVal</font> msArr(i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Item-Text einsetzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sBmpDatei = <font color=#5050f0>Replace</font>(<font color=#d000d0>csPfad</font>, &quot;<font color=red>#PATH#</font>&quot;, ThisWorkbook.Path)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sBmpDatei = <font color=#5050f0>Replace</font>(sBmpDatei, &quot;<font color=red>#</font>&quot;, <font color=#5050f0>Split</font>(msArr(i))(<font color=#ff6060>0</font>))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' BMP-Datei ermitteln</font><br><font color=#00a000>' Bitmap laden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGE_BITMAP = &H0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&H10 = LR_LOADFROMFILE</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhBmp = <font color=#d000d0>LoadImageA</font>(<font color=#ff6060>0</font>, <font color=blue>ByVal</font> sBmpDatei, <font color=#ff6060>&H0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>&H10</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Bitmap aus Datei</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> mhBmp &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font> <font color=#d000d0>SendMessageA</font> mhLB, <font color=#d000d0>LB_SETITEMDATA</font>, i, <font color=blue>ByVal</font> mhBmp<br>&nbsp;&nbsp;<font color=blue>Next</font> i<br><br><font color=#00a000>' Inputbox hooken</font><br>&nbsp;&nbsp;mlpOldProc = <font color=#d000d0>SetWindowLongA</font>(hDlg, <font color=#d000d0>GWL_WNDPROC</font>, <font color=blue>AddressOf</font> WindowProc) <font color=#00a000>&nbsp;' Alte Prozeduradresse retten</font><br><strong><font color=blue>End Sub</font></strong><br><br><strong><font color=blue>Private Function</font> WindowProc(<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> uMsg <font color=blue>As Long</font>, _</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> bSel&nbsp;&nbsp;<font color=blue>As Boolean</font>, i <font color=blue>As Long</font>, l <font color=blue>As Long</font>, R <font color=blue>As Rect</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> sText <font color=blue>As String *</font> <font color=#ff6060>255</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> tDrawItemSet&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As DRAWITEMSTRUCT</font><br><br>&nbsp;&nbsp;<font color=blue>With</font> tDrawItemSet<br><font color=#00a000>' .hwndItem entspricht dem LB-Handle, hwnd entspricht dem Dlg-Handle</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Select Case</font> uMsg<br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Case</font> <font color=#ff6060>&H2B</font><font color=#00a000>&nbsp;' WM_DRAWITEM</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>CopyMemory</font> tDrawItemSet, <font color=blue>ByVal</font> lParam, <font color=#5050f0>LenB</font>(tDrawItemSet)&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Pointer in Struktur kopieren</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> .Nr = <font color=#ff6060>&HFFFFFFFF</font> <font color=blue>Then Exit Function</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Liste ist leer =&gt;raus</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R = .rcItem<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SendMessageA</font> .hwndItem, <font color=#d000d0>LB_GETTEXT</font>, .Nr, <font color=blue>ByVal</font> sText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Item-Text holen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bSel = (.itemState <font color=blue>And</font> <font color=#ff6060>1</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' 1 = ODS_SELECTED</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> bSel <font color=blue>Then</font> <font color=#d000d0>SetWindowTextA</font> <font color=#d000d0>GetDlgItem</font>(hWnd, <font color=#ff6060>4900</font>), sText&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Editbox mit selektiertem Item updaten</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><font color=#00a000>' 5=COLOR_WINDOW, 13=COLOR_HIGHLIGHT, 8=COLOR_WINDOWTEXT, 14=COLOR_HIGHLIGHTTEXT</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>FillRect</font> .hDC, R, <font color=#d000d0>GetSysColorBrush</font>(<font color=blue>IIf</font>(bSel, <font color=#ff6060>13</font>, <font color=#ff6060>5</font>))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Hintergrund zeichnen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SetBkMode</font> .hDC, <font color=#ff6060>1</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Hintergrund auf TRANSPARENT = 1 setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SetTextColor</font> .hDC, <font color=#d000d0>GetSysColor</font>(<font color=blue>IIf</font>(bSel, <font color=#ff6060>14</font>, <font color=#ff6060>8</font>))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Schriftfarbe setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R.Left = <font color=#d000d0>cx</font> + <font color=#ff6060>10</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' &H24 = DT_SINGLELINE + DT_LEFT + DT_VCENTER</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>DrawTextA</font> .hDC, sText, <font color=#ff6060>255</font>, R, <font color=#ff6060>&H24</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Text schreiben</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><font color=#00a000>' BitMap: Handle holen und zeichnen,</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhBmp = <font color=#d000d0>SendMessageA</font>(.hwndItem, <font color=#d000d0>LB_GETITEMDATA</font>, .Nr, <font color=blue>ByVal</font> <font color=#ff6060>0</font>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>DrawState</font> .hDC, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, mhBmp, <font color=#ff6060>0</font>, <font color=#ff6060>3</font>, R.Top + <font color=#ff6060>4</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>&H4</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' &H4 = DST_BITMAP</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Case</font> <font color=#ff6060>&H2</font> <font color=#00a000>&nbsp;' WM_DESTROY</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>For</font> i = <font color=#ff6060>0</font> <font color=blue>To</font> <font color=#5050f0>CLng</font>(<font color=#d000d0>SendMessageA</font>(mhLB, <font color=#d000d0>LB_GETCOUNT</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>)) - <font color=#ff6060>1</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhBmp = <font color=#d000d0>SendMessageA</font>(mhLB, <font color=#d000d0>LB_GETITEMDATA</font>, i, <font color=blue>ByVal</font> <font color=#ff6060>0</font>)&nbsp;&nbsp; <font color=#00a000>&nbsp;' BitMap-Handle holen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>DeleteObject</font> mhBmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' BitMap-Handle l&ouml;schen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Next</font> i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#d000d0>SetWindowLongA</font> hWnd, <font color=#d000d0>GWL_WNDPROC</font>, mlpOldProc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' InputBox unhooken</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End Select</font><br>&nbsp;&nbsp;<font color=blue>End With</font><br>&nbsp;&nbsp;WindowProc = <font color=#d000d0>CallWindowProcA</font>(mlpOldProc, hWnd, uMsg, wParam, <font color=blue>ByVal</font> lParam)<font color=#00a000>&nbsp;' Andere Messages weiterleiten</font><br><br><strong><font color=blue>End Function</font></strong><br><br><font color=#00a000>' #####################################################################</font><br><strong><font color=blue>Sub</font> AufrufListboxCEF()</strong><br>&nbsp;&nbsp;<font color=blue>MsgBox</font> ListboxEx(&quot;<font color=red>Bitte w&auml;hle ein Land aus!</font>&quot;, &quot;<font color=red>Land ausw&auml;hlen</font>&quot;, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;<font color=red>D&auml;nemark,Deutschland,England,Island,Italien,Niederlande,Norwegen,Portugal,Schweden</font>&quot;, <font color=#ff6060>2</font>)<br><strong><font color=blue>End Sub</font></strong></div></div><div style='line-height: 5px;'><br></div></div></div><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ComboBoxEx32 - externe Combobox mit Bilder]]></title>
			<link>https://www.clever-excel-forum.de/Thread-ComboBoxEx32-externe-Combobox-mit-Bilder</link>
			<pubDate>Sat, 22 Mar 2025 12:00:54 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=18350">volti</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-ComboBoxEx32-externe-Combobox-mit-Bilder</guid>
			<description><![CDATA[Liebe Leserin, lieber Leser,<br /><br />bei der Auswahl eines Eintrages aus einer ComboBox wäre manchmal ein zusätzliches Entscheidungskriterium in Form eines erklärendes Bildes schön.<br /><br />Zur Realisierung so eines Vorhabens gibt es ja u.a. die Klasse ComboboxEx32.<br /><br />Hier mal ein Beispiel, wie man so eine ComboBoxEx32 z.B. in ein Fenster (hier die Inputbox) einbauen kann.<br /><br />Im hier gezeigten Code wird die gesamte Inputbox "gekapert", um die gemachte Selektion zurückzugeben.<br />Die Bilder werden aus einem Verzeichnis geladen.<br /><br />In der anliegenden Datei sind noch zwei etwas abweichende Varianten enthalten. Ein Beispiel zeigt, wie man die Bilder auch im Excelblatt vorhalten kann.<br /><br />Letztendlich können hier aber nicht alle möglichen Variationen gezeigt werden....<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55157" target="_blank" title="22.03.2025, 13:54">Inputbox_ComboboxEx32.png</a> (Größe: 11,42 KB / Downloads: 48)
<!-- end: postbit_attachments_attachment --><br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55158" target="_blank" title="22.03.2025, 13:55">Inputbox_ComboBoxEx32_CEF.xlsb</a> (Größe: 99,22 KB / Downloads: 5)
<!-- end: postbit_attachments_attachment --><br /><br /><!--- erstellt am 22.03.2025 12:57:27 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus125727' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA125727' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=#00a000>' InputBox-Hooking, Elemente aus String, nur Bitmaps aus Dateien</font><br><font color=blue>Option Explicit</font><br><br><font color=blue>Private Const</font> <font color=#d000d0>ciMaxItems</font> <font color=blue>As Long</font> = <font color=#ff6060>15</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Maximal anzuzeigende Items/Zeilen</font><br><br><font color=#00a000>' Timer-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetTimer</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> uElapse <font color=blue>As Long</font>, <font color=blue>ByVal</font> lpTimerFunc <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>KillTimer</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><br><font color=#00a000>' Window-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetActiveWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateWindowExA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dwExStyle <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> lpClassName <font color=blue>As String</font>, <font color=blue>ByVal</font> lpWindowName <font color=blue>As String</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dwStyle <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> X <font color=blue>As Long</font>, <font color=blue>ByVal</font> Y <font color=blue>As Long</font>, <font color=blue>ByVal</font> nWidth <font color=blue>As Long</font>, <font color=blue>ByVal</font> nHeight <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWndParent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hMenu <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hInstance <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpParam <font color=blue>As Any</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowPos</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hWndInsertAfter <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> X <font color=blue>As Long</font>, <font color=blue>ByVal</font> Y <font color=blue>As Long</font>, <font color=blue>ByVal</font> cx <font color=blue>As Long</font>, <font color=blue>ByVal</font> cy <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CallWindowProcA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> lpPrevWndFunc <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> Msg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#If</font> <font color=blue><b>Win64</b></font> <font color=blue>Then</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>SetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#Else</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#End If</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetDlgItem</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hDlg <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDDlgItem <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowTextA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpString <font color=blue>As String</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SendMessageA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> wMsg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, lParam <font color=blue>As Any</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ShowWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nCmdShow <font color=blue>As Long</font>) <font color=blue>As Long</font><br><br><font color=#00a000>' ComboBoxEx- und ImageList-Funktionen</font><br><font color=blue>Private Type COMBOBOXEXITEM</font><br>&nbsp;&nbsp; mask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As LongPtr</font><br>&nbsp;&nbsp; iItem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; pszText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As String</font><br>&nbsp;&nbsp; cchTextMax&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp; iImage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp; iSelectedImage <font color=blue>As Long</font><br>&nbsp;&nbsp; iOverlay&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp; iIndent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; lParam&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As LongPtr</font><br><font color=blue>End Type</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>InitCommonControlsEx</font> <font color=blue>Lib</font> &quot;<font color=red>COMCTL32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpInitCtrls <font color=blue>As INITCOMMONCONTROLS_STRUCT</font>) <font color=blue>As Long</font><br><br><font color=blue>Private Type INITCOMMONCONTROLS_STRUCT</font><br>&nbsp;&nbsp;dwSize <font color=blue>As Long</font><br>&nbsp;&nbsp;dwICC <font color=blue>As Long</font><br><font color=blue>End Type</font><br><font color=blue>Dim</font> CCInit <font color=blue>As INITCOMMONCONTROLS_STRUCT</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ImageList_Create</font> <font color=blue>Lib</font> &quot;<font color=red>COMCTL32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> MinCx <font color=blue>As Long</font>, <font color=blue>ByVal</font> MinCy <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> flags <font color=blue>As Long</font>, <font color=blue>ByVal</font> cInitial <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> cGrow <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ImageList_Add</font> <font color=blue>Lib</font> &quot;<font color=red>COMCTL32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> himl <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hbmImage <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hbmMask <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ImageList_Destroy</font> <font color=blue>Lib</font> &quot;<font color=red>COMCTL32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> himl <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>LoadImageA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hInst <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpsz <font color=blue>As String</font>, <font color=blue>ByVal</font> un1 <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> n1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> n2 <font color=blue>As Long</font>, <font color=blue>ByVal</font> un2 <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DeleteObject</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; (<font color=blue>ByVal</font> hObject <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><font color=blue>Dim</font> mhImgList <font color=blue>As LongPtr</font>, mhDlg <font color=blue>As LongPtr</font>, mlpOldProc&nbsp;&nbsp;<font color=blue>As LongPtr</font><br><font color=blue>Dim</font> mhWndEdit <font color=blue>As LongPtr</font>, mhCBE <font color=blue>As LongPtr</font>, mhTimer&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As LongPtr</font><br><font color=blue>Dim</font> miDefault <font color=blue>As String</font>, msPfad <font color=blue>As String</font>, msItems() <font color=blue>As String</font><br><br><strong><font color=blue>Private Function</font> InputBoxEx(sMsgTxt <font color=blue>As String</font>, sCaption <font color=blue>As String</font>, _</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sCBElemente <font color=blue>As String</font>, <font color=blue>Optional</font> iDefault <font color=blue>As Long</font>) <font color=blue>As Variant</font><br><font color=#00a000>' Anzeigen einer Inputbox als ComboboxEx mit Bildern</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;msPfad = ThisWorkbook.Path & &quot;<font color=red>&bsol;Bitmaps&bsol;#.bmp</font>&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Bilderpfad &lt;&lt;&lt; gf. anpassen &gt;&gt;&gt;</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;msItems = <font color=#5050f0>Split</font>(&quot;<font color=red>,</font>&quot; & sCBElemente, &quot;<font color=red>,</font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Range mit Elementen global</font><br>&nbsp;&nbsp;miDefault = iDefault&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Default-Item global machen</font><br>&nbsp;&nbsp;mhTimer = <font color=#d000d0>SetTimer</font>(<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>10</font>, <font color=blue>AddressOf</font> ComboBoxExHookProc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer setzen</font><br>&nbsp;&nbsp;InputBoxEx = <font color=#5050f0>InputBox</font>(sMsgTxt, sCaption, &quot;<font color=red></font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' (Excel)-Inputbox starten</font><br>&nbsp;&nbsp;<font color=blue>If</font> mhImgList &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font> <font color=#d000d0>ImageList_Destroy</font> mhImgList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' ImageListe l&ouml;schen</font><br>&nbsp;&nbsp;mhImgList = <font color=#ff6060>0</font><br><strong><font color=blue>End Function</font></strong><br><br><br><strong><font color=blue>Private Sub</font> ComboBoxExHookProc()</strong><br><font color=#00a000>' Setzt die Hooking-Prozedur f&uuml;r die ComboBoxEx</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> i <font color=blue>As Integer</font>, iItemAnz <font color=blue>As Long</font>, sArr() <font color=blue>As String</font>, sBmpDatei <font color=blue>As String</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> hBmp <font color=blue>As LongPtr</font>, iImage <font color=blue>As Long</font>, cx <font color=blue>As Long</font>, cy <font color=blue>As Long</font>, iHoehe <font color=blue>As Long</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> cbI&nbsp;&nbsp;<font color=blue>As COMBOBOXEXITEM</font><br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>WS_CBE_STYLE</font> <font color=blue>As Long</font> = <font color=#ff6060>&H50010003</font>&nbsp;&nbsp; <font color=#00a000>&nbsp;' WS_CHILD + WS_VISIBLE + CBS_DROPDOWNLIST + WS_TABSTOP</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<font color=#d000d0>KillTimer</font> <font color=#ff6060>0&</font>, mhTimer: mhTimer = <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer l&ouml;schen</font><br>&nbsp;<br>&nbsp;&nbsp;mhDlg = <font color=#d000d0>GetActiveWindow</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Handle der Inputbox</font><br>&nbsp;&nbsp;mhWndEdit = <font color=#d000d0>GetDlgItem</font>(mhDlg, <font color=#ff6060>4900</font>) <font color=#00a000>&nbsp;' 4900 = Edit_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Handle der Editbox</font><br>&nbsp;&nbsp;<font color=#d000d0>ShowWindow</font> mhWndEdit, <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Editbox ausblenden</font><br><br>&nbsp;&nbsp;<font color=blue>With</font> CCInit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' ComboboxEx-Klasse zuweisen</font><br>&nbsp;&nbsp;&nbsp;&nbsp; .dwSize = <font color=#5050f0>LenB</font>(CCInit)<br>&nbsp;&nbsp;&nbsp;&nbsp; .dwICC = <font color=#ff6060>&H200</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' &H200 = ICC_COMBOEX_CLASSES</font><br>&nbsp;&nbsp;<font color=blue>End With</font><br>&nbsp;&nbsp;<font color=blue>If</font> <font color=#d000d0>InitCommonControlsEx</font>(CCInit) = <font color=#ff6060>0</font> <font color=blue>Then Exit Sub</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' ComboBoxEx registrieren</font><br><br>&nbsp;&nbsp;iItemAnz = <font color=#5050f0>UBound</font>(msItems)<br>&nbsp;&nbsp;<font color=blue>If</font> iItemAnz &gt; <font color=#d000d0>ciMaxItems</font> <font color=blue>Then</font> iItemAnz = <font color=#d000d0>ciMaxItems</font><br><br><font color=#00a000>' Eine ComboboxEx erstellen, mit Elementen f&uuml;llen&nbsp;&nbsp;und anzeigen</font><br><br><font color=#00a000>' &lt;&lt;&lt;&lt; Hier die BitMap-Gr&ouml;ße der Bilder und H&ouml;he der CB32 einstellen &gt;&gt;&gt;&gt;</font><br>&nbsp;&nbsp;cx = <font color=#ff6060>18</font>: cy = <font color=#ff6060>12</font>: iHoehe = iItemAnz <font color=blue>*</font> ((cy + <font color=#ff6060>2</font>) <font color=blue>*</font> <font color=#ff6060>2</font> + <font color=#ff6060>1</font>)<br>&nbsp;&nbsp;<br><font color=#00a000>' &lt;&lt;&lt;&lt; Hier die Position und Gr&ouml;ße der ComboBoxEx einstellen &gt;&gt;&gt;&gt;</font><br>&nbsp;&nbsp;mhCBE = <font color=#d000d0>CreateWindowExA</font>(<font color=#ff6060>0&</font>, &quot;<font color=red>ComboboxEx32</font>&quot;, &quot;<font color=red></font>&quot;, <font color=#d000d0>WS_CBE_STYLE</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#ff6060>14</font>, <font color=#ff6060>105</font>, <font color=#ff6060>460</font>, iHoehe, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhDlg, <font color=#ff6060>0</font>, Application.HinstancePtr, <font color=#ff6060>0&</font>)<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;mhImgList = <font color=#d000d0>ImageList_Create</font>(cx, cy, <font color=#ff6060>&H0</font>, <font color=#ff6060>1</font>, <font color=#ff6060>0</font>)<font color=#00a000>&nbsp;' &H0 = ILC_COLOR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Image-Liste erstellen</font><br>&nbsp;&nbsp;<font color=#d000d0>SendMessageA</font> mhCBE, <font color=#ff6060>&H402</font>, <font color=#ff6060>0</font>, <font color=blue>ByVal</font> (mhImgList) <font color=#00a000>&nbsp;' &H402 = CBEM_SETIMAGELIST ' Image-Liste setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><font color=#00a000>' Elemente einf&uuml;gen</font><br>&nbsp;&nbsp;<font color=blue>On Error Resume Next</font><br>&nbsp;&nbsp;<font color=blue>For</font> i = <font color=#ff6060>1</font> <font color=blue>To</font> <font color=#5050f0>UBound</font>(msItems)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sBmpDatei = <font color=#5050f0>Replace</font>(msPfad, &quot;<font color=red>#</font>&quot;, <font color=#5050f0>Left&#36;</font>(msItems(i), <font color=#ff6060>3</font>))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' BMP-Datei ermitteln</font><br><font color=#00a000>' Bitmap laden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMAGE_BITMAP = &H0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&H10 = LR_LOADFROMFILE</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hBmp = <font color=#d000d0>LoadImageA</font>(<font color=#ff6060>0</font>, <font color=blue>ByVal</font> sBmpDatei, <font color=#ff6060>&H0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>&H10</font>)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> hBmp &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.mask = <font color=#ff6060>&H7</font>&nbsp;&nbsp;<font color=#00a000>&nbsp;' CBEIF_TEXT + CBEIF_IMAGE + CBEIF_SELECTEDIMAGE</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iImage = <font color=#d000d0>ImageList_Add</font>(mhImgList, hBmp, <font color=#ff6060>0</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Bitmap in Image-Liste</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>If</font> msPfad & &quot;<font color=red> </font>&quot; <font color=blue>Like</font> &quot;<font color=red>*:*</font>&quot; <font color=blue>Then</font> <font color=#d000d0>DeleteObject</font> hBmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Bitmap ggf. wieder l&ouml;schen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Else</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.mask = <font color=#ff6060>&H1</font>&nbsp;&nbsp;<font color=#00a000>&nbsp;' CBEIF_TEXT</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iImage = <font color=#ff6060>0</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End If</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.pszText = msItems(i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Text &uuml;bernehmen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.cchTextMax = <font color=#5050f0>Len</font>(msItems(i))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.iImage = iImage<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.iSelectedImage = iImage<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.iItem = <font color=#ff6060>-1</font><br><font color=#00a000>' Item einf&uuml;gen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &H401 = WM_USER + 1 = CBEM_INSERTITEM</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Call</font> <font color=#d000d0>SendMessageA</font>(mhCBE, <font color=#ff6060>&H401</font>, <font color=#ff6060>0</font>, cbI)<br><br>&nbsp;&nbsp;<font color=blue>Next</font> i<br>&nbsp;&nbsp;<font color=blue>On Error GoTo</font> <font color=#ff6060>0</font><br>&nbsp;&nbsp;miDefault = <font color=#5050f0>IIf</font>(miDefault &lt; <font color=#ff6060>1</font> <font color=blue>Or</font> miDefault &gt;= iItemAnz, <font color=#ff6060>1</font>, miDefault)&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Defaultselektion korrigieren</font><br>&nbsp;&nbsp;<font color=#d000d0>SendMessageA</font> mhCBE, <font color=#ff6060>&H14E</font>, miDefault - <font color=#ff6060>1</font>, <font color=blue>ByVal</font> <font color=#ff6060>0</font><font color=#00a000>&nbsp;' &H14E = CB_SETCURSEL&nbsp;&nbsp;' Item selektieren</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowTextA</font> mhWndEdit, msItems(miDefault)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Editbox damit updaten</font><br><br><font color=#00a000>' InputBox hooken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-4 = GWL_WNDPROC</font><br>&nbsp;&nbsp;mlpOldProc = <font color=#d000d0>SetWindowLongA</font>(mhDlg, <font color=#ff6060>-4</font>, <font color=blue>AddressOf</font> WindowProc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Alte Prozeduradresse retten</font><br><strong><font color=blue>End Sub</font></strong><br><br><strong><font color=blue>Private Function</font> WindowProc(<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> uMsg <font color=blue>As Long</font>, _</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;<br><font color=#00a000>' Hier die Message WM_COMMAND (&H111) f&uuml;r den OK-Button (ID=1) rausfischen und die Editbox updaten</font><br>&nbsp;&nbsp;<font color=blue>If</font> uMsg = <font color=#ff6060>&H111</font> <font color=blue>And</font> wParam = <font color=#ff6060>1</font> <font color=blue>Then</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' &H14E = CB_SETCURSEL</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=#d000d0>SetWindowTextA</font> mhWndEdit, msItems(<font color=blue>CLng</font>(<font color=#d000d0>SendMessageA</font>(mhCBE, <font color=#ff6060>&H147</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>)) + <font color=#ff6060>1</font>)<br>&nbsp;&nbsp;<font color=blue>End If</font><br>&nbsp;&nbsp;WindowProc = <font color=#d000d0>CallWindowProcA</font>(mlpOldProc, hwnd, uMsg, wParam, <font color=blue>ByVal</font> lParam)<font color=#00a000>&nbsp;' Andere Messages weiterleiten</font><br><strong><font color=blue>End Function</font></strong><br><br><br><font color=#00a000>' #####################################################################</font><br><strong><font color=blue>Sub</font> AufruftestComboboxEx2()</strong><br>&nbsp;&nbsp;<font color=blue>MsgBox</font> InputBoxEx(&quot;<font color=red>Bitte w&auml;hle ein Land aus!</font>&quot;, &quot;<font color=red>Land ausw&auml;hlen</font>&quot;, &quot;<font color=red>Deutschland,England,Frankreich,Island,Italien,Kanada,Norwegen,Portugal,Spanien</font>&quot;, 3)<br><strong><font color=blue>End Sub</font></strong></div></div><div style='line-height: 5px;'><br></div></div></div><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div>]]></description>
			<content:encoded><![CDATA[Liebe Leserin, lieber Leser,<br /><br />bei der Auswahl eines Eintrages aus einer ComboBox wäre manchmal ein zusätzliches Entscheidungskriterium in Form eines erklärendes Bildes schön.<br /><br />Zur Realisierung so eines Vorhabens gibt es ja u.a. die Klasse ComboboxEx32.<br /><br />Hier mal ein Beispiel, wie man so eine ComboBoxEx32 z.B. in ein Fenster (hier die Inputbox) einbauen kann.<br /><br />Im hier gezeigten Code wird die gesamte Inputbox "gekapert", um die gemachte Selektion zurückzugeben.<br />Die Bilder werden aus einem Verzeichnis geladen.<br /><br />In der anliegenden Datei sind noch zwei etwas abweichende Varianten enthalten. Ein Beispiel zeigt, wie man die Bilder auch im Excelblatt vorhalten kann.<br /><br />Letztendlich können hier aber nicht alle möglichen Variationen gezeigt werden....<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55157" target="_blank" title="22.03.2025, 13:54">Inputbox_ComboboxEx32.png</a> (Größe: 11,42 KB / Downloads: 48)
<!-- end: postbit_attachments_attachment --><br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55158" target="_blank" title="22.03.2025, 13:55">Inputbox_ComboBoxEx32_CEF.xlsb</a> (Größe: 99,22 KB / Downloads: 5)
<!-- end: postbit_attachments_attachment --><br /><br /><!--- erstellt am 22.03.2025 12:57:27 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus125727' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA125727' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=#00a000>' InputBox-Hooking, Elemente aus String, nur Bitmaps aus Dateien</font><br><font color=blue>Option Explicit</font><br><br><font color=blue>Private Const</font> <font color=#d000d0>ciMaxItems</font> <font color=blue>As Long</font> = <font color=#ff6060>15</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Maximal anzuzeigende Items/Zeilen</font><br><br><font color=#00a000>' Timer-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetTimer</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> uElapse <font color=blue>As Long</font>, <font color=blue>ByVal</font> lpTimerFunc <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>KillTimer</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><br><font color=#00a000>' Window-Funktionen</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetActiveWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CreateWindowExA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dwExStyle <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> lpClassName <font color=blue>As String</font>, <font color=blue>ByVal</font> lpWindowName <font color=blue>As String</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dwStyle <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> X <font color=blue>As Long</font>, <font color=blue>ByVal</font> Y <font color=blue>As Long</font>, <font color=blue>ByVal</font> nWidth <font color=blue>As Long</font>, <font color=blue>ByVal</font> nHeight <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWndParent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hMenu <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hInstance <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpParam <font color=blue>As Any</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowPos</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hWndInsertAfter <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> X <font color=blue>As Long</font>, <font color=blue>ByVal</font> Y <font color=blue>As Long</font>, <font color=blue>ByVal</font> cx <font color=blue>As Long</font>, <font color=blue>ByVal</font> cy <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wFlags <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>CallWindowProcA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> lpPrevWndFunc <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> Msg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#If</font> <font color=blue><b>Win64</b></font> <font color=blue>Then</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; <font color=blue>Alias</font> &quot;<font color=red>SetWindowLongPtrA</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#Else</font><br>&nbsp;<font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowLongA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIndex <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> dwNewLong <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>#End If</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetDlgItem</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hDlg <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDDlgItem <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetWindowTextA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpString <font color=blue>As String</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SendMessageA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> wMsg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, lParam <font color=blue>As Any</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ShowWindow</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nCmdShow <font color=blue>As Long</font>) <font color=blue>As Long</font><br><br><font color=#00a000>' ComboBoxEx- und ImageList-Funktionen</font><br><font color=blue>Private Type COMBOBOXEXITEM</font><br>&nbsp;&nbsp; mask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As LongPtr</font><br>&nbsp;&nbsp; iItem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; pszText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As String</font><br>&nbsp;&nbsp; cchTextMax&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp; iImage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp; iSelectedImage <font color=blue>As Long</font><br>&nbsp;&nbsp; iOverlay&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp; iIndent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp; lParam&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As LongPtr</font><br><font color=blue>End Type</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>InitCommonControlsEx</font> <font color=blue>Lib</font> &quot;<font color=red>COMCTL32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpInitCtrls <font color=blue>As INITCOMMONCONTROLS_STRUCT</font>) <font color=blue>As Long</font><br><br><font color=blue>Private Type INITCOMMONCONTROLS_STRUCT</font><br>&nbsp;&nbsp;dwSize <font color=blue>As Long</font><br>&nbsp;&nbsp;dwICC <font color=blue>As Long</font><br><font color=blue>End Type</font><br><font color=blue>Dim</font> CCInit <font color=blue>As INITCOMMONCONTROLS_STRUCT</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ImageList_Create</font> <font color=blue>Lib</font> &quot;<font color=red>COMCTL32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> MinCx <font color=blue>As Long</font>, <font color=blue>ByVal</font> MinCy <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> flags <font color=blue>As Long</font>, <font color=blue>ByVal</font> cInitial <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> cGrow <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ImageList_Add</font> <font color=blue>Lib</font> &quot;<font color=red>COMCTL32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> himl <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> hbmImage <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hbmMask <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>ImageList_Destroy</font> <font color=blue>Lib</font> &quot;<font color=red>COMCTL32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> himl <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>LoadImageA</font> <font color=blue>Lib</font> &quot;<font color=red>user32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hInst <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpsz <font color=blue>As String</font>, <font color=blue>ByVal</font> un1 <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> n1 <font color=blue>As Long</font>, <font color=blue>ByVal</font> n2 <font color=blue>As Long</font>, <font color=blue>ByVal</font> un2 <font color=blue>As Long</font>) <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>DeleteObject</font> <font color=blue>Lib</font> &quot;<font color=red>gdi32</font>&quot; (<font color=blue>ByVal</font> hObject <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><font color=blue>Dim</font> mhImgList <font color=blue>As LongPtr</font>, mhDlg <font color=blue>As LongPtr</font>, mlpOldProc&nbsp;&nbsp;<font color=blue>As LongPtr</font><br><font color=blue>Dim</font> mhWndEdit <font color=blue>As LongPtr</font>, mhCBE <font color=blue>As LongPtr</font>, mhTimer&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>As LongPtr</font><br><font color=blue>Dim</font> miDefault <font color=blue>As String</font>, msPfad <font color=blue>As String</font>, msItems() <font color=blue>As String</font><br><br><strong><font color=blue>Private Function</font> InputBoxEx(sMsgTxt <font color=blue>As String</font>, sCaption <font color=blue>As String</font>, _</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sCBElemente <font color=blue>As String</font>, <font color=blue>Optional</font> iDefault <font color=blue>As Long</font>) <font color=blue>As Variant</font><br><font color=#00a000>' Anzeigen einer Inputbox als ComboboxEx mit Bildern</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;msPfad = ThisWorkbook.Path & &quot;<font color=red>&bsol;Bitmaps&bsol;#.bmp</font>&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Bilderpfad &lt;&lt;&lt; gf. anpassen &gt;&gt;&gt;</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;msItems = <font color=#5050f0>Split</font>(&quot;<font color=red>,</font>&quot; & sCBElemente, &quot;<font color=red>,</font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Range mit Elementen global</font><br>&nbsp;&nbsp;miDefault = iDefault&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Default-Item global machen</font><br>&nbsp;&nbsp;mhTimer = <font color=#d000d0>SetTimer</font>(<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>10</font>, <font color=blue>AddressOf</font> ComboBoxExHookProc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer setzen</font><br>&nbsp;&nbsp;InputBoxEx = <font color=#5050f0>InputBox</font>(sMsgTxt, sCaption, &quot;<font color=red></font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' (Excel)-Inputbox starten</font><br>&nbsp;&nbsp;<font color=blue>If</font> mhImgList &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font> <font color=#d000d0>ImageList_Destroy</font> mhImgList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' ImageListe l&ouml;schen</font><br>&nbsp;&nbsp;mhImgList = <font color=#ff6060>0</font><br><strong><font color=blue>End Function</font></strong><br><br><br><strong><font color=blue>Private Sub</font> ComboBoxExHookProc()</strong><br><font color=#00a000>' Setzt die Hooking-Prozedur f&uuml;r die ComboBoxEx</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> i <font color=blue>As Integer</font>, iItemAnz <font color=blue>As Long</font>, sArr() <font color=blue>As String</font>, sBmpDatei <font color=blue>As String</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> hBmp <font color=blue>As LongPtr</font>, iImage <font color=blue>As Long</font>, cx <font color=blue>As Long</font>, cy <font color=blue>As Long</font>, iHoehe <font color=blue>As Long</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> cbI&nbsp;&nbsp;<font color=blue>As COMBOBOXEXITEM</font><br>&nbsp;&nbsp;<font color=blue>Const</font> <font color=#d000d0>WS_CBE_STYLE</font> <font color=blue>As Long</font> = <font color=#ff6060>&H50010003</font>&nbsp;&nbsp; <font color=#00a000>&nbsp;' WS_CHILD + WS_VISIBLE + CBS_DROPDOWNLIST + WS_TABSTOP</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<font color=#d000d0>KillTimer</font> <font color=#ff6060>0&</font>, mhTimer: mhTimer = <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer l&ouml;schen</font><br>&nbsp;<br>&nbsp;&nbsp;mhDlg = <font color=#d000d0>GetActiveWindow</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Handle der Inputbox</font><br>&nbsp;&nbsp;mhWndEdit = <font color=#d000d0>GetDlgItem</font>(mhDlg, <font color=#ff6060>4900</font>) <font color=#00a000>&nbsp;' 4900 = Edit_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Handle der Editbox</font><br>&nbsp;&nbsp;<font color=#d000d0>ShowWindow</font> mhWndEdit, <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Editbox ausblenden</font><br><br>&nbsp;&nbsp;<font color=blue>With</font> CCInit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' ComboboxEx-Klasse zuweisen</font><br>&nbsp;&nbsp;&nbsp;&nbsp; .dwSize = <font color=#5050f0>LenB</font>(CCInit)<br>&nbsp;&nbsp;&nbsp;&nbsp; .dwICC = <font color=#ff6060>&H200</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' &H200 = ICC_COMBOEX_CLASSES</font><br>&nbsp;&nbsp;<font color=blue>End With</font><br>&nbsp;&nbsp;<font color=blue>If</font> <font color=#d000d0>InitCommonControlsEx</font>(CCInit) = <font color=#ff6060>0</font> <font color=blue>Then Exit Sub</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' ComboBoxEx registrieren</font><br><br>&nbsp;&nbsp;iItemAnz = <font color=#5050f0>UBound</font>(msItems)<br>&nbsp;&nbsp;<font color=blue>If</font> iItemAnz &gt; <font color=#d000d0>ciMaxItems</font> <font color=blue>Then</font> iItemAnz = <font color=#d000d0>ciMaxItems</font><br><br><font color=#00a000>' Eine ComboboxEx erstellen, mit Elementen f&uuml;llen&nbsp;&nbsp;und anzeigen</font><br><br><font color=#00a000>' &lt;&lt;&lt;&lt; Hier die BitMap-Gr&ouml;ße der Bilder und H&ouml;he der CB32 einstellen &gt;&gt;&gt;&gt;</font><br>&nbsp;&nbsp;cx = <font color=#ff6060>18</font>: cy = <font color=#ff6060>12</font>: iHoehe = iItemAnz <font color=blue>*</font> ((cy + <font color=#ff6060>2</font>) <font color=blue>*</font> <font color=#ff6060>2</font> + <font color=#ff6060>1</font>)<br>&nbsp;&nbsp;<br><font color=#00a000>' &lt;&lt;&lt;&lt; Hier die Position und Gr&ouml;ße der ComboBoxEx einstellen &gt;&gt;&gt;&gt;</font><br>&nbsp;&nbsp;mhCBE = <font color=#d000d0>CreateWindowExA</font>(<font color=#ff6060>0&</font>, &quot;<font color=red>ComboboxEx32</font>&quot;, &quot;<font color=red></font>&quot;, <font color=#d000d0>WS_CBE_STYLE</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#ff6060>14</font>, <font color=#ff6060>105</font>, <font color=#ff6060>460</font>, iHoehe, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhDlg, <font color=#ff6060>0</font>, Application.HinstancePtr, <font color=#ff6060>0&</font>)<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;mhImgList = <font color=#d000d0>ImageList_Create</font>(cx, cy, <font color=#ff6060>&H0</font>, <font color=#ff6060>1</font>, <font color=#ff6060>0</font>)<font color=#00a000>&nbsp;' &H0 = ILC_COLOR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Image-Liste erstellen</font><br>&nbsp;&nbsp;<font color=#d000d0>SendMessageA</font> mhCBE, <font color=#ff6060>&H402</font>, <font color=#ff6060>0</font>, <font color=blue>ByVal</font> (mhImgList) <font color=#00a000>&nbsp;' &H402 = CBEM_SETIMAGELIST ' Image-Liste setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><font color=#00a000>' Elemente einf&uuml;gen</font><br>&nbsp;&nbsp;<font color=blue>On Error Resume Next</font><br>&nbsp;&nbsp;<font color=blue>For</font> i = <font color=#ff6060>1</font> <font color=blue>To</font> <font color=#5050f0>UBound</font>(msItems)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sBmpDatei = <font color=#5050f0>Replace</font>(msPfad, &quot;<font color=red>#</font>&quot;, <font color=#5050f0>Left&#36;</font>(msItems(i), <font color=#ff6060>3</font>))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' BMP-Datei ermitteln</font><br><font color=#00a000>' Bitmap laden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMAGE_BITMAP = &H0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&H10 = LR_LOADFROMFILE</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hBmp = <font color=#d000d0>LoadImageA</font>(<font color=#ff6060>0</font>, <font color=blue>ByVal</font> sBmpDatei, <font color=#ff6060>&H0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>&H10</font>)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> hBmp &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.mask = <font color=#ff6060>&H7</font>&nbsp;&nbsp;<font color=#00a000>&nbsp;' CBEIF_TEXT + CBEIF_IMAGE + CBEIF_SELECTEDIMAGE</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iImage = <font color=#d000d0>ImageList_Add</font>(mhImgList, hBmp, <font color=#ff6060>0</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Bitmap in Image-Liste</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>If</font> msPfad & &quot;<font color=red> </font>&quot; <font color=blue>Like</font> &quot;<font color=red>*:*</font>&quot; <font color=blue>Then</font> <font color=#d000d0>DeleteObject</font> hBmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Bitmap ggf. wieder l&ouml;schen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Else</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.mask = <font color=#ff6060>&H1</font>&nbsp;&nbsp;<font color=#00a000>&nbsp;' CBEIF_TEXT</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iImage = <font color=#ff6060>0</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End If</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.pszText = msItems(i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Text &uuml;bernehmen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.cchTextMax = <font color=#5050f0>Len</font>(msItems(i))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.iImage = iImage<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.iSelectedImage = iImage<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cbI.iItem = <font color=#ff6060>-1</font><br><font color=#00a000>' Item einf&uuml;gen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &H401 = WM_USER + 1 = CBEM_INSERTITEM</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Call</font> <font color=#d000d0>SendMessageA</font>(mhCBE, <font color=#ff6060>&H401</font>, <font color=#ff6060>0</font>, cbI)<br><br>&nbsp;&nbsp;<font color=blue>Next</font> i<br>&nbsp;&nbsp;<font color=blue>On Error GoTo</font> <font color=#ff6060>0</font><br>&nbsp;&nbsp;miDefault = <font color=#5050f0>IIf</font>(miDefault &lt; <font color=#ff6060>1</font> <font color=blue>Or</font> miDefault &gt;= iItemAnz, <font color=#ff6060>1</font>, miDefault)&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Defaultselektion korrigieren</font><br>&nbsp;&nbsp;<font color=#d000d0>SendMessageA</font> mhCBE, <font color=#ff6060>&H14E</font>, miDefault - <font color=#ff6060>1</font>, <font color=blue>ByVal</font> <font color=#ff6060>0</font><font color=#00a000>&nbsp;' &H14E = CB_SETCURSEL&nbsp;&nbsp;' Item selektieren</font><br>&nbsp;&nbsp;<font color=#d000d0>SetWindowTextA</font> mhWndEdit, msItems(miDefault)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Editbox damit updaten</font><br><br><font color=#00a000>' InputBox hooken&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-4 = GWL_WNDPROC</font><br>&nbsp;&nbsp;mlpOldProc = <font color=#d000d0>SetWindowLongA</font>(mhDlg, <font color=#ff6060>-4</font>, <font color=blue>AddressOf</font> WindowProc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Alte Prozeduradresse retten</font><br><strong><font color=blue>End Sub</font></strong><br><br><strong><font color=blue>Private Function</font> WindowProc(<font color=blue>ByVal</font> hwnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> uMsg <font color=blue>As Long</font>, _</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;<br><font color=#00a000>' Hier die Message WM_COMMAND (&H111) f&uuml;r den OK-Button (ID=1) rausfischen und die Editbox updaten</font><br>&nbsp;&nbsp;<font color=blue>If</font> uMsg = <font color=#ff6060>&H111</font> <font color=blue>And</font> wParam = <font color=#ff6060>1</font> <font color=blue>Then</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' &H14E = CB_SETCURSEL</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=#d000d0>SetWindowTextA</font> mhWndEdit, msItems(<font color=blue>CLng</font>(<font color=#d000d0>SendMessageA</font>(mhCBE, <font color=#ff6060>&H147</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>)) + <font color=#ff6060>1</font>)<br>&nbsp;&nbsp;<font color=blue>End If</font><br>&nbsp;&nbsp;WindowProc = <font color=#d000d0>CallWindowProcA</font>(mlpOldProc, hwnd, uMsg, wParam, <font color=blue>ByVal</font> lParam)<font color=#00a000>&nbsp;' Andere Messages weiterleiten</font><br><strong><font color=blue>End Function</font></strong><br><br><br><font color=#00a000>' #####################################################################</font><br><strong><font color=blue>Sub</font> AufruftestComboboxEx2()</strong><br>&nbsp;&nbsp;<font color=blue>MsgBox</font> InputBoxEx(&quot;<font color=red>Bitte w&auml;hle ein Land aus!</font>&quot;, &quot;<font color=red>Land ausw&auml;hlen</font>&quot;, &quot;<font color=red>Deutschland,England,Frankreich,Island,Italien,Kanada,Norwegen,Portugal,Spanien</font>&quot;, 3)<br><strong><font color=blue>End Sub</font></strong></div></div><div style='line-height: 5px;'><br></div></div></div><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Projekt Coole MessageBox]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Projekt-Coole-MessageBox</link>
			<pubDate>Mon, 16 Sep 2024 14:00:08 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=18350">volti</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Projekt-Coole-MessageBox</guid>
			<description><![CDATA[Liebe Leserin, lieber Leser,<br /><br />die Messagebox ist gedacht für das schnelle temporäre Anzeigen von Informationen oder dem einfachen Abfragen einer Entscheidung zu einem Sachverhalt.<br /><br />Oft wird jedoch in Foren gefragt, ob man denn die Schriftart größer machen könnte oder vielleicht das Icon oder die Schaltflächenbeschriftungen ändern könnte.<br /><br />Hier heißt es oft: <font color=red>Nein, das geht nicht</font>.<br /><br />Dass das alles aber <font color=#00DD00>doch geht</font>, will ich hier mit diesem Projekt <b><font color=#A000A0>Coole MsgBox</font></b> mal aufzeigen.<br /><br />Grundsätzlich kann man mit VBA die Excel-MsgBox, die API-Messagebox, die MessageBoxIndirekt oder die MsgBoxTimeOut verwenden.<br />Zu vielen Themen lassen sich ja auch schon Beiträge hier in diesem Forum finden.<br /><br />Dieser Workshop befasst sich ausschließlich mit der <u>internen</u> Excel-MsgBox und es können folgende spannende Dinge damit angestellt werden:<br /><ul><li>Nutzen des Hilfebuttons für eigene Zwecke</li><li>Bis zu vier Buttons möglich mit individuellen Buttontexten</li><li>Systemkreuzklick gibt einen eigenen Text zurück, damit sind fünf Rückgaben möglich</li><li>Individuelles Icon in der MsgBox setzbar</li><li>Schriftfarbe, Schriftgröße und Schriftart sowie fett/kursiv setzbar für das Textfeld</li><li>MsgBox-Hintergrund: Farbe, Struktur oder eigenes Bild setzbar</li><li>Transparente Msgbox: möglich, aber darauf wurde bislang verzichtet</li><li>MsgBox positionierbar und auch Größenänderung möglich, ggf. Autozentrierung auf dem Bildschirm</li><li>Alle Buttons einzeln mit Textfarbe und/oder Hintergrundfarbe versehbar</li><li>Alle Buttons einzeln verschiebbar und auch Größenänderung möglich</li><li>Timeout setzbar: Nach Timeout eigener Rückgabetext z.B. "TimeOut!"</li><li>CountDown setzbar: Nach Timeout eigener Rückgabetext z.B. "TimeOut!"</li><li>Formatierung der Titelleiste und des Rahmens</li></ul><br />Die hier vorgestellte "<b><font color=#A000A0 size=3>Coole MsgBox</font></b>" kann das alles.<br />Aber es ist viel Code und wenn man weniger benötigt wäre auch weniger Code von Vorteil.<br />Deshalb findest Du in der anliegenden Datei jede Menge Beispiele mit Code, jeweils angepasst an die gewünschten Bedürfnisse.<br />Dass man noch viel mehr machen kann und das nicht alles hier gezeigt werden kann, versteht sich von selbst.<br /><br />Klick Dich einfach mal durch die angezeigten Buttons und verwende genau den benötigten Code.<br /><br /><font color=#000080><b>Start</b></font><br />Vom User wird zunächst immer die <b>MsgBoxEx</b> aufgerufen.<br />Da der Code mit Aufruf der Excel-MsgBox nicht weiterläuft, benötigen wir hierfür einen Trick. Man kann sich z.B. in die entsprechende Prozedur <u>einhooken</u>.<br /><br />In diesem Workshop wird aber ausschließlich mit dem Timer gearbeitet, der nach wenigen mSek unsere Callback-Funktion <b>MsgBoxCallbackProc</b> aufruft.<br />Hier wird zunächst das Handle zur MsgBox ermittelt. Dann können bereits alle Elemente mit neuen Texten versehen, die MsgBox oder die Buttons verschoben werden oder ein neues Icon gesetzt werden.<br /><br />Für weitere Dinge, u.a. auch das Abfangen von Buttonklicks, Mausbewegungen usw., hooken wir uns in die Meldungsschleife der Excel-MsgBox ein und leiten alle Messages an unsere eigene Prozedur <b>WindowProc</b> um.<br /><br />So, jetzt genug der Schreiberei. Die Codes sind komplett kommentiert und geben dem interessierten User hoffentlich einen Einblick, wie es funktionieren kann. Es führen ja noch mehr Wege nach Rom.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=53285" target="_blank" title="16.09.2024, 17:32">MsgBox-Cool-Workshop-CEF.xlsb</a> (Größe: 1,39 MB / Downloads: 13)
<!-- end: postbit_attachments_attachment --><br /><br />Viel Spaß und Erfolg beim Anwenden und Tüfteln...<br /><br />PS: Fragen, Funktionsfehler und Anregungen bitte in der Rubrik <font color=#0000a0>Diskussionen zu den Beispielen</font> anbringen. Es ist noch neu und wenig getestet....<br /><br /><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div>]]></description>
			<content:encoded><![CDATA[Liebe Leserin, lieber Leser,<br /><br />die Messagebox ist gedacht für das schnelle temporäre Anzeigen von Informationen oder dem einfachen Abfragen einer Entscheidung zu einem Sachverhalt.<br /><br />Oft wird jedoch in Foren gefragt, ob man denn die Schriftart größer machen könnte oder vielleicht das Icon oder die Schaltflächenbeschriftungen ändern könnte.<br /><br />Hier heißt es oft: <font color=red>Nein, das geht nicht</font>.<br /><br />Dass das alles aber <font color=#00DD00>doch geht</font>, will ich hier mit diesem Projekt <b><font color=#A000A0>Coole MsgBox</font></b> mal aufzeigen.<br /><br />Grundsätzlich kann man mit VBA die Excel-MsgBox, die API-Messagebox, die MessageBoxIndirekt oder die MsgBoxTimeOut verwenden.<br />Zu vielen Themen lassen sich ja auch schon Beiträge hier in diesem Forum finden.<br /><br />Dieser Workshop befasst sich ausschließlich mit der <u>internen</u> Excel-MsgBox und es können folgende spannende Dinge damit angestellt werden:<br /><ul><li>Nutzen des Hilfebuttons für eigene Zwecke</li><li>Bis zu vier Buttons möglich mit individuellen Buttontexten</li><li>Systemkreuzklick gibt einen eigenen Text zurück, damit sind fünf Rückgaben möglich</li><li>Individuelles Icon in der MsgBox setzbar</li><li>Schriftfarbe, Schriftgröße und Schriftart sowie fett/kursiv setzbar für das Textfeld</li><li>MsgBox-Hintergrund: Farbe, Struktur oder eigenes Bild setzbar</li><li>Transparente Msgbox: möglich, aber darauf wurde bislang verzichtet</li><li>MsgBox positionierbar und auch Größenänderung möglich, ggf. Autozentrierung auf dem Bildschirm</li><li>Alle Buttons einzeln mit Textfarbe und/oder Hintergrundfarbe versehbar</li><li>Alle Buttons einzeln verschiebbar und auch Größenänderung möglich</li><li>Timeout setzbar: Nach Timeout eigener Rückgabetext z.B. "TimeOut!"</li><li>CountDown setzbar: Nach Timeout eigener Rückgabetext z.B. "TimeOut!"</li><li>Formatierung der Titelleiste und des Rahmens</li></ul><br />Die hier vorgestellte "<b><font color=#A000A0 size=3>Coole MsgBox</font></b>" kann das alles.<br />Aber es ist viel Code und wenn man weniger benötigt wäre auch weniger Code von Vorteil.<br />Deshalb findest Du in der anliegenden Datei jede Menge Beispiele mit Code, jeweils angepasst an die gewünschten Bedürfnisse.<br />Dass man noch viel mehr machen kann und das nicht alles hier gezeigt werden kann, versteht sich von selbst.<br /><br />Klick Dich einfach mal durch die angezeigten Buttons und verwende genau den benötigten Code.<br /><br /><font color=#000080><b>Start</b></font><br />Vom User wird zunächst immer die <b>MsgBoxEx</b> aufgerufen.<br />Da der Code mit Aufruf der Excel-MsgBox nicht weiterläuft, benötigen wir hierfür einen Trick. Man kann sich z.B. in die entsprechende Prozedur <u>einhooken</u>.<br /><br />In diesem Workshop wird aber ausschließlich mit dem Timer gearbeitet, der nach wenigen mSek unsere Callback-Funktion <b>MsgBoxCallbackProc</b> aufruft.<br />Hier wird zunächst das Handle zur MsgBox ermittelt. Dann können bereits alle Elemente mit neuen Texten versehen, die MsgBox oder die Buttons verschoben werden oder ein neues Icon gesetzt werden.<br /><br />Für weitere Dinge, u.a. auch das Abfangen von Buttonklicks, Mausbewegungen usw., hooken wir uns in die Meldungsschleife der Excel-MsgBox ein und leiten alle Messages an unsere eigene Prozedur <b>WindowProc</b> um.<br /><br />So, jetzt genug der Schreiberei. Die Codes sind komplett kommentiert und geben dem interessierten User hoffentlich einen Einblick, wie es funktionieren kann. Es führen ja noch mehr Wege nach Rom.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=53285" target="_blank" title="16.09.2024, 17:32">MsgBox-Cool-Workshop-CEF.xlsb</a> (Größe: 1,39 MB / Downloads: 13)
<!-- end: postbit_attachments_attachment --><br /><br />Viel Spaß und Erfolg beim Anwenden und Tüfteln...<br /><br />PS: Fragen, Funktionsfehler und Anregungen bitte in der Rubrik <font color=#0000a0>Diskussionen zu den Beispielen</font> anbringen. Es ist noch neu und wenig getestet....<br /><br /><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ein- Auszippen, Löschen und Auflisten ohne Zip-Programm]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Ein-Auszippen-Loeschen-und-Auflisten-ohne-Zip-Programm</link>
			<pubDate>Tue, 26 Mar 2024 13:15:28 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=18350">volti</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Ein-Auszippen-Loeschen-und-Auflisten-ohne-Zip-Programm</guid>
			<description><![CDATA[Liebe Leserin. lieber Leser,<br /><br />manchmal möchte man ein oder mehrere Dateien oder ganze Ordner in eine ZIP-Datei einzippen.<br />Insbesondere für das Masseneinzippen von Dateien in ggf. sogar mehrere ZIP-Dateien (z.B. für das Berichtswesen) nach Vorgaben  (z.B. eine Excelliste) wäre eine automatische Lösung sehr willkommen oder sogar unerlässlich.<br /><br />Hierfür gibt es das eine oder andere Programm, z.B. der PKZip Commandliner.<br /><br />Wer jedoch keine Fremdsoftware verwenden kann, will oder darf, dem bietet sich noch eine VBA-Möglichkeit über die <font color=#800000><b>Shell.Application</b></font><br />Nachfolgend möchte ich mal mögliche Methoden für das Einzippen, das Auszippen, das Auflisten und das Löschen von Dateien aufzeigen.<br /><br />Das funktioniert ganz gut. Es darf jedoch eine unschöne Besonderheit hierbei nicht unerwähnt bleiben.<br />Die Aktionen laufen asynchron zum VBA-Code ab.<br />Das heißt, man weiß nicht, wann die Aktionen abgeschlossen sind. <br />Beim Ablaufen in einer Schleife könnten Fehlermeldungen in Form einer Dialogbox auftauchen, die erstens vom User weggeklickt werden müssen und zweitens das Einzippen der Datei dann verhindern.<br />Eine ausreichende Zeitvorgabe z.B. durch Sleep kann das Problem beheben, kostet dann aber wieder unnütze Zeit.<br /><br /><font color=#000080><b>Einzippen</b></font><br /><!--- erstellt am 26.03.2024 13:56:58 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus135658' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA135658' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Sub</font> Zip_Zuf&uuml;gen(<font color=blue>ByVal</font> sZipDateiname <font color=blue>As String</font>, <font color=blue>ByVal</font> sZipPfad <font color=blue>As String</font>, <font color=blue>Optional</font> bNeu <font color=blue>As Boolean</font>)</strong><br><font color=#00a000>' F&uuml;gt Datei(en) gem&auml;ß Zip-Muster (mit *) zu einer ZIP-Datei hinzu</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> iFF <font color=blue>As Integer</font>, Chr0Data(<font color=#ff6060>18</font>) <font color=blue>As Byte</font>, i <font color=blue>As Integer</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> oZiel <font color=blue>As Object</font>, oQuel <font color=blue>As Object</font>, oItem <font color=blue>As Object</font>, hWnd <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> sPfad <font color=blue>As String</font>, sZIPMuster <font color=blue>As String</font>, sFail <font color=blue>As String</font><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><font color=#00a000>' Zip-Muster bearbeiten</font><br>&nbsp;&nbsp; sPfad = <font color=#5050f0>Left</font>(sZipPfad, InStrRev(sZipPfad, &quot;<font color=red>&bsol;</font>&quot;))&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Quellpfad extrahieren</font><br>&nbsp;&nbsp; sZIPMuster = <font color=#5050f0>Mid</font>(sZipPfad, <font color=#5050f0>Len</font>(sPfad) + <font color=#ff6060>1</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' ZIP-Muster extrahieren</font><br>&nbsp;&nbsp; <br><font color=#00a000>' Vorhandene ZIP-Datei ggf. vorher l&ouml;schen</font><br>&nbsp;&nbsp;<font color=blue>If</font> <font color=#5050f0>Dir&#36;</font>(sZipDateiname) &lt;&gt; &quot;<font color=red></font>&quot; <font color=blue>And</font> bNeu <font color=blue>Then Kill</font> sZipDateiname<br>&nbsp;&nbsp; <br><font color=#00a000>' Zun&auml;chst eine leere ZIP-Datei anlegen, falls noch nicht vorhanden</font><br>&nbsp;&nbsp;<font color=blue>If</font> <font color=#5050f0>Dir&#36;</font>(sZipDateiname) = &quot;<font color=red></font>&quot; <font color=blue>Then</font><br>&nbsp;&nbsp;&nbsp;&nbsp; iFF = <font color=blue>FreeFile</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Open</font> sZipDateiname <font color=blue>For Binary Access Write As</font> #iFF<font color=#00a000>&nbsp;' Datei &ouml;ffnen</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Put</font> #iFF, , &quot;<font color=red>PK</font>&quot; & <font color=#5050f0>Chr&#36;</font>(<font color=#ff6060>5</font>) & <font color=#5050f0>Chr&#36;</font>(<font color=#ff6060>6</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' ZIP-Kennung schreiben</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Put</font> #iFF, , Chr0Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Grunddaten schreiben</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Close</font> #iFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Datei schließen</font><br>&nbsp;&nbsp;<font color=blue>End If</font><br><br><font color=#00a000>' Zu zippende Datei(en) ermitteln</font><br>&nbsp;&nbsp;miDlgAnz = <font color=#ff6060>0</font><br>&nbsp;&nbsp;<font color=blue>With</font> <font color=#5050f0>CreateObject</font>(&quot;<font color=red>Shell.Application</font>&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Set</font> oZiel = .Namespace((sZipDateiname))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Zielobjekt setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>If</font> <font color=#5050f0>Right&#36;</font>(sZipPfad, <font color=#ff6060>1</font>) = &quot;<font color=red>&bsol;</font>&quot; <font color=blue>Then</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Ordner einzippen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oZiel.CopyHere .Namespace((sZipPfad))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Else</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Datei&nbsp;&nbsp;einzippen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>With</font> .Namespace((sPfad))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Quellobjekt setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>For Each</font> oItem <font color=blue>In</font> .Items<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> oItem.Name <font color=blue>Like</font> sZIPMuster <font color=blue>Then</font>&nbsp;&nbsp; <font color=#00a000>&nbsp;' Wenn Item passt</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mhTimer = SetTimer(<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>10</font>, <font color=blue>AddressOf</font> ZipErsetzProc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oZiel.CopyHere oItem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Jetzt Datei hinzuf&uuml;gen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sleep <font color=#ff6060>100</font>: <font color=blue>DoEvents</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>End If</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Next</font> oItem<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>End With</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End If</font><br>&nbsp;&nbsp;<font color=blue>End With</font><br>&nbsp;&nbsp;Sleep <font color=#ff6060>500</font><br>&nbsp;&nbsp;<font color=blue>Call</font> EnumWindows(<font color=blue>AddressOf</font> DlgZuProc, <font color=#ff6060>0</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Alle evtl. Fehlermeldungen schließen</font><br><strong><font color=blue>End Sub</font></strong><br><br><strong><font color=blue>Sub</font> Test_Ordner_einzippen()</strong><br>&nbsp;&nbsp; Zip &quot;<font color=red>D:&bsol;MyZip.zip</font>&quot;, &quot;<font color=red>D:&bsol;Ziptest&bsol;</font>&quot;<br><strong><font color=blue>End Sub</font></strong></div></div><div style='line-height: 5px;'><br></div></div></div><br />Falls die Zielzipdatei nicht vorhanden ist, wird zunächst automatisch eine leere ZIP-Datei angelegt. Diese enthält lediglich die PK-Kennung und ein paar Platzhalter.<br />Anschließend werden entweder der übergebende Ordner oder in einer Schleife die Dateien entsprechend dem übergebenden Muster eingezippt.<br />Das kann problemlos mit oder ohne Anzeige einer Fortschrittsanzeige ablaufen oder im Problemfall mit den o.a. schon angesprochenen Fehlermeldungen.<br />PS: Einzippen <br>einer</br> Datei oder eines Ordners ist in der Regel immer problemlos.<br /><br />Um Nachfragen der Ersetzung bei bereits vorhandenen Dateien zu vermeiden, kann optional die ZIP-Datei vorher gelöscht werden.<br /><br />Die Beantwortung der Nachfrage kann man aber auch automatisieren.<br />Wer möchte kann diese Funktion dafür einsetzen:<br /><br /><!--- erstellt am 26.03.2024 13:58:37 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA135837' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Private Sub</font> ZipErsetzProc()</strong><br><font color=#00a000>' F&uuml;hrt einen Mausklick in der &quot;Datei Kopieren&quot;-Dlgbox durch</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> PT <font color=blue>As</font> POINTAPI, R <font color=blue>As</font> RECT<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;KillTimer <font color=#ff6060>0&</font>, mhTimer: mhTimer = <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer l&ouml;schen</font><br>&nbsp;&nbsp;mhDlg = FindWindowA(&quot;<font color=red>#32770</font>&quot;, &quot;<font color=red>Datei kopieren</font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Handle der Ersetzen-Dlgbox</font><br>&nbsp;&nbsp;<font color=blue>If</font> mhDlg &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font><br>&nbsp;&nbsp;&nbsp;&nbsp; GetWindowRect mhDlg, R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Dlg-Position holen</font><br>&nbsp;&nbsp;&nbsp;&nbsp; SetCursorPos R.Left + <font color=#ff6060>200</font>, R.Top + <font color=#ff6060>250</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Cursor positionieren</font><br>&nbsp;&nbsp;&nbsp;&nbsp; mouse_event <font color=#ff6060>&H6</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Mausklick Down und Up</font><br>&nbsp;&nbsp;<font color=blue>End If</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><br />Sollten Fehlermeldungen aufgetreten sein, können diese vom Programm auch automatisch geschlossen werden.<br />Sie könnten sonst im Hintergrund verschwinden und dauerhaft im Arbeitsspeicher dahindämmern.<br />Das Schließen übernimmt dieser Code:<br /><br /><!--- erstellt am 26.03.2024 14:00:40 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA140040' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Private Function</font> DlgZuProc(<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, lParam <font color=blue>As LongPtr</font>) <font color=blue>As Long</font></strong><br><font color=#00a000>' Schließt alle ZIP-Fehlermeldungs-DlgBoxen beim Durchscannen aller Fenster</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> sText <font color=blue>As String *</font> <font color=#ff6060>64</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;GetWindowTextA hWnd, sText, <font color=#ff6060>64</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Fenstertext holen</font><br>&nbsp;&nbsp;<font color=blue>If</font> sText <font color=blue>Like</font> &quot;<font color=red>ZIP-komprimierte Ordner - Fehler*</font>&quot; <font color=blue>Then</font> _<br>&nbsp;&nbsp;&nbsp;&nbsp; PostMessageA hWnd, <font color=#ff6060>&H10</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' &H10=WM_CLOSE</font><br>&nbsp;&nbsp;DlgZuProc = <font color=#ff6060>1</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' N&auml;chstes Fenster</font><br><strong><font color=blue>End Function</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><font color=#000080><b>Extrahieren</b></font><br />Mit dem nachfolgend gezeigten Code können die Dateien aus der gewählten ZIP-Datei in einen beliebigen Ordner ausgezippt werden.<br />Der Zielordner <b>muss</b> vorhanden sein.<br />Falls das nicht der Fall sein sollte, wird er über die API-Funktion<br /><br /><!--- erstellt am 26.03.2024 14:01:55 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA140155' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Sub</font> Zip_Extract(<font color=blue>ByVal</font> sZipDatei <font color=blue>As String</font>, <font color=blue>ByVal</font> sZielPfad <font color=blue>As String</font>)</strong><br><font color=#00a000>' Alle Dateien aus einer sZipDatei nach sZielPfad extrahieren</font><br>&nbsp;&nbsp;<font color=blue>If</font> <font color=#5050f0>Dir&#36;</font>(sZipDatei) &lt;&gt; &quot;<font color=red></font>&quot; <font color=blue>Then</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Ist Zip-Datei vorhanden?</font><br>&nbsp;&nbsp;&nbsp;&nbsp; SHCreateDirectoryExW <font color=#ff6060>0&</font>, <font color=#5050f0>StrPtr</font>(sZielPfad), <font color=#ff6060>0&</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Ggf. Zielordner erstellen</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>With</font> <font color=#5050f0>CreateObject</font>(&quot;<font color=red>Shell.Application</font>&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Namespace((sZielPfad)).CopyHere .Namespace((sZipDatei)).Items<br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End With</font><br>&nbsp;&nbsp;<font color=blue>End If</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><br /><font color=#000080><b>ZIP-Inhalt anzeigen</b></font><br />Den Inhalt einer ZIP-Datei kann man sich mit dem u.a. Code ausgeben lassen.<br />Hierbei ist zu beachten, dass dieses die einfachste Art der Ausgabe ist. Lies hierzu auch diesen Artikel.<br />Weitere umfangreichere Methoden findest Du auch in der beigefügten Datei.<br /><br /><!--- erstellt am 26.03.2024 14:02:36 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA140236' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Sub</font> Zip_Liste()</strong><br><font color=#00a000>' Inhalt aus einer Zip-Datei auslesen</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> vZipDatei <font color=blue>As Variant</font>, oItem <font color=blue>As Object</font><br>&nbsp;<br>&nbsp;&nbsp;vZipDatei = Application.GetOpenFilename(&quot;<font color=red>ZIP-Dateien (*.zip), *.zip</font>&quot;)<br>&nbsp;&nbsp;<font color=blue>If</font> vZipDatei = &quot;<font color=red></font>&quot; <font color=blue>Then Exit Sub</font><br><br>&nbsp;&nbsp;<font color=blue>With</font> <font color=#5050f0>CreateObject</font>(&quot;<font color=red>Shell.Application</font>&quot;).Namespace(vZipDatei)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>For Each</font> oItem <font color=blue>In</font> .Items<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Debug.Print</font> oItem.Name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Next</font> oItem<br>&nbsp;&nbsp;<font color=blue>End With</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><br /><font color=#000080><b>Löschen</b></font><br />Zum Löschen einer Datei aus einer ZIP-Datei kann der nachfolgend gezeigte Code verwendet werden.<br />Nachteilig wirkt sich hier die Nachfragedialogbox aus, die der Nutzer beantworten muss bevor es weiter geht.<br />Das Problem wurde aber mit ein paar API-Funktionen automatisiert und damit gelöst.<br /><br /><!--- erstellt am 26.03.2024 14:03:21 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA140321' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Sub</font> Zip_Loeschen(<font color=blue>ByVal</font> sZipDatei <font color=blue>As String</font>, <font color=blue>ByVal</font> sZIPMuster <font color=blue>As String</font>)</strong><br><font color=#00a000>' Datei(en)(sZIPMuster) aus einer sZipDatei entfernen</font><br><font color=#00a000>' Die Dialogbox-Abfrage wird automatisch in der ZipDeleteProc beantwortet</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> oItem <font color=blue>As Object</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<font color=blue>With</font> <font color=#5050f0>CreateObject</font>(&quot;<font color=red>Shell.Application</font>&quot;).Namespace((sZipDatei))<font color=#00a000>&nbsp;' Quellobjekt referenzieren</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>For Each</font> oItem <font color=blue>In</font> .Items<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>If</font> oItem.Name <font color=blue>Like</font> sZIPMuster <font color=blue>Then</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Wenn Item passt...</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhTimer = SetTimer(<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>100</font>, <font color=blue>AddressOf</font> ZipDeleteProc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oItem.InvokeVerb &quot;<font color=red>Delete</font>&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Jetzt Datei l&ouml;schen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep <font color=#ff6060>100</font>: <font color=blue>DoEvents</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' 100ms warten</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End If</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Next</font> oItem<br>&nbsp;&nbsp;<font color=blue>End With</font><br><strong><font color=blue>End Sub</font></strong><br><strong><font color=blue>Private Sub</font> ZipDeleteProc()</strong><br>&nbsp;&nbsp;KillTimer <font color=#ff6060>0&</font>, mhTimer: mhTimer = <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer l&ouml;schen</font><br>&nbsp;&nbsp;mhDlg = FindWindowA(&quot;<font color=red>#32770</font>&quot;, &quot;<font color=red>Datei l&ouml;schen</font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Handle der Abfrage-Dlgbox</font><br>&nbsp;&nbsp;<font color=blue>If</font> mhDlg &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font> SendDlgItemMessageA mhDlg, <font color=#ff6060>6</font>, <font color=#ff6060>&HF5</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>0&</font><font color=#00a000>&nbsp;' &HF5=BM_CLICK&nbsp;&nbsp;6=ja, 2=nein</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><font color=#000080><b>Declares</b></font><br />Die verwendeten Funktionen aus der Windows-API müssen vor ihrem Einsatz noch deklariert werden. Diese Declares sind als erstes im Modul vor allen Funktionen zu platzieren.<br /><br /><!--- erstellt am 26.03.2024 14:04:15 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus140415' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA140415' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=blue>Option Explicit</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetCursorPos</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> x <font color=blue>As Long</font>, <font color=blue>ByVal</font> y <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Public Declare PtrSafe Sub</font> <font color=#d000d0>mouse_event</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; (<font color=blue>ByVal</font> dwflags <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dx <font color=blue>As Long</font>, <font color=blue>ByVal</font> dy <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> cButtons <font color=blue>As Long</font>, <font color=blue>ByVal</font> dwExtraInfo <font color=blue>As LongPtr</font>)<br><font color=blue>Private Type POINTAPI</font><br>&nbsp;&nbsp;&nbsp;&nbsp;x <font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;y <font color=blue>As Long</font><br><font color=blue>End Type</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowRect</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, lpRect <font color=blue>As RECT</font>) <font color=blue>As Long</font><br><font color=blue>Private Type RECT</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Left&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Top&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Right&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Bottom <font color=blue>As Long</font><br><font color=blue>End Type</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>EnumWindows</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> lpEnumFunc <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetForegroundWindow</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowTextA</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpString <font color=blue>As String</font>, <font color=blue>ByVal</font> cch <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SHCreateDirectoryExW</font> <font color=blue>Lib</font> &quot;<font color=red>Shell32.dll</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> pszPath <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> psa <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>FindWindowA</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> lpClassName <font color=blue>As String</font>, <font color=blue>ByVal</font> lpWindowName <font color=blue>As String</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SendDlgItemMessageA</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hDlg <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDDlgItem <font color=blue>As Long</font>, <font color=blue>ByVal</font> wMsg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Sub</font> <font color=#d000d0>Sleep</font> <font color=blue>Lib</font> &quot;<font color=red>kernel32</font>&quot; (<font color=blue>ByVal</font> dwMilliseconds <font color=blue>As Long</font>)<br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetTimer</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> uElapse <font color=blue>As Long</font>, <font color=blue>ByVal</font> lpTimerFunc <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>KillTimer</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>PostMessageA</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> wMsg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Dim</font> mhTimer <font color=blue>As LongPtr</font>, mhDlg <font color=blue>As LongPtr</font>, miDlgAnz <font color=blue>As Long</font><br><font color=blue>Dim</font> miBusy <font color=blue>As Long</font></div></div><div style='line-height: 5px;'><br></div></div></div><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=51360" target="_blank" title="26.03.2024, 14:08">Zip-Datei-Analysen2023.xlsb</a> (Größe: 64,91 KB / Downloads: 5)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Liebe Leserin. lieber Leser,<br /><br />manchmal möchte man ein oder mehrere Dateien oder ganze Ordner in eine ZIP-Datei einzippen.<br />Insbesondere für das Masseneinzippen von Dateien in ggf. sogar mehrere ZIP-Dateien (z.B. für das Berichtswesen) nach Vorgaben  (z.B. eine Excelliste) wäre eine automatische Lösung sehr willkommen oder sogar unerlässlich.<br /><br />Hierfür gibt es das eine oder andere Programm, z.B. der PKZip Commandliner.<br /><br />Wer jedoch keine Fremdsoftware verwenden kann, will oder darf, dem bietet sich noch eine VBA-Möglichkeit über die <font color=#800000><b>Shell.Application</b></font><br />Nachfolgend möchte ich mal mögliche Methoden für das Einzippen, das Auszippen, das Auflisten und das Löschen von Dateien aufzeigen.<br /><br />Das funktioniert ganz gut. Es darf jedoch eine unschöne Besonderheit hierbei nicht unerwähnt bleiben.<br />Die Aktionen laufen asynchron zum VBA-Code ab.<br />Das heißt, man weiß nicht, wann die Aktionen abgeschlossen sind. <br />Beim Ablaufen in einer Schleife könnten Fehlermeldungen in Form einer Dialogbox auftauchen, die erstens vom User weggeklickt werden müssen und zweitens das Einzippen der Datei dann verhindern.<br />Eine ausreichende Zeitvorgabe z.B. durch Sleep kann das Problem beheben, kostet dann aber wieder unnütze Zeit.<br /><br /><font color=#000080><b>Einzippen</b></font><br /><!--- erstellt am 26.03.2024 13:56:58 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus135658' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA135658' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Sub</font> Zip_Zuf&uuml;gen(<font color=blue>ByVal</font> sZipDateiname <font color=blue>As String</font>, <font color=blue>ByVal</font> sZipPfad <font color=blue>As String</font>, <font color=blue>Optional</font> bNeu <font color=blue>As Boolean</font>)</strong><br><font color=#00a000>' F&uuml;gt Datei(en) gem&auml;ß Zip-Muster (mit *) zu einer ZIP-Datei hinzu</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> iFF <font color=blue>As Integer</font>, Chr0Data(<font color=#ff6060>18</font>) <font color=blue>As Byte</font>, i <font color=blue>As Integer</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> oZiel <font color=blue>As Object</font>, oQuel <font color=blue>As Object</font>, oItem <font color=blue>As Object</font>, hWnd <font color=blue>As LongPtr</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> sPfad <font color=blue>As String</font>, sZIPMuster <font color=blue>As String</font>, sFail <font color=blue>As String</font><br>&nbsp;&nbsp;&nbsp;&nbsp;<br><font color=#00a000>' Zip-Muster bearbeiten</font><br>&nbsp;&nbsp; sPfad = <font color=#5050f0>Left</font>(sZipPfad, InStrRev(sZipPfad, &quot;<font color=red>&bsol;</font>&quot;))&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Quellpfad extrahieren</font><br>&nbsp;&nbsp; sZIPMuster = <font color=#5050f0>Mid</font>(sZipPfad, <font color=#5050f0>Len</font>(sPfad) + <font color=#ff6060>1</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' ZIP-Muster extrahieren</font><br>&nbsp;&nbsp; <br><font color=#00a000>' Vorhandene ZIP-Datei ggf. vorher l&ouml;schen</font><br>&nbsp;&nbsp;<font color=blue>If</font> <font color=#5050f0>Dir&#36;</font>(sZipDateiname) &lt;&gt; &quot;<font color=red></font>&quot; <font color=blue>And</font> bNeu <font color=blue>Then Kill</font> sZipDateiname<br>&nbsp;&nbsp; <br><font color=#00a000>' Zun&auml;chst eine leere ZIP-Datei anlegen, falls noch nicht vorhanden</font><br>&nbsp;&nbsp;<font color=blue>If</font> <font color=#5050f0>Dir&#36;</font>(sZipDateiname) = &quot;<font color=red></font>&quot; <font color=blue>Then</font><br>&nbsp;&nbsp;&nbsp;&nbsp; iFF = <font color=blue>FreeFile</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Open</font> sZipDateiname <font color=blue>For Binary Access Write As</font> #iFF<font color=#00a000>&nbsp;' Datei &ouml;ffnen</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Put</font> #iFF, , &quot;<font color=red>PK</font>&quot; & <font color=#5050f0>Chr&#36;</font>(<font color=#ff6060>5</font>) & <font color=#5050f0>Chr&#36;</font>(<font color=#ff6060>6</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' ZIP-Kennung schreiben</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Put</font> #iFF, , Chr0Data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Grunddaten schreiben</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Close</font> #iFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Datei schließen</font><br>&nbsp;&nbsp;<font color=blue>End If</font><br><br><font color=#00a000>' Zu zippende Datei(en) ermitteln</font><br>&nbsp;&nbsp;miDlgAnz = <font color=#ff6060>0</font><br>&nbsp;&nbsp;<font color=blue>With</font> <font color=#5050f0>CreateObject</font>(&quot;<font color=red>Shell.Application</font>&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Set</font> oZiel = .Namespace((sZipDateiname))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Zielobjekt setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>If</font> <font color=#5050f0>Right&#36;</font>(sZipPfad, <font color=#ff6060>1</font>) = &quot;<font color=red>&bsol;</font>&quot; <font color=blue>Then</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Ordner einzippen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oZiel.CopyHere .Namespace((sZipPfad))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Else</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Datei&nbsp;&nbsp;einzippen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>With</font> .Namespace((sPfad))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Quellobjekt setzen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>For Each</font> oItem <font color=blue>In</font> .Items<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>If</font> oItem.Name <font color=blue>Like</font> sZIPMuster <font color=blue>Then</font>&nbsp;&nbsp; <font color=#00a000>&nbsp;' Wenn Item passt</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mhTimer = SetTimer(<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>10</font>, <font color=blue>AddressOf</font> ZipErsetzProc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oZiel.CopyHere oItem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Jetzt Datei hinzuf&uuml;gen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sleep <font color=#ff6060>100</font>: <font color=blue>DoEvents</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>End If</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Next</font> oItem<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>End With</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End If</font><br>&nbsp;&nbsp;<font color=blue>End With</font><br>&nbsp;&nbsp;Sleep <font color=#ff6060>500</font><br>&nbsp;&nbsp;<font color=blue>Call</font> EnumWindows(<font color=blue>AddressOf</font> DlgZuProc, <font color=#ff6060>0</font>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Alle evtl. Fehlermeldungen schließen</font><br><strong><font color=blue>End Sub</font></strong><br><br><strong><font color=blue>Sub</font> Test_Ordner_einzippen()</strong><br>&nbsp;&nbsp; Zip &quot;<font color=red>D:&bsol;MyZip.zip</font>&quot;, &quot;<font color=red>D:&bsol;Ziptest&bsol;</font>&quot;<br><strong><font color=blue>End Sub</font></strong></div></div><div style='line-height: 5px;'><br></div></div></div><br />Falls die Zielzipdatei nicht vorhanden ist, wird zunächst automatisch eine leere ZIP-Datei angelegt. Diese enthält lediglich die PK-Kennung und ein paar Platzhalter.<br />Anschließend werden entweder der übergebende Ordner oder in einer Schleife die Dateien entsprechend dem übergebenden Muster eingezippt.<br />Das kann problemlos mit oder ohne Anzeige einer Fortschrittsanzeige ablaufen oder im Problemfall mit den o.a. schon angesprochenen Fehlermeldungen.<br />PS: Einzippen <br>einer</br> Datei oder eines Ordners ist in der Regel immer problemlos.<br /><br />Um Nachfragen der Ersetzung bei bereits vorhandenen Dateien zu vermeiden, kann optional die ZIP-Datei vorher gelöscht werden.<br /><br />Die Beantwortung der Nachfrage kann man aber auch automatisieren.<br />Wer möchte kann diese Funktion dafür einsetzen:<br /><br /><!--- erstellt am 26.03.2024 13:58:37 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA135837' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Private Sub</font> ZipErsetzProc()</strong><br><font color=#00a000>' F&uuml;hrt einen Mausklick in der &quot;Datei Kopieren&quot;-Dlgbox durch</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> PT <font color=blue>As</font> POINTAPI, R <font color=blue>As</font> RECT<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;KillTimer <font color=#ff6060>0&</font>, mhTimer: mhTimer = <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer l&ouml;schen</font><br>&nbsp;&nbsp;mhDlg = FindWindowA(&quot;<font color=red>#32770</font>&quot;, &quot;<font color=red>Datei kopieren</font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Handle der Ersetzen-Dlgbox</font><br>&nbsp;&nbsp;<font color=blue>If</font> mhDlg &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font><br>&nbsp;&nbsp;&nbsp;&nbsp; GetWindowRect mhDlg, R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Dlg-Position holen</font><br>&nbsp;&nbsp;&nbsp;&nbsp; SetCursorPos R.Left + <font color=#ff6060>200</font>, R.Top + <font color=#ff6060>250</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Cursor positionieren</font><br>&nbsp;&nbsp;&nbsp;&nbsp; mouse_event <font color=#ff6060>&H6</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>, <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Mausklick Down und Up</font><br>&nbsp;&nbsp;<font color=blue>End If</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><br />Sollten Fehlermeldungen aufgetreten sein, können diese vom Programm auch automatisch geschlossen werden.<br />Sie könnten sonst im Hintergrund verschwinden und dauerhaft im Arbeitsspeicher dahindämmern.<br />Das Schließen übernimmt dieser Code:<br /><br /><!--- erstellt am 26.03.2024 14:00:40 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA140040' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Private Function</font> DlgZuProc(<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, lParam <font color=blue>As LongPtr</font>) <font color=blue>As Long</font></strong><br><font color=#00a000>' Schließt alle ZIP-Fehlermeldungs-DlgBoxen beim Durchscannen aller Fenster</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> sText <font color=blue>As String *</font> <font color=#ff6060>64</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;GetWindowTextA hWnd, sText, <font color=#ff6060>64</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Fenstertext holen</font><br>&nbsp;&nbsp;<font color=blue>If</font> sText <font color=blue>Like</font> &quot;<font color=red>ZIP-komprimierte Ordner - Fehler*</font>&quot; <font color=blue>Then</font> _<br>&nbsp;&nbsp;&nbsp;&nbsp; PostMessageA hWnd, <font color=#ff6060>&H10</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' &H10=WM_CLOSE</font><br>&nbsp;&nbsp;DlgZuProc = <font color=#ff6060>1</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' N&auml;chstes Fenster</font><br><strong><font color=blue>End Function</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><font color=#000080><b>Extrahieren</b></font><br />Mit dem nachfolgend gezeigten Code können die Dateien aus der gewählten ZIP-Datei in einen beliebigen Ordner ausgezippt werden.<br />Der Zielordner <b>muss</b> vorhanden sein.<br />Falls das nicht der Fall sein sollte, wird er über die API-Funktion<br /><br /><!--- erstellt am 26.03.2024 14:01:55 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA140155' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Sub</font> Zip_Extract(<font color=blue>ByVal</font> sZipDatei <font color=blue>As String</font>, <font color=blue>ByVal</font> sZielPfad <font color=blue>As String</font>)</strong><br><font color=#00a000>' Alle Dateien aus einer sZipDatei nach sZielPfad extrahieren</font><br>&nbsp;&nbsp;<font color=blue>If</font> <font color=#5050f0>Dir&#36;</font>(sZipDatei) &lt;&gt; &quot;<font color=red></font>&quot; <font color=blue>Then</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Ist Zip-Datei vorhanden?</font><br>&nbsp;&nbsp;&nbsp;&nbsp; SHCreateDirectoryExW <font color=#ff6060>0&</font>, <font color=#5050f0>StrPtr</font>(sZielPfad), <font color=#ff6060>0&</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Ggf. Zielordner erstellen</font><br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>With</font> <font color=#5050f0>CreateObject</font>(&quot;<font color=red>Shell.Application</font>&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Namespace((sZielPfad)).CopyHere .Namespace((sZipDatei)).Items<br>&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End With</font><br>&nbsp;&nbsp;<font color=blue>End If</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><br /><font color=#000080><b>ZIP-Inhalt anzeigen</b></font><br />Den Inhalt einer ZIP-Datei kann man sich mit dem u.a. Code ausgeben lassen.<br />Hierbei ist zu beachten, dass dieses die einfachste Art der Ausgabe ist. Lies hierzu auch diesen Artikel.<br />Weitere umfangreichere Methoden findest Du auch in der beigefügten Datei.<br /><br /><!--- erstellt am 26.03.2024 14:02:36 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA140236' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Sub</font> Zip_Liste()</strong><br><font color=#00a000>' Inhalt aus einer Zip-Datei auslesen</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> vZipDatei <font color=blue>As Variant</font>, oItem <font color=blue>As Object</font><br>&nbsp;<br>&nbsp;&nbsp;vZipDatei = Application.GetOpenFilename(&quot;<font color=red>ZIP-Dateien (*.zip), *.zip</font>&quot;)<br>&nbsp;&nbsp;<font color=blue>If</font> vZipDatei = &quot;<font color=red></font>&quot; <font color=blue>Then Exit Sub</font><br><br>&nbsp;&nbsp;<font color=blue>With</font> <font color=#5050f0>CreateObject</font>(&quot;<font color=red>Shell.Application</font>&quot;).Namespace(vZipDatei)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>For Each</font> oItem <font color=blue>In</font> .Items<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Debug.Print</font> oItem.Name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>Next</font> oItem<br>&nbsp;&nbsp;<font color=blue>End With</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><br /><font color=#000080><b>Löschen</b></font><br />Zum Löschen einer Datei aus einer ZIP-Datei kann der nachfolgend gezeigte Code verwendet werden.<br />Nachteilig wirkt sich hier die Nachfragedialogbox aus, die der Nutzer beantworten muss bevor es weiter geht.<br />Das Problem wurde aber mit ein paar API-Funktionen automatisiert und damit gelöst.<br /><br /><!--- erstellt am 26.03.2024 14:03:21 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><!--- VBA-Code ---><div id='VBA140321' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><strong><font color=blue>Sub</font> Zip_Loeschen(<font color=blue>ByVal</font> sZipDatei <font color=blue>As String</font>, <font color=blue>ByVal</font> sZIPMuster <font color=blue>As String</font>)</strong><br><font color=#00a000>' Datei(en)(sZIPMuster) aus einer sZipDatei entfernen</font><br><font color=#00a000>' Die Dialogbox-Abfrage wird automatisch in der ZipDeleteProc beantwortet</font><br>&nbsp;&nbsp;<font color=blue>Dim</font> oItem <font color=blue>As Object</font><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<font color=blue>With</font> <font color=#5050f0>CreateObject</font>(&quot;<font color=red>Shell.Application</font>&quot;).Namespace((sZipDatei))<font color=#00a000>&nbsp;' Quellobjekt referenzieren</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>For Each</font> oItem <font color=blue>In</font> .Items<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>If</font> oItem.Name <font color=blue>Like</font> sZIPMuster <font color=blue>Then</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Wenn Item passt...</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mhTimer = SetTimer(<font color=#ff6060>0&</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>100</font>, <font color=blue>AddressOf</font> ZipDeleteProc)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oItem.InvokeVerb &quot;<font color=red>Delete</font>&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' Jetzt Datei l&ouml;schen</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep <font color=#ff6060>100</font>: <font color=blue>DoEvents</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#00a000>&nbsp;' 100ms warten</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>End If</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>Next</font> oItem<br>&nbsp;&nbsp;<font color=blue>End With</font><br><strong><font color=blue>End Sub</font></strong><br><strong><font color=blue>Private Sub</font> ZipDeleteProc()</strong><br>&nbsp;&nbsp;KillTimer <font color=#ff6060>0&</font>, mhTimer: mhTimer = <font color=#ff6060>0</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Timer l&ouml;schen</font><br>&nbsp;&nbsp;mhDlg = FindWindowA(&quot;<font color=red>#32770</font>&quot;, &quot;<font color=red>Datei l&ouml;schen</font>&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#00a000>&nbsp;' Handle der Abfrage-Dlgbox</font><br>&nbsp;&nbsp;<font color=blue>If</font> mhDlg &lt;&gt; <font color=#ff6060>0</font> <font color=blue>Then</font> SendDlgItemMessageA mhDlg, <font color=#ff6060>6</font>, <font color=#ff6060>&HF5</font>, <font color=#ff6060>0&</font>, <font color=#ff6060>0&</font><font color=#00a000>&nbsp;' &HF5=BM_CLICK&nbsp;&nbsp;6=ja, 2=nein</font><br><strong><font color=blue>End Sub</font></strong></div><div style='line-height: 5px;'><br></div></div></div><br /><font color=#000080><b>Declares</b></font><br />Die verwendeten Funktionen aus der Windows-API müssen vor ihrem Einsatz noch deklariert werden. Diese Declares sind als erstes im Modul vor allen Funktionen zu platzieren.<br /><br /><!--- erstellt am 26.03.2024 14:04:15 (CEF-Forum) von volti's VBA2HTML ---><div class="codeblock"><div class="title">Code:</div><div style='position: relative; width: 950px; font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; border-width: 2px; border-style: groove; border-color: #ff9966; padding-left: 5px; margin-left: 2px;'><div style='line-height: 5px;'><br></div><div id='PlusMinus140415' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee; height: 400px; width: 99.6%; overflow: auto;&nbsp;&nbsp;position: relative; top:-10px;'><!--- VBA-Code ---><div id='VBA140415' style='font-family: Courier New, Arial; font-size: 10pt; color: #800000; line-height: 16px; font-weight: normal; background-color: #ffffee;'><font color=blue>Option Explicit</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetCursorPos</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> x <font color=blue>As Long</font>, <font color=blue>ByVal</font> y <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Public Declare PtrSafe Sub</font> <font color=#d000d0>mouse_event</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; (<font color=blue>ByVal</font> dwflags <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> dx <font color=blue>As Long</font>, <font color=blue>ByVal</font> dy <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> cButtons <font color=blue>As Long</font>, <font color=blue>ByVal</font> dwExtraInfo <font color=blue>As LongPtr</font>)<br><font color=blue>Private Type POINTAPI</font><br>&nbsp;&nbsp;&nbsp;&nbsp;x <font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;y <font color=blue>As Long</font><br><font color=blue>End Type</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowRect</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, lpRect <font color=blue>As RECT</font>) <font color=blue>As Long</font><br><font color=blue>Private Type RECT</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Left&nbsp;&nbsp; <font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Top&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Right&nbsp;&nbsp;<font color=blue>As Long</font><br>&nbsp;&nbsp;&nbsp;&nbsp;Bottom <font color=blue>As Long</font><br><font color=blue>End Type</font><br><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>EnumWindows</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>ByVal</font> lpEnumFunc <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetForegroundWindow</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; () <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>GetWindowTextA</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lpString <font color=blue>As String</font>, <font color=blue>ByVal</font> cch <font color=blue>As Long</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SHCreateDirectoryExW</font> <font color=blue>Lib</font> &quot;<font color=red>Shell32.dll</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> pszPath <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> psa <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>FindWindowA</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> lpClassName <font color=blue>As String</font>, <font color=blue>ByVal</font> lpWindowName <font color=blue>As String</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SendDlgItemMessageA</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hDlg <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDDlgItem <font color=blue>As Long</font>, <font color=blue>ByVal</font> wMsg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Sub</font> <font color=#d000d0>Sleep</font> <font color=blue>Lib</font> &quot;<font color=red>kernel32</font>&quot; (<font color=blue>ByVal</font> dwMilliseconds <font color=blue>As Long</font>)<br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>SetTimer</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> uElapse <font color=blue>As Long</font>, <font color=blue>ByVal</font> lpTimerFunc <font color=blue>As LongPtr</font>) <font color=blue>As LongPtr</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>KillTimer</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> nIDEvent <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Private Declare PtrSafe Function</font> <font color=#d000d0>PostMessageA</font> <font color=blue>Lib</font> &quot;<font color=red>User32</font>&quot; ( _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> hWnd <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> wMsg <font color=blue>As Long</font>, _<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>ByVal</font> wParam <font color=blue>As LongPtr</font>, <font color=blue>ByVal</font> lParam <font color=blue>As LongPtr</font>) <font color=blue>As Long</font><br><font color=blue>Dim</font> mhTimer <font color=blue>As LongPtr</font>, mhDlg <font color=blue>As LongPtr</font>, miDlgAnz <font color=blue>As Long</font><br><font color=blue>Dim</font> miBusy <font color=blue>As Long</font></div></div><div style='line-height: 5px;'><br></div></div></div><!--- Signatur ---><div><font size=2 face=Arial>_________<br>viele Gr&uuml;&szlig;e<br><b><span style='font-family: Lucida Calligraphy; color: #802000'>Karl-Heinz</span></b></font></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=51360" target="_blank" title="26.03.2024, 14:08">Zip-Datei-Analysen2023.xlsb</a> (Größe: 64,91 KB / Downloads: 5)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Einlesen von Text- und CSV-Dateien - mal nicht mit PQ]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Einlesen-von-Text-und-CSV-Dateien-mal-nicht-mit-PQ</link>
			<pubDate>Mon, 26 Feb 2024 15:06:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=1">schauan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Einlesen-von-Text-und-CSV-Dateien-mal-nicht-mit-PQ</guid>
			<description><![CDATA[Hallöchen,<br /><br />mittels VBA gibt es verschiedene Möglichkeiten, Textdateien einzulesen. Oftmals handelt es sich um CSV-Dateien, in denen Daten spaltenweise durch Komma oder Semikolon getrennt - je nach Systemeinstellung - enthalten sind. In den Versionen ab 2010 / 2013 gibt es die Möglichkeit, die Daten mittels Powerquery einzulesen und dabei gleich verschiedene Operationen, z.B. Typumwandlungen, Zusammenfassungen von Daten und Spalten und vieles mehr, auszuführen. <br />Zuweilen besteht jedoch immer noch die Anforderung, Daten per VBA einzulesen und zu verarbeiten. <br /><br />Hier sind nun einige Beispielcodes dargestellt, um CSV-Dateien einzulesen. Die Beispiele lassen sich mit wenig Aufwand auch für andere Textdateien umprogrammieren - hier geht es vor allem um den Import der Daten entsprechend der Trennzeichen in einzelne Spalten und Zeilen.<br />Dabei werden hier die Daten komplett in einem Zug eingelesen und innerhalb der Makros in Arrays übernommen und erst am Ende in die Tabelle eingefügt.<br />Die Beispiele sind reichlich kommentiert, sollten Fragen, Hinweise oder Verbesserungsvorschläge auftreten, können die im Forum diskutiert und beantwortet werden.<br />Die eingelesenen Daten werden jeweils versetzt entsprechend den Beispieldaten eingetragen. <br /><br />Beispieldaten:<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Aptos Narrow; color:#000000; border-collapse:collapse; background-color:#FFFFFF; font-size:10px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='62,4pt'><col width='62,4pt'><col width='62,4pt'></colgroup><tr style='background-color:#cacaca'><td></td><td align='middle'>D</td><td align='middle'>E</td><td align='middle'>F</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='left' >Wer</td><td align='left' >Was</td><td align='left' >Anzahl</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >ich</td><td align='left' >auto</td><td align='right' >1</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >du</td><td align='left' >Bike</td><td align='right' >2</td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='left' >er</td><td align='left' >Kutsche</td><td align='right' >3</td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='left' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' >sie</td><td align='left' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' >Roller</td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' >1</td></tr></table><br />... in einer CSV semikolasepariert und einer zweiten Datei kommasepariert<br /><br />Hier nun die Beispiele:<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsm.png" title="" border="0" alt=".xlsm" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=51026" target="_blank" title="26.02.2024, 17:02">Read_Text_File_to_Array.xlsm</a> (Größe: 32,81 KB / Downloads: 0)
<!-- end: postbit_attachments_attachment --><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=51027" target="_blank" title="26.02.2024, 17:05">01_02.zip</a> (Größe: 346 Bytes / Downloads: 0)
<!-- end: postbit_attachments_attachment --><br /><br /><span style="font-weight: bold;" class="mycode_b">1) Einlesen mit dem FileSystemObject und ReadAll</span><br />(einziges Beispiel, in dem die Spalten nicht aufgeteilt werden)<br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtFile_to_Array()<br />'Textfile direkt in 1D Array uebernehmen<br />'mit Scripting.FileSystemObject, Late Binding<br />'2D Array mit Delimiter siehe andere Beispiele<br />'Variablendeklarationen<br />Dim objFSO As Object, objFile As Object<br />Dim strFile&#36;, arrTxt<br />'Pfad+Dateiname zuweisen<br />strFile = "C:&#92;Test&#92;01_ich.csv"<br />'FSO setzen<br />Set objFSO = CreateObject("Scripting.FileSystemObject")<br />'Dateiobjekt oeffnen / zuweisen<br />Set objFile = objFSO.OpenTextFile(strFile, 1)<br />'komplettes File in Array einlesen<br />arrTxt = Split(objFile.Readall, vbNewLine)<br />'Array ausgeben.<br />Worksheets("TxtToArr").Range("A1").Resize(UBound(arrTxt) + 1, 1).Value = Application.Transpose(arrTxt)<br />End Sub</code></div></div><br /><span style="font-weight: bold;" class="mycode_b">2) Einlesen mit Open... For Input und Input/LOF</span><br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtFileDelim_to_array_1()<br />'Textfile direkt in Array uebernehmen<br />'mit Open ... For Input und Input<br />'Variablendeklarationen<br />Dim strDelim&#36;, strFile&#36;, strCont&#36;<br />Dim iCnt1%, iCnt2%, iFree%<br />Dim arrLines() As String, arrData() As String, arrTmp() As String<br />Dim lRow&amp;, lColumn&amp;<br />'Trennzeichen festlegen<br />strDelim = ";"<br />'Pfad+Dateiname zuweisen<br />strFile = "C:&#92;Test&#92;01_ich.csv"<br />'Startzeile festlegen<br />lRow = 0<br />'Filenummer fuer Oeffnen der Datei ermitteln und zuweisen<br />iFree = FreeFile<br />'Datei zum Einlesen oeffnen<br />Open strFile For Input As iFree<br />'Datei komplett einlesen<br />strCont = Input(LOF(iFree), iFree)<br />'Datei schliessen<br />Close iFree<br />'Zeilen trennen<br />arrLines() = Split(strCont, vbNewLine)<br />'Schleife ueber alle "Zeilen" im Array<br />For iCnt1 = LBound(arrLines) To UBound(arrLines)<br />  'wenn in der Zeile was steht, dann<br />  If Len(Trim(arrLines(iCnt1))) &lt;&gt; 0 Then<br />    'Zeile in Spalten trennen<br />    arrTmp = Split(arrLines(iCnt1), strDelim)<br />    'Spaltenzahl ermitteln und zuweisen<br />    lColumn = UBound(arrTmp)<br />    'temp. A. entsprechend Spalten neu dimensionieren<br />    ReDim Preserve arrData(lColumn, lRow)<br />    'Schleife ueber Spalten des temp.A.<br />    For iCnt2 = LBound(arrTmp) To UBound(arrTmp)<br />      'Daten in die entsprechende Array-"Zelle" uebernehmen<br />      arrData(iCnt2, lRow) = arrTmp(iCnt2)<br />    'Ende Schleife ueber Spalten des temp.A.<br />    Next<br />  'Ende wenn in der Zeile was steht, dann<br />  End If<br />'Zeilenzaehler hochsetzen<br />lRow = lRow + 1<br />'Ende Schleife ueber alle "Zeilen" im Array<br />Next<br />'Daten im Blatt ausgeben, ab D1 (iCnt1 + 1, iCnt2 + 4)<br />Worksheets("TxtToArr").Cells(1, 4).Resize(lRow - 1, iCnt2).Value = WorksheetFunction.Transpose(arrData())<br />End Sub</code></div></div><br /><span style="font-weight: bold;" class="mycode_b">3) Einlesen mit ADO und getrows</span><br />(Semikolonsepariert)<br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtFileDelimSemi_to_array_2()<br />'Textfile direkt in Array uebernehmen,<br />'zu beachten: Version fuer semikolaseparierte Datei<br />'Splitten der csv mit ";" getrennt (bei abweichender Standardeinstellung z.B. ",")<br />'Hinweis: mmit Systemumstellung, schema.ini im Dateiverzeichnis,<br />'Registry-Hack oder anderen Maßnahmen kann man das Splitten einsparen<br />'mit ADO ... und SQL<br />'benoetigte Verweise:<br />'Microsoft ActiveX Data Objects 2.x Library (latest) or 6.x<br />'Variablendeklarationen<br />Dim rs As New ADODB.Recordset, conn As New ADODB.Connection<br />Dim strPath&#36;, strFile&#36;, strDelim&#36;, strCont&#36;, strSQL&#36;<br />Dim iCnt1%, iCnt2%<br />Dim lRow&amp;, lColumn%<br />Dim arrHead, arrLines, arrTmp, arrData() As String<br />'Trennzeichen festlegen<br />strDelim = ";"<br />'Pfad+Dateiname festlegen<br />strPath = "C:&#92;&#92;Test&#92;&#92;": strFile = "01_ich.csv"<br />'Startzeile festlegen<br />lRow = 0<br />'Verbindungsstring festlegen<br />'32 bit<br />'conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp; strPath &amp; ";Extended Properties=""text;HDR=Yes;FMT=Delimited()"";"<br />'64 bit<br />conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &amp; strPath &amp; ";Extended Properties=""text;HDR=Yes;FMT=CustomDelimited(;)"";"<br />'Datenabfrage<br />strSQL = "SELECT * FROM [01_Ich.csv]"<br />'Mit dem Recordset<br />With rs<br />  'Connection + Einstellungen<br />  .ActiveConnection = conn<br />  .CursorType = adOpenKeyset<br />  .LockType = adLockOptimistic<br />  'Verbindung mit SQL-Abfrage oeffnen<br />'  .Open "SELECT * FROM [01_Ich.csv]"<br />  .Open strSQL ', conn<br />  'Ergebnis ausgeben, Spaltenbezeichnungen (Ueberschriften) und Daten<br />  'AO geht davon aus, dass oben die Spaltenbezeichnungen stehen<br />  arrHead = Split(.Fields(0).Name, strDelim)<br />  arrLines = WorksheetFunction.Transpose(.GetRows)<br />  'Datenabfrage schliessen<br />  .Close<br />'Ende Mit dem Recordset<br />End With<br />'Verbindung schliessen<br />conn.Close<br />'Schleife ueber alle "Zeilen" im Array<br />For iCnt1 = LBound(arrLines, 1) To UBound(arrLines, 1)<br />  'wenn in der Zeile was steht, dann<br />  If Len(Trim(arrLines(iCnt1, 1))) &lt;&gt; 0 Then<br />    'Zeile in Spalten trennen<br />    arrTmp = Split(arrLines(iCnt1, 1), strDelim)<br />    'Spaltenzahl ermitteln und zuweisen<br />    lColumn = UBound(arrTmp)<br />    'temp. A. entsprechend Spalten neu dimensionieren<br />    ReDim Preserve arrData(lColumn, lRow)<br />    'Schleife ueber Spalten des temp.A.<br />    For iCnt2 = LBound(arrTmp) To UBound(arrTmp)<br />      'Daten in die entsprechende Array-"Zelle" uebernehmen<br />      arrData(iCnt2, lRow) = arrTmp(iCnt2)<br />    'Ende Schleife ueber Spalten des temp.A.<br />    Next<br />  'Ende wenn in der Zeile was steht, dann<br />  End If<br />'Zeilenzaehler hochsetzen<br />lRow = lRow + 1<br />'Ende Schleife ueber alle "Zeilen" im Array<br />Next<br />'Spaltenueberschriften eintragen, ab H1<br />Worksheets("TxtToArr").Cells(1, 9).Resize(1, UBound(arrHead) + 1).Value = arrHead<br />'Daten im Blatt ausgeben, ab H2<br />Worksheets("TxtToArr").Cells(2, 9).Resize(UBound(arrData, 2) + 1, UBound(arrData, 1) + 1).Value = WorksheetFunction.Transpose(arrData)<br />End Sub</code></div></div><br /><span style="font-weight: bold;" class="mycode_b">4) Einlesen mit ADO und getrows</span><br />(Kommasepariert)<br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtFileDelimComma_to_array_3()<br />'Textfile direkt in Array uebernehmen,<br />'zu beachten: Version fuer commaseparierte Datei<br />'mit ADO ... und SQL<br />'benoetigte Verweise:<br />'Microsoft ActiveX Data Objects 2.x Library (latest) or 6.x<br />'Variablendeklarationen<br />Dim rs As New ADODB.Recordset, conn As New ADODB.Connection<br />Dim strPath&#36;, strFile&#36;<br />Dim iCnt%<br />Dim arrHead, arrLines<br />'Pfad+Dateiname festlegen, 2. Beispielfile ist Kommagetrennt!<br />strPath = "C:&#92;&#92;Test&#92;&#92;": strFile = "02_ich.csv"<br />'Verbindungsstring festlegen<br />'32 bit<br />'conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp; strPath &amp; ";Extended Properties=""text;HDR=Yes;FMT=Delimited()"";"<br />'64 bit<br />conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &amp; strPath &amp; ";Extended Properties=""text;HDR=Yes;FMT=CustomDelimited(,)"";"<br />'Datenabfrage<br />strSQL = "SELECT * FROM [02_Ich.csv]"<br />'Mit dem Recordset<br />With rs<br />  'Connection + Einstellungen<br />  .ActiveConnection = conn<br />  .CursorType = adOpenKeyset<br />  .LockType = adLockOptimistic<br />  'Verbindung mit SQL-Abfrage oeffnen<br />  .Open strSQL<br />  'Ergebnis ausgeben, Spaltenbezeichnungen (Ueberschriften) und Daten<br />  'AO geht davon aus, dass oben die Spaltenbezeichnungen stehen<br />  'Kopfarray dimensionieren - Kopfnamen werden gesondert ausgelesen!<br />  ReDim arrHead(.Fields.Count - 1)<br />  'Schleife ueber alle Kopfnamen (Feldnamen)<br />  For iCnt = 0 To UBound(arrHead)<br />    'Kopfname uebernehmen<br />    arrHead(iCnt) = .Fields.Item(iCnt).Name<br />  'Ende Schleife ueber alle Kopfnamen (Feldnamen)<br />  Next<br />  'Daten uebernehmen<br />  arrLines = WorksheetFunction.Transpose(.GetRows)<br />  'Datenabfrage schliessen<br />  .Close<br />'Ende Mit dem Recordset<br />End With<br />'Verbindung schliessen<br />conn.Close<br />'Spaltenueberschriften eintragen, ab L1<br />Worksheets("TxtToArr").Cells(1, 14).Resize(1, UBound(arrHead) + 1).Value = arrHead<br />'Daten im Blatt ausgeben, ab J2<br />Worksheets("TxtToArr").Cells(2, 14).Resize(UBound(arrLines, 1), UBound(arrLines, 2)).Value = (arrLines)<br />End Sub</code></div></div><br /><span style="font-weight: bold;" class="mycode_b">5) Einlesen mit dem und TextStream/Readall</span><br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtStream_ToArray()<br />'einige Konstanten - zur Info und Verwendung<br />Const ForReading = 1, ForWriting = 2, ForAppending = 8<br />'Format = Systemvorgabe, Unicode, ASCII<br />Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0<br />'Variablendeklarationen<br />Dim objFSO As Object, objFile As Object, objTxtStr As Object<br />Dim strFile&#36;, strDelom&#36;, arrLines, arrTmp, arrData() As String<br />'Pfad+Dateiname zuweisen<br />strFile = "C:&#92;Test&#92;01_ich.csv"<br />'Trennzeichen festlegen<br />strDelim = ";"<br />'FSO setzen<br />Set objFSO = CreateObject("Scripting.FileSystemObject")<br />'Dateiobjekt  zuweisen<br />Set objFile = objFSO.GetFile(strFile)<br />'Dateiobjekt oeffnen<br />Set objTxtStr = objFile.OpenAsTextStream(ForReading, TristateUseDefault)<br />'Dateiinhalt auslesen und an Array zuweisen<br />arrLines = Split(objTxtStr.Readall, vbNewLine)<br />'Dateiobjekt schliessen<br />objTxtStr.Close<br />'Startzeile festlegen<br />lRow = 0<br />'Schleife ueber alle "Zeilen" im Array<br />For iCnt1 = LBound(arrLines) To UBound(arrLines)<br />  'wenn in der Zeile was steht, dann<br />  If Len(Trim(arrLines(iCnt1))) &lt;&gt; 0 Then<br />    'Zeile in Spalten trennen<br />    arrTmp = Split(arrLines(iCnt1), strDelim)<br />    'Spaltenzahl ermitteln und zuweisen<br />    lColumn = UBound(arrTmp)<br />    'temp. A. entsprechend Spalten neu dimensionieren<br />    ReDim Preserve arrData(lColumn, lRow)<br />    'Schleife ueber Spalten des temp.A.<br />    For iCnt2 = LBound(arrTmp) To UBound(arrTmp)<br />      'Daten in die entsprechende Array-"Zelle" uebernehmen<br />      arrData(iCnt2, lRow) = arrTmp(iCnt2)<br />    'Ende Schleife ueber Spalten des temp.A.<br />    Next<br />  'Ende wenn in der Zeile was steht, dann<br />  End If<br />'Zeilenzaehler hochsetzen<br />lRow = lRow + 1<br />'Ende Schleife ueber alle "Zeilen" im Array<br />Next<br />'Daten im Blatt ausgeben, ab D1 (iCnt1 + 1, iCnt2 + 4)<br />Worksheets("TxtToArr").Cells(1, 19).Resize(UBound(arrData, 2) + 1, UBound(arrData, 1) + 1).Value = WorksheetFunction.Transpose(arrData)<br />End Sub</code></div></div>]]></description>
			<content:encoded><![CDATA[Hallöchen,<br /><br />mittels VBA gibt es verschiedene Möglichkeiten, Textdateien einzulesen. Oftmals handelt es sich um CSV-Dateien, in denen Daten spaltenweise durch Komma oder Semikolon getrennt - je nach Systemeinstellung - enthalten sind. In den Versionen ab 2010 / 2013 gibt es die Möglichkeit, die Daten mittels Powerquery einzulesen und dabei gleich verschiedene Operationen, z.B. Typumwandlungen, Zusammenfassungen von Daten und Spalten und vieles mehr, auszuführen. <br />Zuweilen besteht jedoch immer noch die Anforderung, Daten per VBA einzulesen und zu verarbeiten. <br /><br />Hier sind nun einige Beispielcodes dargestellt, um CSV-Dateien einzulesen. Die Beispiele lassen sich mit wenig Aufwand auch für andere Textdateien umprogrammieren - hier geht es vor allem um den Import der Daten entsprechend der Trennzeichen in einzelne Spalten und Zeilen.<br />Dabei werden hier die Daten komplett in einem Zug eingelesen und innerhalb der Makros in Arrays übernommen und erst am Ende in die Tabelle eingefügt.<br />Die Beispiele sind reichlich kommentiert, sollten Fragen, Hinweise oder Verbesserungsvorschläge auftreten, können die im Forum diskutiert und beantwortet werden.<br />Die eingelesenen Daten werden jeweils versetzt entsprechend den Beispieldaten eingetragen. <br /><br />Beispieldaten:<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Aptos Narrow; color:#000000; border-collapse:collapse; background-color:#FFFFFF; font-size:10px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='62,4pt'><col width='62,4pt'><col width='62,4pt'></colgroup><tr style='background-color:#cacaca'><td></td><td align='middle'>D</td><td align='middle'>E</td><td align='middle'>F</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='left' >Wer</td><td align='left' >Was</td><td align='left' >Anzahl</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >ich</td><td align='left' >auto</td><td align='right' >1</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >du</td><td align='left' >Bike</td><td align='right' >2</td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='left' >er</td><td align='left' >Kutsche</td><td align='right' >3</td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='left' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' >sie</td><td align='left' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' >Roller</td><td align='right' style='border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;' >1</td></tr></table><br />... in einer CSV semikolasepariert und einer zweiten Datei kommasepariert<br /><br />Hier nun die Beispiele:<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsm.png" title="" border="0" alt=".xlsm" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=51026" target="_blank" title="26.02.2024, 17:02">Read_Text_File_to_Array.xlsm</a> (Größe: 32,81 KB / Downloads: 0)
<!-- end: postbit_attachments_attachment --><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=51027" target="_blank" title="26.02.2024, 17:05">01_02.zip</a> (Größe: 346 Bytes / Downloads: 0)
<!-- end: postbit_attachments_attachment --><br /><br /><span style="font-weight: bold;" class="mycode_b">1) Einlesen mit dem FileSystemObject und ReadAll</span><br />(einziges Beispiel, in dem die Spalten nicht aufgeteilt werden)<br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtFile_to_Array()<br />'Textfile direkt in 1D Array uebernehmen<br />'mit Scripting.FileSystemObject, Late Binding<br />'2D Array mit Delimiter siehe andere Beispiele<br />'Variablendeklarationen<br />Dim objFSO As Object, objFile As Object<br />Dim strFile&#36;, arrTxt<br />'Pfad+Dateiname zuweisen<br />strFile = "C:&#92;Test&#92;01_ich.csv"<br />'FSO setzen<br />Set objFSO = CreateObject("Scripting.FileSystemObject")<br />'Dateiobjekt oeffnen / zuweisen<br />Set objFile = objFSO.OpenTextFile(strFile, 1)<br />'komplettes File in Array einlesen<br />arrTxt = Split(objFile.Readall, vbNewLine)<br />'Array ausgeben.<br />Worksheets("TxtToArr").Range("A1").Resize(UBound(arrTxt) + 1, 1).Value = Application.Transpose(arrTxt)<br />End Sub</code></div></div><br /><span style="font-weight: bold;" class="mycode_b">2) Einlesen mit Open... For Input und Input/LOF</span><br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtFileDelim_to_array_1()<br />'Textfile direkt in Array uebernehmen<br />'mit Open ... For Input und Input<br />'Variablendeklarationen<br />Dim strDelim&#36;, strFile&#36;, strCont&#36;<br />Dim iCnt1%, iCnt2%, iFree%<br />Dim arrLines() As String, arrData() As String, arrTmp() As String<br />Dim lRow&amp;, lColumn&amp;<br />'Trennzeichen festlegen<br />strDelim = ";"<br />'Pfad+Dateiname zuweisen<br />strFile = "C:&#92;Test&#92;01_ich.csv"<br />'Startzeile festlegen<br />lRow = 0<br />'Filenummer fuer Oeffnen der Datei ermitteln und zuweisen<br />iFree = FreeFile<br />'Datei zum Einlesen oeffnen<br />Open strFile For Input As iFree<br />'Datei komplett einlesen<br />strCont = Input(LOF(iFree), iFree)<br />'Datei schliessen<br />Close iFree<br />'Zeilen trennen<br />arrLines() = Split(strCont, vbNewLine)<br />'Schleife ueber alle "Zeilen" im Array<br />For iCnt1 = LBound(arrLines) To UBound(arrLines)<br />  'wenn in der Zeile was steht, dann<br />  If Len(Trim(arrLines(iCnt1))) &lt;&gt; 0 Then<br />    'Zeile in Spalten trennen<br />    arrTmp = Split(arrLines(iCnt1), strDelim)<br />    'Spaltenzahl ermitteln und zuweisen<br />    lColumn = UBound(arrTmp)<br />    'temp. A. entsprechend Spalten neu dimensionieren<br />    ReDim Preserve arrData(lColumn, lRow)<br />    'Schleife ueber Spalten des temp.A.<br />    For iCnt2 = LBound(arrTmp) To UBound(arrTmp)<br />      'Daten in die entsprechende Array-"Zelle" uebernehmen<br />      arrData(iCnt2, lRow) = arrTmp(iCnt2)<br />    'Ende Schleife ueber Spalten des temp.A.<br />    Next<br />  'Ende wenn in der Zeile was steht, dann<br />  End If<br />'Zeilenzaehler hochsetzen<br />lRow = lRow + 1<br />'Ende Schleife ueber alle "Zeilen" im Array<br />Next<br />'Daten im Blatt ausgeben, ab D1 (iCnt1 + 1, iCnt2 + 4)<br />Worksheets("TxtToArr").Cells(1, 4).Resize(lRow - 1, iCnt2).Value = WorksheetFunction.Transpose(arrData())<br />End Sub</code></div></div><br /><span style="font-weight: bold;" class="mycode_b">3) Einlesen mit ADO und getrows</span><br />(Semikolonsepariert)<br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtFileDelimSemi_to_array_2()<br />'Textfile direkt in Array uebernehmen,<br />'zu beachten: Version fuer semikolaseparierte Datei<br />'Splitten der csv mit ";" getrennt (bei abweichender Standardeinstellung z.B. ",")<br />'Hinweis: mmit Systemumstellung, schema.ini im Dateiverzeichnis,<br />'Registry-Hack oder anderen Maßnahmen kann man das Splitten einsparen<br />'mit ADO ... und SQL<br />'benoetigte Verweise:<br />'Microsoft ActiveX Data Objects 2.x Library (latest) or 6.x<br />'Variablendeklarationen<br />Dim rs As New ADODB.Recordset, conn As New ADODB.Connection<br />Dim strPath&#36;, strFile&#36;, strDelim&#36;, strCont&#36;, strSQL&#36;<br />Dim iCnt1%, iCnt2%<br />Dim lRow&amp;, lColumn%<br />Dim arrHead, arrLines, arrTmp, arrData() As String<br />'Trennzeichen festlegen<br />strDelim = ";"<br />'Pfad+Dateiname festlegen<br />strPath = "C:&#92;&#92;Test&#92;&#92;": strFile = "01_ich.csv"<br />'Startzeile festlegen<br />lRow = 0<br />'Verbindungsstring festlegen<br />'32 bit<br />'conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp; strPath &amp; ";Extended Properties=""text;HDR=Yes;FMT=Delimited()"";"<br />'64 bit<br />conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &amp; strPath &amp; ";Extended Properties=""text;HDR=Yes;FMT=CustomDelimited(;)"";"<br />'Datenabfrage<br />strSQL = "SELECT * FROM [01_Ich.csv]"<br />'Mit dem Recordset<br />With rs<br />  'Connection + Einstellungen<br />  .ActiveConnection = conn<br />  .CursorType = adOpenKeyset<br />  .LockType = adLockOptimistic<br />  'Verbindung mit SQL-Abfrage oeffnen<br />'  .Open "SELECT * FROM [01_Ich.csv]"<br />  .Open strSQL ', conn<br />  'Ergebnis ausgeben, Spaltenbezeichnungen (Ueberschriften) und Daten<br />  'AO geht davon aus, dass oben die Spaltenbezeichnungen stehen<br />  arrHead = Split(.Fields(0).Name, strDelim)<br />  arrLines = WorksheetFunction.Transpose(.GetRows)<br />  'Datenabfrage schliessen<br />  .Close<br />'Ende Mit dem Recordset<br />End With<br />'Verbindung schliessen<br />conn.Close<br />'Schleife ueber alle "Zeilen" im Array<br />For iCnt1 = LBound(arrLines, 1) To UBound(arrLines, 1)<br />  'wenn in der Zeile was steht, dann<br />  If Len(Trim(arrLines(iCnt1, 1))) &lt;&gt; 0 Then<br />    'Zeile in Spalten trennen<br />    arrTmp = Split(arrLines(iCnt1, 1), strDelim)<br />    'Spaltenzahl ermitteln und zuweisen<br />    lColumn = UBound(arrTmp)<br />    'temp. A. entsprechend Spalten neu dimensionieren<br />    ReDim Preserve arrData(lColumn, lRow)<br />    'Schleife ueber Spalten des temp.A.<br />    For iCnt2 = LBound(arrTmp) To UBound(arrTmp)<br />      'Daten in die entsprechende Array-"Zelle" uebernehmen<br />      arrData(iCnt2, lRow) = arrTmp(iCnt2)<br />    'Ende Schleife ueber Spalten des temp.A.<br />    Next<br />  'Ende wenn in der Zeile was steht, dann<br />  End If<br />'Zeilenzaehler hochsetzen<br />lRow = lRow + 1<br />'Ende Schleife ueber alle "Zeilen" im Array<br />Next<br />'Spaltenueberschriften eintragen, ab H1<br />Worksheets("TxtToArr").Cells(1, 9).Resize(1, UBound(arrHead) + 1).Value = arrHead<br />'Daten im Blatt ausgeben, ab H2<br />Worksheets("TxtToArr").Cells(2, 9).Resize(UBound(arrData, 2) + 1, UBound(arrData, 1) + 1).Value = WorksheetFunction.Transpose(arrData)<br />End Sub</code></div></div><br /><span style="font-weight: bold;" class="mycode_b">4) Einlesen mit ADO und getrows</span><br />(Kommasepariert)<br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtFileDelimComma_to_array_3()<br />'Textfile direkt in Array uebernehmen,<br />'zu beachten: Version fuer commaseparierte Datei<br />'mit ADO ... und SQL<br />'benoetigte Verweise:<br />'Microsoft ActiveX Data Objects 2.x Library (latest) or 6.x<br />'Variablendeklarationen<br />Dim rs As New ADODB.Recordset, conn As New ADODB.Connection<br />Dim strPath&#36;, strFile&#36;<br />Dim iCnt%<br />Dim arrHead, arrLines<br />'Pfad+Dateiname festlegen, 2. Beispielfile ist Kommagetrennt!<br />strPath = "C:&#92;&#92;Test&#92;&#92;": strFile = "02_ich.csv"<br />'Verbindungsstring festlegen<br />'32 bit<br />'conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp; strPath &amp; ";Extended Properties=""text;HDR=Yes;FMT=Delimited()"";"<br />'64 bit<br />conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &amp; strPath &amp; ";Extended Properties=""text;HDR=Yes;FMT=CustomDelimited(,)"";"<br />'Datenabfrage<br />strSQL = "SELECT * FROM [02_Ich.csv]"<br />'Mit dem Recordset<br />With rs<br />  'Connection + Einstellungen<br />  .ActiveConnection = conn<br />  .CursorType = adOpenKeyset<br />  .LockType = adLockOptimistic<br />  'Verbindung mit SQL-Abfrage oeffnen<br />  .Open strSQL<br />  'Ergebnis ausgeben, Spaltenbezeichnungen (Ueberschriften) und Daten<br />  'AO geht davon aus, dass oben die Spaltenbezeichnungen stehen<br />  'Kopfarray dimensionieren - Kopfnamen werden gesondert ausgelesen!<br />  ReDim arrHead(.Fields.Count - 1)<br />  'Schleife ueber alle Kopfnamen (Feldnamen)<br />  For iCnt = 0 To UBound(arrHead)<br />    'Kopfname uebernehmen<br />    arrHead(iCnt) = .Fields.Item(iCnt).Name<br />  'Ende Schleife ueber alle Kopfnamen (Feldnamen)<br />  Next<br />  'Daten uebernehmen<br />  arrLines = WorksheetFunction.Transpose(.GetRows)<br />  'Datenabfrage schliessen<br />  .Close<br />'Ende Mit dem Recordset<br />End With<br />'Verbindung schliessen<br />conn.Close<br />'Spaltenueberschriften eintragen, ab L1<br />Worksheets("TxtToArr").Cells(1, 14).Resize(1, UBound(arrHead) + 1).Value = arrHead<br />'Daten im Blatt ausgeben, ab J2<br />Worksheets("TxtToArr").Cells(2, 14).Resize(UBound(arrLines, 1), UBound(arrLines, 2)).Value = (arrLines)<br />End Sub</code></div></div><br /><span style="font-weight: bold;" class="mycode_b">5) Einlesen mit dem und TextStream/Readall</span><br /><br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub Read_TxtStream_ToArray()<br />'einige Konstanten - zur Info und Verwendung<br />Const ForReading = 1, ForWriting = 2, ForAppending = 8<br />'Format = Systemvorgabe, Unicode, ASCII<br />Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0<br />'Variablendeklarationen<br />Dim objFSO As Object, objFile As Object, objTxtStr As Object<br />Dim strFile&#36;, strDelom&#36;, arrLines, arrTmp, arrData() As String<br />'Pfad+Dateiname zuweisen<br />strFile = "C:&#92;Test&#92;01_ich.csv"<br />'Trennzeichen festlegen<br />strDelim = ";"<br />'FSO setzen<br />Set objFSO = CreateObject("Scripting.FileSystemObject")<br />'Dateiobjekt  zuweisen<br />Set objFile = objFSO.GetFile(strFile)<br />'Dateiobjekt oeffnen<br />Set objTxtStr = objFile.OpenAsTextStream(ForReading, TristateUseDefault)<br />'Dateiinhalt auslesen und an Array zuweisen<br />arrLines = Split(objTxtStr.Readall, vbNewLine)<br />'Dateiobjekt schliessen<br />objTxtStr.Close<br />'Startzeile festlegen<br />lRow = 0<br />'Schleife ueber alle "Zeilen" im Array<br />For iCnt1 = LBound(arrLines) To UBound(arrLines)<br />  'wenn in der Zeile was steht, dann<br />  If Len(Trim(arrLines(iCnt1))) &lt;&gt; 0 Then<br />    'Zeile in Spalten trennen<br />    arrTmp = Split(arrLines(iCnt1), strDelim)<br />    'Spaltenzahl ermitteln und zuweisen<br />    lColumn = UBound(arrTmp)<br />    'temp. A. entsprechend Spalten neu dimensionieren<br />    ReDim Preserve arrData(lColumn, lRow)<br />    'Schleife ueber Spalten des temp.A.<br />    For iCnt2 = LBound(arrTmp) To UBound(arrTmp)<br />      'Daten in die entsprechende Array-"Zelle" uebernehmen<br />      arrData(iCnt2, lRow) = arrTmp(iCnt2)<br />    'Ende Schleife ueber Spalten des temp.A.<br />    Next<br />  'Ende wenn in der Zeile was steht, dann<br />  End If<br />'Zeilenzaehler hochsetzen<br />lRow = lRow + 1<br />'Ende Schleife ueber alle "Zeilen" im Array<br />Next<br />'Daten im Blatt ausgeben, ab D1 (iCnt1 + 1, iCnt2 + 4)<br />Worksheets("TxtToArr").Cells(1, 19).Resize(UBound(arrData, 2) + 1, UBound(arrData, 1) + 1).Value = WorksheetFunction.Transpose(arrData)<br />End Sub</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Bildschirmlupe - Erstellung eigener externer Fenster]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Bildschirmlupe-Erstellung-eigener-externer-Fenster</link>
			<pubDate>Wed, 06 Sep 2023 14:00:11 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=18350">volti</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Bildschirmlupe-Erstellung-eigener-externer-Fenster</guid>
			<description><![CDATA[Liebe Leserin, lieber Leser,<br /><br />anliegend stelle ich heute mal mein Projekt "Bildschirmlupe" hier zur Verfügung.<br />Wer's brauchen kann, kann das gerne nutzen, natürlich wie immer ohne Gewähr.<br /><br />Sinnvoll wäre die Nutzung als AddIn, bei dem der Startbutton im Ribbon <font color=blue>Start</font> zu finden ist.<br /><br /><H2><font color=#000060>Das Tool</font></H2>Die Bildschirmlupe erlaubt das Anzeigen eines Bildschirmausschnittes oder auch eines gerade markierten Objektes in einem externen Fenster. <br />Der gezeigte Ausschnitt kann in der Lupe <font color=blue>per Mausrad</font> vergrößert oder verkleinert dargestellt werden und bleibt auch nach Umschalten z.B. in ein anderes Tabellenblatt, in eine andere Arbeitsmappe und sogar nach Minimierung von Excel an der gewählten Stelle erhalten.<br /><br />Eine Aktualisierung des Lupeninhalts erfolgt turnusmäßig beim Wechsel der Selektion oder bei Mausklick im Set-Bereich.<br /><br />Die Lupenfläche ist in sechs Bereiche aufgeteilt.<br />Je nach dem, in welchem Bereich der User nun klickt, wird folgende Aktion ausgelöst:<ul><li>Oben links:&nbsp; &nbsp;Neuen Inhalt übernehmen</li><li>Oben Mitte:&nbsp; &nbsp;Verschieben der Lupe an eine beliebige neue Stelle bei gedrückter linker Maustaste</li><li>Oben rechts: &nbsp;Umschalten zwischen Timer- und Nichttimerbetrieb</li><li>Unten links: &nbsp;Verkleinern des Zooms <u>und</u> der Lupengröße</li><li>Unten Mitte: &nbsp;Zoom wieder auf 100% setzen</li><li>Unten rechts: Vergrößern des Zooms <u>und</u> der Lupengröße</li></ul>Zur Größenänderung der Lupe zieht man einfach wie gewohnt mit der Maus am Rahmen.<br /><br />Für eine Übernahme eines Bereichs außerhalb von Excel bzw. an der aktuellen Mausposition kann die Maus ja nicht zum Klicken in der Lupe verwendet werden.<br />In diesem Fall erfolgt die Übernahme mit der Tastenkombination <font color=blue>Strg-Shift</font>. Diese ungewöhnliche Kombination habe ich gewählt, damit andere Programme auf keinen Fall gestört werden.<br /><br />Zur Beendigung der Lupe drückt man die <font color=blue>ESC</font>-Taste oder klickt mit der rechten Maustaste im Lupenbereich.<br /><br /><H2><font color=#000060>Die Programmierung</font></H2>Neben der Nutzung an sich stelle ich diesen Beitrag hier in dieser Rubrik als Workshop ein, weil es ein schönes Beispiel für das Erstellen eines eigenen, externen Fensters ist.<br />Der Code ist vollständig kommentiert und beschreibt beispielhaft, wie man mit den zwei Haupt-Subs die Fenstererstellung und den Fensterbetrieb realisieren kann.<br /><br />Hier sieht man, wie man seiner Anwendung eigene Icons und Cursor verpassen kann, sowie Mausaktivitäten und auch Tastaturanschläge abfängt und zur Steuerung nutzen kann.<br />Zur automatischen, periodischen Übernahme neuer Inhalte in die Lupe ist auch ein Timer integriert. Dieser kann per Mausklick an- oder abgeschaltet werden.<br /><br />Zusätzlich ist noch Code enthalten, der eine Messagebox je nach Lage der Lupe darüber oder darunter platziert, damit der User nicht immer mit der Maus in die Bildschirmmitte fahren muss.<br />Natürlich bekommt diese Messagebox auch ein eigenes Icon.<br />Die Wahl fiel hier auf die API-Messagebox, da sie nur an die Lupe, nicht aber an Excel gebunden sein soll.<br />Das heißt, dass die Messagebox sichtbar bleibt, auch wenn Excel minimiert oder im Hintergrund ist.<br /><br />Vielleicht ist es ja für den einen oder anderen ganz interessant, eigene kleine Zusatztools auf dieser Basis zu kreieren.<br /><br /><u>Zum Schluss noch eine Anmerkung:</u><br />Es handelt sich hier <u>nicht</u> um eine unabhängige Windows-Anwendung.<br />Die Funktionalitäten werden von VBA gehandelt und hierzu läuft abweichend zu anderen Programmen eine entsprechende Do-Schleife. <br />Dementsprechend hängt alles zeitlich mit Excel und VBA zusammen. Andere Makros können nicht zusätzlich betrieben werden.<br /><br />Bitte auch beachten, dass das Tool unbedingt vor der Schließung von Excel <b>beendet</b> werden <b>muss</b>.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=49398" target="_blank" title="06.09.2023, 15:40">Lupe.xlsb</a> (Größe: 108,8 KB / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="AddIn" border="0" alt=".xlam" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=49399" target="_blank" title="06.09.2023, 15:42">Lupe.xlam</a> (Größe: 90,41 KB / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br /><br />So, und nun viel Spaß und Erfolg beim Testen oder Selberbasteln.<br /><br />Gruß <font face="Lucida Handwriting" color =#804040><b>Karl-Heinz</b></font>]]></description>
			<content:encoded><![CDATA[Liebe Leserin, lieber Leser,<br /><br />anliegend stelle ich heute mal mein Projekt "Bildschirmlupe" hier zur Verfügung.<br />Wer's brauchen kann, kann das gerne nutzen, natürlich wie immer ohne Gewähr.<br /><br />Sinnvoll wäre die Nutzung als AddIn, bei dem der Startbutton im Ribbon <font color=blue>Start</font> zu finden ist.<br /><br /><H2><font color=#000060>Das Tool</font></H2>Die Bildschirmlupe erlaubt das Anzeigen eines Bildschirmausschnittes oder auch eines gerade markierten Objektes in einem externen Fenster. <br />Der gezeigte Ausschnitt kann in der Lupe <font color=blue>per Mausrad</font> vergrößert oder verkleinert dargestellt werden und bleibt auch nach Umschalten z.B. in ein anderes Tabellenblatt, in eine andere Arbeitsmappe und sogar nach Minimierung von Excel an der gewählten Stelle erhalten.<br /><br />Eine Aktualisierung des Lupeninhalts erfolgt turnusmäßig beim Wechsel der Selektion oder bei Mausklick im Set-Bereich.<br /><br />Die Lupenfläche ist in sechs Bereiche aufgeteilt.<br />Je nach dem, in welchem Bereich der User nun klickt, wird folgende Aktion ausgelöst:<ul><li>Oben links:&nbsp; &nbsp;Neuen Inhalt übernehmen</li><li>Oben Mitte:&nbsp; &nbsp;Verschieben der Lupe an eine beliebige neue Stelle bei gedrückter linker Maustaste</li><li>Oben rechts: &nbsp;Umschalten zwischen Timer- und Nichttimerbetrieb</li><li>Unten links: &nbsp;Verkleinern des Zooms <u>und</u> der Lupengröße</li><li>Unten Mitte: &nbsp;Zoom wieder auf 100% setzen</li><li>Unten rechts: Vergrößern des Zooms <u>und</u> der Lupengröße</li></ul>Zur Größenänderung der Lupe zieht man einfach wie gewohnt mit der Maus am Rahmen.<br /><br />Für eine Übernahme eines Bereichs außerhalb von Excel bzw. an der aktuellen Mausposition kann die Maus ja nicht zum Klicken in der Lupe verwendet werden.<br />In diesem Fall erfolgt die Übernahme mit der Tastenkombination <font color=blue>Strg-Shift</font>. Diese ungewöhnliche Kombination habe ich gewählt, damit andere Programme auf keinen Fall gestört werden.<br /><br />Zur Beendigung der Lupe drückt man die <font color=blue>ESC</font>-Taste oder klickt mit der rechten Maustaste im Lupenbereich.<br /><br /><H2><font color=#000060>Die Programmierung</font></H2>Neben der Nutzung an sich stelle ich diesen Beitrag hier in dieser Rubrik als Workshop ein, weil es ein schönes Beispiel für das Erstellen eines eigenen, externen Fensters ist.<br />Der Code ist vollständig kommentiert und beschreibt beispielhaft, wie man mit den zwei Haupt-Subs die Fenstererstellung und den Fensterbetrieb realisieren kann.<br /><br />Hier sieht man, wie man seiner Anwendung eigene Icons und Cursor verpassen kann, sowie Mausaktivitäten und auch Tastaturanschläge abfängt und zur Steuerung nutzen kann.<br />Zur automatischen, periodischen Übernahme neuer Inhalte in die Lupe ist auch ein Timer integriert. Dieser kann per Mausklick an- oder abgeschaltet werden.<br /><br />Zusätzlich ist noch Code enthalten, der eine Messagebox je nach Lage der Lupe darüber oder darunter platziert, damit der User nicht immer mit der Maus in die Bildschirmmitte fahren muss.<br />Natürlich bekommt diese Messagebox auch ein eigenes Icon.<br />Die Wahl fiel hier auf die API-Messagebox, da sie nur an die Lupe, nicht aber an Excel gebunden sein soll.<br />Das heißt, dass die Messagebox sichtbar bleibt, auch wenn Excel minimiert oder im Hintergrund ist.<br /><br />Vielleicht ist es ja für den einen oder anderen ganz interessant, eigene kleine Zusatztools auf dieser Basis zu kreieren.<br /><br /><u>Zum Schluss noch eine Anmerkung:</u><br />Es handelt sich hier <u>nicht</u> um eine unabhängige Windows-Anwendung.<br />Die Funktionalitäten werden von VBA gehandelt und hierzu läuft abweichend zu anderen Programmen eine entsprechende Do-Schleife. <br />Dementsprechend hängt alles zeitlich mit Excel und VBA zusammen. Andere Makros können nicht zusätzlich betrieben werden.<br /><br />Bitte auch beachten, dass das Tool unbedingt vor der Schließung von Excel <b>beendet</b> werden <b>muss</b>.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="" border="0" alt=".xlsb" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=49398" target="_blank" title="06.09.2023, 15:40">Lupe.xlsb</a> (Größe: 108,8 KB / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsb.png" title="AddIn" border="0" alt=".xlam" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=49399" target="_blank" title="06.09.2023, 15:42">Lupe.xlam</a> (Größe: 90,41 KB / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br /><br />So, und nun viel Spaß und Erfolg beim Testen oder Selberbasteln.<br /><br />Gruß <font face="Lucida Handwriting" color =#804040><b>Karl-Heinz</b></font>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Excel, Word] Makrorekorder]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Excel-Word-Makrorekorder</link>
			<pubDate>Fri, 17 May 2019 05:53:40 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=1">schauan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Excel-Word-Makrorekorder</guid>
			<description><![CDATA[Microsoft bietet in seinem Office-Paket den Anwendern unter anderem die Programmiersprache VBA - Visual Basic for Applications. Um den Einstieg in die Programmierung zu erleichtern ist z.B. in Word und Excel ein Makrorekorder integriert.<br />Auch wenn der Makrorekorder nicht alle möglichen Aktionen aufzeichnet und der aufgezeichnete Code nicht mit einer professionellen Programmierung vergleichbar ist, so kann man ihn doch als Einstieg und zur Vereinfachung einiger Aufgaben nutzen.<br /><br />Bevor man mit einer Aufzeichnung beginnt, sollte man beachten, dass der Makrorekorder nur die Aktionen aufzeichnet, die man auch ausführt. Wenn z.B. ein Wechsel zwischen Blättern oder Dateien notwendig sein sollte und man tut das bereits vor der Aufzeichnung, fehlt das anschließend bei der Ausführung des Makros. Daher sollte man vor der Aufzeichnung, sofern relevant, möglichst<br />- Bereiche oder Zellen wählen, die nicht zu Beginn der Aktion oder generell nicht betroffen sind<br />- ein Blatt / eine Seite wählen, die nicht zu Beginn der Aktion oder generell nicht betroffen ist<br />- eine Datei wählen, die nicht zu Beginn der Aktion betroffen ist<br />Dadurch soll erreicht werden, dass im Code einen Wechsel in die entsprechenden Bereiche oder Zellen aufgezeichnet wird. Der Makrorekorder zeichnet Positionen nur auf, wenn man dorthin wechselt. Will man z.B. im Excel immer die Zelle A1 kopieren und befindet sich bei der Aufzeichnung bereits in A1, zeichnet der Code nicht auf, dass es um die Zelle A1 geht. Es wird lediglich das Kopieren der aktuellen Auswahl aufgezeichnet. Hat man beim nächsten Ausführen des aufgezeichneten Makros eine andere Zelle oder einen anderen Bereich gewählt, wird dieser kopiert und nicht A1.   <br /><br />Starten kann man den Makrorekorder z.B. unten Links mit dem Aufzeichnungsbutton.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24240" target="_blank" title="17.05.2019, 07:50">Aufzeichnungsbutton.png</a> (Größe: 3,7 KB / Downloads: 111)
<!-- end: postbit_attachments_attachment --><br /><br />Anschließend erscheint ein Dialog, in dem man u.a. den Namen des Makros, eine Tastenkombination, mit der man das Makro starten könnte, und den Speicherort festlegen kann. Anfangs wird das meist die Arbeitsmappe bzw. das Dokument sein. In der persönlichen Arbeitsmappe bzw. der Normal.dotm stehen die Makros dem Anwender in jeder Mappe bzw. jedem Dokument zur Verfügung. <br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24241" target="_blank" title="17.05.2019, 07:50">Dialoge.png</a> (Größe: 6,98 KB / Downloads: 109)
<!-- end: postbit_attachments_attachment --><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24242" target="_blank" title="17.05.2019, 07:51">Dialoge - Spaeicherort.png</a> (Größe: 8,6 KB / Downloads: 97)
<!-- end: postbit_attachments_attachment --><br /><br /><br />Nach Beginn der Aufzeichnung ändert sich der Aufzeichnungsbutton in den Stop-Button.  Nach Abschluss aller Aktionen beendet man damit die Aufzeichnung und kann nun testen, ob das Makro seine Aufgabe korrekt erfüllt.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24243" target="_blank" title="17.05.2019, 07:51">Aufzeichnungsbutton - Stop.png</a> (Größe: 4,32 KB / Downloads: 96)
<!-- end: postbit_attachments_attachment --><br /><br />Mit einer Tastenkombination geht das sofort, ohne wäre nun die Frage, wie. Man kann z.B. ein Objekt einfügen, z.B. eine Form oder ein Bild, und über das Kontextmenü ein Makro zuweisen. Über diesen Weg kann man auch in den VBA-Editor gelangen, dazu aber in einem anderen Beitrag mehr.<br /><br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24244" target="_blank" title="17.05.2019, 07:52">MakroZuweisen.png</a> (Größe: 64,23 KB / Downloads: 96)
<!-- end: postbit_attachments_attachment --><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24245" target="_blank" title="17.05.2019, 07:52">Dialoge-MakroZuweisen.png</a> (Größe: 5,25 KB / Downloads: 59)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Microsoft bietet in seinem Office-Paket den Anwendern unter anderem die Programmiersprache VBA - Visual Basic for Applications. Um den Einstieg in die Programmierung zu erleichtern ist z.B. in Word und Excel ein Makrorekorder integriert.<br />Auch wenn der Makrorekorder nicht alle möglichen Aktionen aufzeichnet und der aufgezeichnete Code nicht mit einer professionellen Programmierung vergleichbar ist, so kann man ihn doch als Einstieg und zur Vereinfachung einiger Aufgaben nutzen.<br /><br />Bevor man mit einer Aufzeichnung beginnt, sollte man beachten, dass der Makrorekorder nur die Aktionen aufzeichnet, die man auch ausführt. Wenn z.B. ein Wechsel zwischen Blättern oder Dateien notwendig sein sollte und man tut das bereits vor der Aufzeichnung, fehlt das anschließend bei der Ausführung des Makros. Daher sollte man vor der Aufzeichnung, sofern relevant, möglichst<br />- Bereiche oder Zellen wählen, die nicht zu Beginn der Aktion oder generell nicht betroffen sind<br />- ein Blatt / eine Seite wählen, die nicht zu Beginn der Aktion oder generell nicht betroffen ist<br />- eine Datei wählen, die nicht zu Beginn der Aktion betroffen ist<br />Dadurch soll erreicht werden, dass im Code einen Wechsel in die entsprechenden Bereiche oder Zellen aufgezeichnet wird. Der Makrorekorder zeichnet Positionen nur auf, wenn man dorthin wechselt. Will man z.B. im Excel immer die Zelle A1 kopieren und befindet sich bei der Aufzeichnung bereits in A1, zeichnet der Code nicht auf, dass es um die Zelle A1 geht. Es wird lediglich das Kopieren der aktuellen Auswahl aufgezeichnet. Hat man beim nächsten Ausführen des aufgezeichneten Makros eine andere Zelle oder einen anderen Bereich gewählt, wird dieser kopiert und nicht A1.   <br /><br />Starten kann man den Makrorekorder z.B. unten Links mit dem Aufzeichnungsbutton.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24240" target="_blank" title="17.05.2019, 07:50">Aufzeichnungsbutton.png</a> (Größe: 3,7 KB / Downloads: 111)
<!-- end: postbit_attachments_attachment --><br /><br />Anschließend erscheint ein Dialog, in dem man u.a. den Namen des Makros, eine Tastenkombination, mit der man das Makro starten könnte, und den Speicherort festlegen kann. Anfangs wird das meist die Arbeitsmappe bzw. das Dokument sein. In der persönlichen Arbeitsmappe bzw. der Normal.dotm stehen die Makros dem Anwender in jeder Mappe bzw. jedem Dokument zur Verfügung. <br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24241" target="_blank" title="17.05.2019, 07:50">Dialoge.png</a> (Größe: 6,98 KB / Downloads: 109)
<!-- end: postbit_attachments_attachment --><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24242" target="_blank" title="17.05.2019, 07:51">Dialoge - Spaeicherort.png</a> (Größe: 8,6 KB / Downloads: 97)
<!-- end: postbit_attachments_attachment --><br /><br /><br />Nach Beginn der Aufzeichnung ändert sich der Aufzeichnungsbutton in den Stop-Button.  Nach Abschluss aller Aktionen beendet man damit die Aufzeichnung und kann nun testen, ob das Makro seine Aufgabe korrekt erfüllt.<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24243" target="_blank" title="17.05.2019, 07:51">Aufzeichnungsbutton - Stop.png</a> (Größe: 4,32 KB / Downloads: 96)
<!-- end: postbit_attachments_attachment --><br /><br />Mit einer Tastenkombination geht das sofort, ohne wäre nun die Frage, wie. Man kann z.B. ein Objekt einfügen, z.B. eine Form oder ein Bild, und über das Kontextmenü ein Makro zuweisen. Über diesen Weg kann man auch in den VBA-Editor gelangen, dazu aber in einem anderen Beitrag mehr.<br /><br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24244" target="_blank" title="17.05.2019, 07:52">MakroZuweisen.png</a> (Größe: 64,23 KB / Downloads: 96)
<!-- end: postbit_attachments_attachment --><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=24245" target="_blank" title="17.05.2019, 07:52">Dialoge-MakroZuweisen.png</a> (Größe: 5,25 KB / Downloads: 59)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Excel] Einstieg in das Thema Ribbons Teil 1]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Excel-Einstieg-in-das-Thema-Ribbons-Teil-1</link>
			<pubDate>Fri, 24 Nov 2017 14:58:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=1">schauan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Excel-Einstieg-in-das-Thema-Ribbons-Teil-1</guid>
			<description><![CDATA[Hallo,<br /><br />ich habe hier eine kurze Einleitung zum Thema Ribbons unter Excel 2016 - derzeit nur zum Download. Im Internet findet man zwar viel zum Thema, aber oft sind die Seiten bei 2007 stehengeblieben. Seitens Microsoft erfolgten jedoch mit steigender Versionsnummer immer wieder Änderungen, sodass hier doch das eine oder andere unter 2016 nicht korrekt funktioniert bzw. meine Beispiele nicht unbedingt in den älteren Versionen.  <br /><br />In diesem ersten Teil geht es darum, was man alles so ohne Programmierung anstellen kann, und das ist gar nicht wenig. Schaut es Euch einfach mal an. In der PowerPoint erfahrt Ihr, wie's geht. Beachtet auch die "Notizen" innerhalb der PowerPoint.  Einschalten könnt Ihr die im Ansicht-Ribbon so etwa in der Mitte, Schaltfläche "Notizen". <br /><br />Die "Example*.xlsx" haben noch die Nummer der PowerPoint-Folie, in der sie behandelt werden.<br /><br />Für Fragen und Anregungen zum Thema nutzt bitte den Diskussionsbereich zu den Beispielen.<br /><br />Hier auch noch ein paar Links zum Thema:<br /><br />René Holtz (mumpel)<br /><a href="http://www.rholtz-office.de/ribbonx/einfuehrung" target="_blank" rel="noopener" class="mycode_url">http://www.rholtz-office.de/ribbonx/einfuehrung</a><br /><br />John Walkenbach<br /><a href="https://powerspreadsheets.com/custom-excel-ribbon/" target="_blank" rel="noopener" class="mycode_url">https://powerspreadsheets.com/custom-excel-ribbon/</a><br /><br />Ron de Bruin<br /><a href="http://www.rondebruin.nl/win/s2/win001.htm" target="_blank" rel="noopener" class="mycode_url">http://www.rondebruin.nl/win/s2/win001.htm</a><br /><br />ein Tool von einem anderer Anbieter<br /><a href="http://www.ribboncreator2016.de/" target="_blank" rel="noopener" class="mycode_url">http://www.ribboncreator2016.de/</a><br /><br />André Minhorst, ‎Melanie Breden<br /><a href="https://books.google.de/books?id=qdGcfj0tBawC&amp;pg=PA29&amp;lpg=PA29&amp;dq=excel+ribbon+programmierung&amp;source=bl&amp;ots=dgTplYQSfk&amp;sig=-hK_qsNyDnLJmTu4wcU6LLhinWY&amp;hl=de&amp;sa=X&amp;ved=0ahUKEwidj6ryj-bXAhUG7hoKHUhRB4w4ChDoAQhiMAg#v=onepage&amp;q=excel%20ribbon%20programmierung&amp;f=false" target="_blank" rel="noopener" class="mycode_url">https://books.google.de/books?id=qdGcfj0tBawC&pg=PA29&lpg=PA29&dq=excel+ribbon+programmierung&source=bl&ots=dgTplYQSfk&sig=-hK_qsNyDnLJmTu4wcU6LLhinWY&hl=de&sa=X&ved=0ahUKEwidj6ryj-bXAhUG7hoKHUhRB4w4ChDoAQhiMAg#v=onepage&q=excel%20ribbon%20programmierung&f=false</a><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsm.png" title="" border="0" alt=".xlsm" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14640" target="_blank" title="24.11.2017, 16:53">Example-1.xlsm</a> (Größe: 125,27 KB / Downloads: 28)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14641" target="_blank" title="24.11.2017, 16:54">Example-2-Folie17.xlsx</a> (Größe: 8,08 KB / Downloads: 14)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14642" target="_blank" title="24.11.2017, 16:54">Example-3-Folie18.xlsx</a> (Größe: 8,12 KB / Downloads: 12)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14643" target="_blank" title="24.11.2017, 16:54">Example-4-Folie19.xlsx</a> (Größe: 8,73 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14644" target="_blank" title="24.11.2017, 16:54">Example-5-Folie20.xlsx</a> (Größe: 8,76 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14645" target="_blank" title="24.11.2017, 16:54">Example-6-Folie21.xlsx</a> (Größe: 8,85 KB / Downloads: 12)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/ppt.gif" title="Microsoft PowerPoint 2007 Document" border="0" alt=".pptx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14646" target="_blank" title="24.11.2017, 16:55">Ribbon-Aufbau.pptx</a> (Größe: 861,42 KB / Downloads: 40)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Hallo,<br /><br />ich habe hier eine kurze Einleitung zum Thema Ribbons unter Excel 2016 - derzeit nur zum Download. Im Internet findet man zwar viel zum Thema, aber oft sind die Seiten bei 2007 stehengeblieben. Seitens Microsoft erfolgten jedoch mit steigender Versionsnummer immer wieder Änderungen, sodass hier doch das eine oder andere unter 2016 nicht korrekt funktioniert bzw. meine Beispiele nicht unbedingt in den älteren Versionen.  <br /><br />In diesem ersten Teil geht es darum, was man alles so ohne Programmierung anstellen kann, und das ist gar nicht wenig. Schaut es Euch einfach mal an. In der PowerPoint erfahrt Ihr, wie's geht. Beachtet auch die "Notizen" innerhalb der PowerPoint.  Einschalten könnt Ihr die im Ansicht-Ribbon so etwa in der Mitte, Schaltfläche "Notizen". <br /><br />Die "Example*.xlsx" haben noch die Nummer der PowerPoint-Folie, in der sie behandelt werden.<br /><br />Für Fragen und Anregungen zum Thema nutzt bitte den Diskussionsbereich zu den Beispielen.<br /><br />Hier auch noch ein paar Links zum Thema:<br /><br />René Holtz (mumpel)<br /><a href="http://www.rholtz-office.de/ribbonx/einfuehrung" target="_blank" rel="noopener" class="mycode_url">http://www.rholtz-office.de/ribbonx/einfuehrung</a><br /><br />John Walkenbach<br /><a href="https://powerspreadsheets.com/custom-excel-ribbon/" target="_blank" rel="noopener" class="mycode_url">https://powerspreadsheets.com/custom-excel-ribbon/</a><br /><br />Ron de Bruin<br /><a href="http://www.rondebruin.nl/win/s2/win001.htm" target="_blank" rel="noopener" class="mycode_url">http://www.rondebruin.nl/win/s2/win001.htm</a><br /><br />ein Tool von einem anderer Anbieter<br /><a href="http://www.ribboncreator2016.de/" target="_blank" rel="noopener" class="mycode_url">http://www.ribboncreator2016.de/</a><br /><br />André Minhorst, ‎Melanie Breden<br /><a href="https://books.google.de/books?id=qdGcfj0tBawC&amp;pg=PA29&amp;lpg=PA29&amp;dq=excel+ribbon+programmierung&amp;source=bl&amp;ots=dgTplYQSfk&amp;sig=-hK_qsNyDnLJmTu4wcU6LLhinWY&amp;hl=de&amp;sa=X&amp;ved=0ahUKEwidj6ryj-bXAhUG7hoKHUhRB4w4ChDoAQhiMAg#v=onepage&amp;q=excel%20ribbon%20programmierung&amp;f=false" target="_blank" rel="noopener" class="mycode_url">https://books.google.de/books?id=qdGcfj0tBawC&pg=PA29&lpg=PA29&dq=excel+ribbon+programmierung&source=bl&ots=dgTplYQSfk&sig=-hK_qsNyDnLJmTu4wcU6LLhinWY&hl=de&sa=X&ved=0ahUKEwidj6ryj-bXAhUG7hoKHUhRB4w4ChDoAQhiMAg#v=onepage&q=excel%20ribbon%20programmierung&f=false</a><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsm.png" title="" border="0" alt=".xlsm" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14640" target="_blank" title="24.11.2017, 16:53">Example-1.xlsm</a> (Größe: 125,27 KB / Downloads: 28)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14641" target="_blank" title="24.11.2017, 16:54">Example-2-Folie17.xlsx</a> (Größe: 8,08 KB / Downloads: 14)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14642" target="_blank" title="24.11.2017, 16:54">Example-3-Folie18.xlsx</a> (Größe: 8,12 KB / Downloads: 12)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14643" target="_blank" title="24.11.2017, 16:54">Example-4-Folie19.xlsx</a> (Größe: 8,73 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14644" target="_blank" title="24.11.2017, 16:54">Example-5-Folie20.xlsx</a> (Größe: 8,76 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/xlsx.png" title="" border="0" alt=".xlsx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14645" target="_blank" title="24.11.2017, 16:54">Example-6-Folie21.xlsx</a> (Größe: 8,85 KB / Downloads: 12)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/ppt.gif" title="Microsoft PowerPoint 2007 Document" border="0" alt=".pptx" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=14646" target="_blank" title="24.11.2017, 16:55">Ribbon-Aufbau.pptx</a> (Größe: 861,42 KB / Downloads: 40)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Excel] Umbenennen von Checkboxen]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Excel-Umbenennen-von-Checkboxen</link>
			<pubDate>Mon, 29 May 2017 09:34:50 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=3">Rabe</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Excel-Umbenennen-von-Checkboxen</guid>
			<description><![CDATA[&copy; atilla:<br /><br />Anfrage: <a href="http://www.clever-excel-forum.de/Thread-Wie-kann-man-Checkboxen-umbenennen?pid=81763#pid81763" target="_blank" rel="noopener" class="mycode_url">http://www.clever-excel-forum.de/Thread-...3#pid81763</a><br /><blockquote class="mycode_quote"><cite>Zitat:</cite>es gibt doch irgendwo in Excel sone Übersicht, wo man sehen kann wie alle Checkboxen heissen und so. Wo finde ich die nochmal? Und wie benenne ich Checkboxen um? Wenn ich einfach oben links die Checkbox umbenenne ändert der das nur manchmal (also bei manchen Kontrollkästchen) und es ändert sich dadruch zwar der angezeigte Name, jedoch nicht der wohl hinterlegte Name. Denn wenn man das Kontrollkästchen dann per Makro anspricht, reagiert es auf seinen alten Namen, aber nicht auf den, der dann oben links durch die Änderung angezeigt wird.</blockquote><br />1. Ribbonleiste -> Seitenlayout -> Gruppe: Anordnen -> Aufgabenbereich<br />Rechts sind alle eingefügten objekte zu sehen.<br />Dort mit Klick auswählen und Namen ändern<br /><br />2. Im Namensbereich, da wo sonst die Zelladressen zu sehen sind<br />vorher die Box mit Rechtsklick auswählen, den Namen im Namensbereich ändern und unbedingt mit ENTER abschließen<br /><br />3. per VBA:<br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub kontrolkästchen_umbenennen()<br />  Dim i As Integer<br />  With ActiveSheet<br />      For i = 1 To .CheckBoxes.Count<br />         .CheckBoxes(i).Name = "CheckBox" &amp; i<br />      Next<br />  End With<br />End Sub</code></div></div><br />Wenn die Indizes sich in die Quere kommen, kann man die Schleife doppelt laufen lassen, so dass man Namen wählt, die auf keinen Fall vorhanden sind und dann die Benennung mit CheckBox & Index vornimmt.]]></description>
			<content:encoded><![CDATA[&copy; atilla:<br /><br />Anfrage: <a href="http://www.clever-excel-forum.de/Thread-Wie-kann-man-Checkboxen-umbenennen?pid=81763#pid81763" target="_blank" rel="noopener" class="mycode_url">http://www.clever-excel-forum.de/Thread-...3#pid81763</a><br /><blockquote class="mycode_quote"><cite>Zitat:</cite>es gibt doch irgendwo in Excel sone Übersicht, wo man sehen kann wie alle Checkboxen heissen und so. Wo finde ich die nochmal? Und wie benenne ich Checkboxen um? Wenn ich einfach oben links die Checkbox umbenenne ändert der das nur manchmal (also bei manchen Kontrollkästchen) und es ändert sich dadruch zwar der angezeigte Name, jedoch nicht der wohl hinterlegte Name. Denn wenn man das Kontrollkästchen dann per Makro anspricht, reagiert es auf seinen alten Namen, aber nicht auf den, der dann oben links durch die Änderung angezeigt wird.</blockquote><br />1. Ribbonleiste -> Seitenlayout -> Gruppe: Anordnen -> Aufgabenbereich<br />Rechts sind alle eingefügten objekte zu sehen.<br />Dort mit Klick auswählen und Namen ändern<br /><br />2. Im Namensbereich, da wo sonst die Zelladressen zu sehen sind<br />vorher die Box mit Rechtsklick auswählen, den Namen im Namensbereich ändern und unbedingt mit ENTER abschließen<br /><br />3. per VBA:<br /><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Sub kontrolkästchen_umbenennen()<br />  Dim i As Integer<br />  With ActiveSheet<br />      For i = 1 To .CheckBoxes.Count<br />         .CheckBoxes(i).Name = "CheckBox" &amp; i<br />      Next<br />  End With<br />End Sub</code></div></div><br />Wenn die Indizes sich in die Quere kommen, kann man die Schleife doppelt laufen lassen, so dass man Namen wählt, die auf keinen Fall vorhanden sind und dann die Benennung mit CheckBox & Index vornimmt.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Excel] Bereichsnamen - Teil 4b - Dynamische Diagramme]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Excel-Bereichsnamen-Teil-4b-Dynamische-Diagramme</link>
			<pubDate>Sat, 06 May 2017 20:26:11 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=1">schauan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Excel-Bereichsnamen-Teil-4b-Dynamische-Diagramme</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Beispiel 7<br />Datenbasis Tabelle (Listobject)</span><br /><br />Einen Sonderfall bei der dynamischen Gestaltung von Diagrammen bilden Tabellen. Bezieht sich der Datenbereich eines Diagramms auf den kompletten Bereich der Tabelle, ist keine Definition benannter Bereiche notwendig. Die hier dargestellte Tabelle wurde mit dem entsprechenden Menü erzeugt. <br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='4'>Arbeitsblatt mit dem Namen 'Chart2'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='left' >Tage</td><td align='left' >ich</td><td align='left' >du</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >heute</td><td align='right' >1</td><td align='right' >6</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >morgen</td><td align='right' >2</td><td align='right' >5</td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='left' >übermorgen</td><td align='right' >3</td><td align='right' >4</td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='left' >Sonntag</td><td align='right' >1</td><td align='right' >1</td></tr><tr><td style='background-color:#cacaca' align='middle'>6</td><td align='left' >Montag</td><td align='right' >1</td><td align='right' >2</td></tr><tr><td style='background-color:#cacaca' align='middle'>7</td><td align='left' >Dienstag</td><td align='right' >3</td><td align='right' >3</td></tr><tr><td style='background-color:#cacaca' align='middle'>8</td><td align='left' >Mittwoch</td><td align='right' >4</td><td align='right' >4</td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br />Nochmal als Bild:<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11199" target="_blank" title="06.05.2017, 22:16">DiagrammTabelle.png</a> (Größe: 3,65 KB / Downloads: 25)
<!-- end: postbit_attachments_attachment --><br /><br />Der Datenbereich der Tabelle hat zwar einen Namen, dieser wird bei der Zuordnung der Daten des Diagrammes nicht benötigt und angezeigt. <br />Zur Erstellung des Diagrammes wird der gesamte Tabellenbereich, hier A1:C8, markiert und anschließend das Diagramm eingefügt. Wo nun genau Excel die Zuordnung zur Tabelle hinterlegt, habe ich noch nicht gesucht. In den Rubriken, wie im Beispiel 6, findet man nur die Zellbezüge.<br />Im Gegensatz zum Beispiel 6 wird hier das Diagramm ohne benannte Bereiche dynamisch angepasst, sowohl hinsichtlich der Rubriken als auch der Datenreihen. <br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11200" target="_blank" title="06.05.2017, 22:20">DiagramNamen2.png</a> (Größe: 9,36 KB / Downloads: 26)
<!-- end: postbit_attachments_attachment --><br /><br /><span style="font-weight: bold;" class="mycode_b">Hinweise für die Verwendung von Namen mit Tabellen</span><br />Im Gegensatz zu den bisherigen Formellösungen in Zusammenhang mit der Berechnung der letzten Zeilen und Spalten ist die Definition bei Tabellen sehr einfach.<br />Allerdings kann man durch die einfache Bezeichnung entsprechend der Spaltenbezeichnungen meist auch auf eine zusätzliche Namensdefinition verzichten. Für die Tabellenbezeichnung sollte man ggf. eine beschreibende Bezeichnung finden.<br /><br />Hier noch kurz ein paar Formeln mit Zugriff auf die Spalten:<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:bold; font-style:normal; '><colgroup><col width='28pt'><col width='119,25pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='2'>Arbeitsblatt mit dem Namen 'Chart2'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>B</td></tr><tr><td style='background-color:#cacaca' align='middle'>46</td><td align='left' >kompletter Bereich:</td></tr><tr><td style='background-color:#cacaca' align='middle'>47</td><td align='left' style='font-weight:normal; ' >=Tabelle1</td></tr><tr><td style='background-color:#cacaca' align='middle'>48</td><td align='left' >Rubriken:</td></tr><tr><td style='background-color:#cacaca' align='middle'>49</td><td align='left' style='font-weight:normal; ' >_70_Tab1_RUBRIKEN</td></tr><tr><td style='background-color:#cacaca' align='middle'>50</td><td align='left' style='font-weight:normal; ' >=Tabelle1[Tage]</td></tr><tr><td style='background-color:#cacaca' align='middle'>51</td><td align='left' >Ich:</td></tr><tr><td style='background-color:#cacaca' align='middle'>52</td><td align='left' style='font-weight:normal; ' >_71_Tab1_Ich</td></tr><tr><td style='background-color:#cacaca' align='middle'>53</td><td align='left' style='font-weight:normal; ' >=Tabelle1[ich]</td></tr><tr><td style='background-color:#cacaca' align='middle'>54</td><td align='left' >Du:</td></tr><tr><td style='background-color:#cacaca' align='middle'>55</td><td align='left' style='font-weight:normal; ' >_72_Tab1_Du</td></tr><tr><td style='background-color:#cacaca' align='middle'>56</td><td align='left' style='font-weight:normal; ' >=Tabelle1[du]</td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Beispiel 7<br />Datenbasis Tabelle (Listobject)</span><br /><br />Einen Sonderfall bei der dynamischen Gestaltung von Diagrammen bilden Tabellen. Bezieht sich der Datenbereich eines Diagramms auf den kompletten Bereich der Tabelle, ist keine Definition benannter Bereiche notwendig. Die hier dargestellte Tabelle wurde mit dem entsprechenden Menü erzeugt. <br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='4'>Arbeitsblatt mit dem Namen 'Chart2'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='left' >Tage</td><td align='left' >ich</td><td align='left' >du</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >heute</td><td align='right' >1</td><td align='right' >6</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >morgen</td><td align='right' >2</td><td align='right' >5</td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='left' >übermorgen</td><td align='right' >3</td><td align='right' >4</td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='left' >Sonntag</td><td align='right' >1</td><td align='right' >1</td></tr><tr><td style='background-color:#cacaca' align='middle'>6</td><td align='left' >Montag</td><td align='right' >1</td><td align='right' >2</td></tr><tr><td style='background-color:#cacaca' align='middle'>7</td><td align='left' >Dienstag</td><td align='right' >3</td><td align='right' >3</td></tr><tr><td style='background-color:#cacaca' align='middle'>8</td><td align='left' >Mittwoch</td><td align='right' >4</td><td align='right' >4</td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br />Nochmal als Bild:<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11199" target="_blank" title="06.05.2017, 22:16">DiagrammTabelle.png</a> (Größe: 3,65 KB / Downloads: 25)
<!-- end: postbit_attachments_attachment --><br /><br />Der Datenbereich der Tabelle hat zwar einen Namen, dieser wird bei der Zuordnung der Daten des Diagrammes nicht benötigt und angezeigt. <br />Zur Erstellung des Diagrammes wird der gesamte Tabellenbereich, hier A1:C8, markiert und anschließend das Diagramm eingefügt. Wo nun genau Excel die Zuordnung zur Tabelle hinterlegt, habe ich noch nicht gesucht. In den Rubriken, wie im Beispiel 6, findet man nur die Zellbezüge.<br />Im Gegensatz zum Beispiel 6 wird hier das Diagramm ohne benannte Bereiche dynamisch angepasst, sowohl hinsichtlich der Rubriken als auch der Datenreihen. <br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11200" target="_blank" title="06.05.2017, 22:20">DiagramNamen2.png</a> (Größe: 9,36 KB / Downloads: 26)
<!-- end: postbit_attachments_attachment --><br /><br /><span style="font-weight: bold;" class="mycode_b">Hinweise für die Verwendung von Namen mit Tabellen</span><br />Im Gegensatz zu den bisherigen Formellösungen in Zusammenhang mit der Berechnung der letzten Zeilen und Spalten ist die Definition bei Tabellen sehr einfach.<br />Allerdings kann man durch die einfache Bezeichnung entsprechend der Spaltenbezeichnungen meist auch auf eine zusätzliche Namensdefinition verzichten. Für die Tabellenbezeichnung sollte man ggf. eine beschreibende Bezeichnung finden.<br /><br />Hier noch kurz ein paar Formeln mit Zugriff auf die Spalten:<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:bold; font-style:normal; '><colgroup><col width='28pt'><col width='119,25pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='2'>Arbeitsblatt mit dem Namen 'Chart2'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>B</td></tr><tr><td style='background-color:#cacaca' align='middle'>46</td><td align='left' >kompletter Bereich:</td></tr><tr><td style='background-color:#cacaca' align='middle'>47</td><td align='left' style='font-weight:normal; ' >=Tabelle1</td></tr><tr><td style='background-color:#cacaca' align='middle'>48</td><td align='left' >Rubriken:</td></tr><tr><td style='background-color:#cacaca' align='middle'>49</td><td align='left' style='font-weight:normal; ' >_70_Tab1_RUBRIKEN</td></tr><tr><td style='background-color:#cacaca' align='middle'>50</td><td align='left' style='font-weight:normal; ' >=Tabelle1[Tage]</td></tr><tr><td style='background-color:#cacaca' align='middle'>51</td><td align='left' >Ich:</td></tr><tr><td style='background-color:#cacaca' align='middle'>52</td><td align='left' style='font-weight:normal; ' >_71_Tab1_Ich</td></tr><tr><td style='background-color:#cacaca' align='middle'>53</td><td align='left' style='font-weight:normal; ' >=Tabelle1[ich]</td></tr><tr><td style='background-color:#cacaca' align='middle'>54</td><td align='left' >Du:</td></tr><tr><td style='background-color:#cacaca' align='middle'>55</td><td align='left' style='font-weight:normal; ' >_72_Tab1_Du</td></tr><tr><td style='background-color:#cacaca' align='middle'>56</td><td align='left' style='font-weight:normal; ' >=Tabelle1[du]</td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Excel] Bereichsnamen - Teil 4a - Dynamische Diagramme]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Excel-Bereichsnamen-Teil-4a-Dynamische-Diagramme</link>
			<pubDate>Sat, 06 May 2017 20:11:42 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=1">schauan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Excel-Bereichsnamen-Teil-4a-Dynamische-Diagramme</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Dynamische Diagramme</span><br /><br />Eine einfache dynamische Darstellung der Diagramme hat der eine oder andere  vielleicht schon durch Aus- und Einblenden <br />nicht benötigter Zeilen oder Spalten genutzt. <br />Im Dialog zu "Daten auswählen" gibt es dazu einen zusätzlichen Dialog für "Ausgeblendete und leere Zellen"<br />Durch Vorhaltung ausreichend großer Bereiche kann man so auch eine Erweiterung der Darstellung erreichen. <br />In unserem Workshop zu den benannten Bereichen geht es darum, den Datenbereich ohne Vorhaltung auf die Datenmenge anzupassen.<br /><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 6<br />Datenbasis Bereich im Tabellenblatt<br /></span><br />In diesem Beispiel geht es lediglich darum, das Diagramm bei Hinzufügen von weiteren Tagen zu erweitern <br />oder beim Löschen von Tagen einzukürzen.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Chart'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='left' >name</td><td align='middle' >heute</td><td align='middle' >morgen</td><td align='middle' >übermorgen</td><td align='middle' >Sonntag</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >ich</td><td align='middle' >1</td><td align='middle' >2</td><td align='middle' >3</td><td align='middle' >1</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >du</td><td align='middle' >6</td><td align='middle' >5</td><td align='middle' >4</td><td align='middle' >1</td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br />Ich habe für diese Aufgabe 3 benannte Bereiche gebildet.<br />_60_RUBRIKEN<br />_61_ICH<br />_62_DU<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='3' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='302,25pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='3'>Arbeitsblatt mit dem Namen 'Chart'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>B</td><td align='middle'>C</td></tr><tr><td style='background-color:#cacaca' align='middle'>9</td><td align='left' >B1:xx1</td><td align='left' >=&#36;B&#36;1:INDEX(&#36;1:&#36;1;1;VERWEIS(2;1/(&#36;1:&#36;1<Span><</Span>>"");SPALTE(&#36;1:&#36;1)))</td></tr><tr><td style='background-color:#cacaca' align='middle'>10</td><td align='left' >B2:xx2</td><td align='left' >=&#36;B&#36;2:INDEX(&#36;2:&#36;2;1;VERWEIS(2;1/(&#36;2:&#36;2<Span><</Span>>"");SPALTE(&#36;2:&#36;2)))</td></tr><tr><td style='background-color:#cacaca' align='middle'>11</td><td align='left' >B3:xx3</td><td align='left' >=&#36;B&#36;3:INDEX(&#36;3:&#36;3;1;VERWEIS(2;1/(&#36;3:&#36;3<Span><</Span>>"");SPALTE(&#36;3:&#36;3)))</td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br />Wiederum auf Basis der Funktionen INDEX und VERWEIS wird hier für die Datenreihen und die Rubriken / <br />Überschriften die jeweils letzte Spalte festgestellt.<br />Bei Hinzufügen oder Löschen von Daten in den bisher genutzten oder weiteren Spalten erfolgt eine sofortige Umsetzung <br />im Diagramm. <br /><br />Ein Hinzufügen von Datenreihen ist hier nicht vorgesehen. Schaut dazu in das folgende Beispiel. Hier aber erst einmal noch das Diagramm:<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11198" target="_blank" title="06.05.2017, 22:11">DiagramNamen1.png</a> (Größe: 4,31 KB / Downloads: 17)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Dynamische Diagramme</span><br /><br />Eine einfache dynamische Darstellung der Diagramme hat der eine oder andere  vielleicht schon durch Aus- und Einblenden <br />nicht benötigter Zeilen oder Spalten genutzt. <br />Im Dialog zu "Daten auswählen" gibt es dazu einen zusätzlichen Dialog für "Ausgeblendete und leere Zellen"<br />Durch Vorhaltung ausreichend großer Bereiche kann man so auch eine Erweiterung der Darstellung erreichen. <br />In unserem Workshop zu den benannten Bereichen geht es darum, den Datenbereich ohne Vorhaltung auf die Datenmenge anzupassen.<br /><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 6<br />Datenbasis Bereich im Tabellenblatt<br /></span><br />In diesem Beispiel geht es lediglich darum, das Diagramm bei Hinzufügen von weiteren Tagen zu erweitern <br />oder beim Löschen von Tagen einzukürzen.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Chart'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='left' >name</td><td align='middle' >heute</td><td align='middle' >morgen</td><td align='middle' >übermorgen</td><td align='middle' >Sonntag</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >ich</td><td align='middle' >1</td><td align='middle' >2</td><td align='middle' >3</td><td align='middle' >1</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >du</td><td align='middle' >6</td><td align='middle' >5</td><td align='middle' >4</td><td align='middle' >1</td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br />Ich habe für diese Aufgabe 3 benannte Bereiche gebildet.<br />_60_RUBRIKEN<br />_61_ICH<br />_62_DU<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='3' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='302,25pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='3'>Arbeitsblatt mit dem Namen 'Chart'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>B</td><td align='middle'>C</td></tr><tr><td style='background-color:#cacaca' align='middle'>9</td><td align='left' >B1:xx1</td><td align='left' >=&#36;B&#36;1:INDEX(&#36;1:&#36;1;1;VERWEIS(2;1/(&#36;1:&#36;1<Span><</Span>>"");SPALTE(&#36;1:&#36;1)))</td></tr><tr><td style='background-color:#cacaca' align='middle'>10</td><td align='left' >B2:xx2</td><td align='left' >=&#36;B&#36;2:INDEX(&#36;2:&#36;2;1;VERWEIS(2;1/(&#36;2:&#36;2<Span><</Span>>"");SPALTE(&#36;2:&#36;2)))</td></tr><tr><td style='background-color:#cacaca' align='middle'>11</td><td align='left' >B3:xx3</td><td align='left' >=&#36;B&#36;3:INDEX(&#36;3:&#36;3;1;VERWEIS(2;1/(&#36;3:&#36;3<Span><</Span>>"");SPALTE(&#36;3:&#36;3)))</td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br />Wiederum auf Basis der Funktionen INDEX und VERWEIS wird hier für die Datenreihen und die Rubriken / <br />Überschriften die jeweils letzte Spalte festgestellt.<br />Bei Hinzufügen oder Löschen von Daten in den bisher genutzten oder weiteren Spalten erfolgt eine sofortige Umsetzung <br />im Diagramm. <br /><br />Ein Hinzufügen von Datenreihen ist hier nicht vorgesehen. Schaut dazu in das folgende Beispiel. Hier aber erst einmal noch das Diagramm:<br /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.clever-excel-forum.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11198" target="_blank" title="06.05.2017, 22:11">DiagramNamen1.png</a> (Größe: 4,31 KB / Downloads: 17)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Excel] Bereichsnamen - Teil 3 - Navigation / Datenabrufe]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Excel-Bereichsnamen-Teil-3-Navigation-Datenabrufe</link>
			<pubDate>Sat, 06 May 2017 19:59:50 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=1">schauan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Excel-Bereichsnamen-Teil-3-Navigation-Datenabrufe</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Tabellennavigation / Datenabfragen</span><br /><br />Ich habe hier eine kleine Mitarbeitertabelle (MAT) erstellt und den Bereich entsprechend benannt. <br />In den folgenden Beispielen greife ich auf unterschiedliche Art und Weise auf die einzelnen Felder<br />dieser Tabelle zurück.<br />An dieser Stelle möchte ich auch gleich darauf hinweisen, dass bei den Mitarbeitern natürlich auch<br />Doppelungen auftreten können . Das führt zu Problemen bei der korrekten Auswahl.<br />Für eine eindeutige Auswahl wären weitere Angaben nötig - idealerweise Personalnummern.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Daten'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >Name</td><td align='left' >Vorname</td><td align='left' style='background-color:#B7DEE8; ' >Geburtstag</td><td align='right' > </td><td align='left' style='background-color:#FCD5B4; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >Müller</td><td align='left' >Gerd</td><td align='right' >02.02.2012</td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='left' >Meier</td><td align='left' >Marion</td><td align='right' >03.03.2013</td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='left' style='background-color:#B7DEE8; ' >Schulze</td><td align='left' >Horst</td><td align='right' >04.04.2014</td><td align='right' > </td><td align='right' > </td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 4<br />Gezielte Abfragen</span><br />In diesen beiden Abfragen hole ich konkret die Vornamen zu dem in der links benachbarten Zelle eingetragenen<br />Familiennamen. Ich verwende hier einmal den SVERWEIS und einmal den VERWEIS kombiniert mit INDEX.<br />=SVERWEIS(Daten!I13;_5_MAT;2;0)<br />=VERWEIS(2;1/(INDEX(_5_MAT;;1)=A7);INDEX(_5_MAT;;2))<br />mit den Namen _4_Vorname_S und _4_Vorname_V<br /><br />Sofern Marion Meier einen der beiden Herren heitratet und beide den gleichen Familiennamen führen, <br />wird das auch im Ergebnis der Abfragen deutlich - probiert es einfach mal aus. <br />(Anmerkung: Auch wenn Gerd und Horst so zueinander finden, kann man es sehen <img src="https://www.clever-excel-forum.de/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" /><br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='3' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='3'>Arbeitsblatt mit dem Namen 'Daten'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td></tr><tr><td style='background-color:#cacaca' align='middle'>12</td><td align='left' >Müller</td><td align='left' style='background-color:#FFFF00; ' >Gerd</td></tr><tr><td style='background-color:#cacaca' align='middle'>13</td><td align='left' >Müller</td><td align='left' style='background-color:#FFFF00; ' >Gerd</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_4_Vorname_S</td><td>=SVERWEIS(Daten!XFD12;_5_MAT;2;0)</td></tr><tr><td>_4_Vorname_V</td><td>=VERWEIS(2;1/(INDEX(_5_MAT;;1)=Daten!XFD12);INDEX(_5_MAT;;2))</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>B12</td><td><Span style='color:#222222'>=_4_Vorname_S</Span></td></tr><tr><td>B13</td><td><Span style='color:#222222'>=_4_Vorname_V</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 5<br />Flexible Abfragen</span><br />Um flexibel bestimmte Mitarbeiterdaten abrufen zu können, habe ich mir eine Auswahl der Tabellenspalten <br />zusammengestellt. Dazu verwende ich die Gültigkeit und beziehe mich auf die erste Zeile der MAT:<br />=INDEX(_5_MAT;1;)<br />Ich kann nun entsprechend der Spaltenüberschriften auswählen. <br />Sofern eine Spalte eingefügt wird, erweitert sich die Auswahl gleich. Auf ein Anfügen einer Spalte würde die <br />hier gezeigte Lösung nicht reagieren - aber machbar wäre dies auch.<br /><br />Für die Berechnung der Daten habe ich einen weiteren Namen definiert<br />=_5_MAT_Auswahl<br />Auch hier kommt wieder eine Funktion mit VERWEIS und INDEX zum Einsatz.<br />=VERWEIS(2;1/(INDEX(_5_MAT;;1)=Daten!&#36;A9);INDEX(_5_MAT;;VERGLEICH(Daten!&#36;B9;INDEX(_5_MAT;1;);0)))<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='4'>Arbeitsblatt mit dem Namen 'Daten'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td></tr><tr><td style='background-color:#cacaca' align='middle'>24</td><td align='left' style='background-color:#FCD5B4; ' >Müller</td><td align='left' style='background-color:#FFFF00; ' >Geburtstag</td><td align='right' style='background-color:#FFFF00; ' >02.02.2012</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_5_MAT</td><td>=Daten!&#36;A&#36;2:&#36;C&#36;5</td></tr><tr><td>_5_MAT_Auswahl</td><td>=VERWEIS(2;1/(INDEX(_5_MAT;;1)=Daten!&#36;A24);INDEX(_5_MAT;;VERGLEICH(Daten!&#36;B24;INDEX(_5_MAT;1;);0)))</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C24</td><td><Span style='color:#222222'>=_5_MAT_Auswahl</Span></td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='5' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#aaeeee'><td>Zelle</td><td>Gültigkeitstyp</td><td>Operator</td><td>Wert1</td><td>Wert2</td></tr><tr><td>B24</td><td>Liste</td><td> </td><td><Span style='color:#222222'>=INDEX</Span><Span style='color:#0000DD'>(_5_MAT;1;)</Span><Span style='color:#222222'></Span></td><td> </td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='4'>Arbeitsblatt mit dem Namen 'Daten'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td></tr><tr><td style='background-color:#cacaca' align='middle'>36</td><td align='left' >weitere Formelbeispiele</td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>37</td><td align='right' > </td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>38</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >letzte</td><td align='left' style='background-color:#D8E4BC; ' >letzte</td></tr><tr><td style='background-color:#cacaca' align='middle'>39</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >Zeile in</td><td align='left' style='background-color:#D8E4BC; ' >Spalte in</td></tr><tr><td style='background-color:#cacaca' align='middle'>40</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >Spalte A</td><td align='left' style='background-color:#D8E4BC; ' >Zeile 2</td></tr><tr><td style='background-color:#cacaca' align='middle'>41</td><td align='left' style='background-color:#D8E4BC; ' >bezogen auf</td><td align='middle' style='background-color:#FCD5B4; ' >24</td><td align='middle' style='background-color:#FCD5B4; ' >5</td></tr><tr><td style='background-color:#cacaca' align='middle'>42</td><td align='left' style='background-color:#D8E4BC; ' >ganzes Blatt</td><td align='middle' style='background-color:#FCD5B4; ' >Müller</td><td align='middle' style='background-color:#FCD5B4; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>43</td><td align='right' > </td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>44</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >letzte</td><td align='left' style='background-color:#D8E4BC; ' >letzte</td></tr><tr><td style='background-color:#cacaca' align='middle'>45</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >Zeile von</td><td align='left' style='background-color:#D8E4BC; ' >Spalte von</td></tr><tr><td style='background-color:#cacaca' align='middle'>46</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >MAT</td><td align='left' style='background-color:#D8E4BC; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>47</td><td align='left' style='background-color:#D8E4BC; ' >bezogen auf</td><td align='middle' style='background-color:#B7DEE8; ' >5</td><td align='middle' style='background-color:#B7DEE8; ' >3</td></tr><tr><td style='background-color:#cacaca' align='middle'>48</td><td align='left' style='background-color:#D8E4BC; ' >ganzes Blatt</td><td align='middle' style='background-color:#B7DEE8; ' >Schulze</td><td align='middle' style='background-color:#B7DEE8; ' >Geburtstag</td></tr><tr><td style='background-color:#cacaca' align='middle'>49</td><td align='right' > </td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>50</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >erste</td><td align='left' style='background-color:#D8E4BC; ' >erste</td></tr><tr><td style='background-color:#cacaca' align='middle'>51</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >Zeile von</td><td align='left' style='background-color:#D8E4BC; ' >Spalte von</td></tr><tr><td style='background-color:#cacaca' align='middle'>52</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >MAT</td><td align='left' style='background-color:#D8E4BC; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>53</td><td align='left' style='background-color:#D8E4BC; ' >bezogen auf</td><td align='middle' style='background-color:#C4BD97; ' >2</td><td align='middle' style='background-color:#C4BD97; ' >1</td></tr><tr><td style='background-color:#cacaca' align='middle'>54</td><td align='left' style='background-color:#D8E4BC; ' >ganzes Blatt</td><td align='middle' style='background-color:#C4BD97; ' > </td><td align='middle' style='background-color:#C4BD97; ' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>55</td><td align='right' > </td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>56</td><td align='right' > </td><td align='left' style='background-color:#D8E4BC; ' >Anzahl</td><td align='left' style='background-color:#D8E4BC; ' >Anzahl</td></tr><tr><td style='background-color:#cacaca' align='middle'>57</td><td align='right' > </td><td align='left' style='background-color:#D8E4BC; ' >Zeilen in</td><td align='left' style='background-color:#D8E4BC; ' >Spalten in</td></tr><tr><td style='background-color:#cacaca' align='middle'>58</td><td align='right' > </td><td align='left' style='background-color:#D8E4BC; ' >MAT</td><td align='left' style='background-color:#D8E4BC; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>59</td><td align='right' > </td><td align='middle' style='background-color:#C4BD97; ' >4</td><td align='middle' style='background-color:#C4BD97; ' >3</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_5_MAT</td><td>=Daten!&#36;A&#36;2:&#36;C&#36;5</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C41</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(A2:A37<Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;ZEILE</Span><Span style='color:#222222'>(A&#36;2:A&#36;37)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D41</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(Daten!2:2<Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;SPALTE</Span><Span style='color:#222222'>(Daten!2:2)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C42</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(A2:A37<Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;A&#36;2:A&#36;37)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D42</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(Daten!2:2<Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;Daten!2:2)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C47</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;;1)</Span><Span style='color:#222222'><Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;ZEILE</Span><Span style='color:#222222'>(_5_MAT)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D47</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;1;)</Span><Span style='color:#222222'><Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;SPALTE</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;1;)</Span><Span style='color:#222222'>)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C48</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;;1)</Span><Span style='color:#222222'><Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;INDEX</Span><Span style='color:#222222'>(_5_MAT;;1)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D48</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;1;)</Span><Span style='color:#222222'><Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;INDEX</Span><Span style='color:#222222'>(_5_MAT;1;)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C53</td><td><Span style='color:#222222'>=ZEILE</Span><Span style='color:#0000DD'>(_5_MAT)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D53</td><td><Span style='color:#222222'>=SPALTE</Span><Span style='color:#0000DD'>(_5_MAT)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C59</td><td><Span style='color:#222222'>=ZEILEN</Span><Span style='color:#0000DD'>(_5_MAT)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D59</td><td><Span style='color:#222222'>=SPALTEN</Span><Span style='color:#0000DD'>(_5_MAT)</Span><Span style='color:#222222'></Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Tabellennavigation / Datenabfragen</span><br /><br />Ich habe hier eine kleine Mitarbeitertabelle (MAT) erstellt und den Bereich entsprechend benannt. <br />In den folgenden Beispielen greife ich auf unterschiedliche Art und Weise auf die einzelnen Felder<br />dieser Tabelle zurück.<br />An dieser Stelle möchte ich auch gleich darauf hinweisen, dass bei den Mitarbeitern natürlich auch<br />Doppelungen auftreten können . Das führt zu Problemen bei der korrekten Auswahl.<br />Für eine eindeutige Auswahl wären weitere Angaben nötig - idealerweise Personalnummern.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Daten'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='left' >Name</td><td align='left' >Vorname</td><td align='left' style='background-color:#B7DEE8; ' >Geburtstag</td><td align='right' > </td><td align='left' style='background-color:#FCD5B4; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='left' >Müller</td><td align='left' >Gerd</td><td align='right' >02.02.2012</td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='left' >Meier</td><td align='left' >Marion</td><td align='right' >03.03.2013</td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='left' style='background-color:#B7DEE8; ' >Schulze</td><td align='left' >Horst</td><td align='right' >04.04.2014</td><td align='right' > </td><td align='right' > </td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 4<br />Gezielte Abfragen</span><br />In diesen beiden Abfragen hole ich konkret die Vornamen zu dem in der links benachbarten Zelle eingetragenen<br />Familiennamen. Ich verwende hier einmal den SVERWEIS und einmal den VERWEIS kombiniert mit INDEX.<br />=SVERWEIS(Daten!I13;_5_MAT;2;0)<br />=VERWEIS(2;1/(INDEX(_5_MAT;;1)=A7);INDEX(_5_MAT;;2))<br />mit den Namen _4_Vorname_S und _4_Vorname_V<br /><br />Sofern Marion Meier einen der beiden Herren heitratet und beide den gleichen Familiennamen führen, <br />wird das auch im Ergebnis der Abfragen deutlich - probiert es einfach mal aus. <br />(Anmerkung: Auch wenn Gerd und Horst so zueinander finden, kann man es sehen <img src="https://www.clever-excel-forum.de/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" /><br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='3' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='3'>Arbeitsblatt mit dem Namen 'Daten'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td></tr><tr><td style='background-color:#cacaca' align='middle'>12</td><td align='left' >Müller</td><td align='left' style='background-color:#FFFF00; ' >Gerd</td></tr><tr><td style='background-color:#cacaca' align='middle'>13</td><td align='left' >Müller</td><td align='left' style='background-color:#FFFF00; ' >Gerd</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_4_Vorname_S</td><td>=SVERWEIS(Daten!XFD12;_5_MAT;2;0)</td></tr><tr><td>_4_Vorname_V</td><td>=VERWEIS(2;1/(INDEX(_5_MAT;;1)=Daten!XFD12);INDEX(_5_MAT;;2))</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>B12</td><td><Span style='color:#222222'>=_4_Vorname_S</Span></td></tr><tr><td>B13</td><td><Span style='color:#222222'>=_4_Vorname_V</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 5<br />Flexible Abfragen</span><br />Um flexibel bestimmte Mitarbeiterdaten abrufen zu können, habe ich mir eine Auswahl der Tabellenspalten <br />zusammengestellt. Dazu verwende ich die Gültigkeit und beziehe mich auf die erste Zeile der MAT:<br />=INDEX(_5_MAT;1;)<br />Ich kann nun entsprechend der Spaltenüberschriften auswählen. <br />Sofern eine Spalte eingefügt wird, erweitert sich die Auswahl gleich. Auf ein Anfügen einer Spalte würde die <br />hier gezeigte Lösung nicht reagieren - aber machbar wäre dies auch.<br /><br />Für die Berechnung der Daten habe ich einen weiteren Namen definiert<br />=_5_MAT_Auswahl<br />Auch hier kommt wieder eine Funktion mit VERWEIS und INDEX zum Einsatz.<br />=VERWEIS(2;1/(INDEX(_5_MAT;;1)=Daten!&#36;A9);INDEX(_5_MAT;;VERGLEICH(Daten!&#36;B9;INDEX(_5_MAT;1;);0)))<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='4'>Arbeitsblatt mit dem Namen 'Daten'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td></tr><tr><td style='background-color:#cacaca' align='middle'>24</td><td align='left' style='background-color:#FCD5B4; ' >Müller</td><td align='left' style='background-color:#FFFF00; ' >Geburtstag</td><td align='right' style='background-color:#FFFF00; ' >02.02.2012</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_5_MAT</td><td>=Daten!&#36;A&#36;2:&#36;C&#36;5</td></tr><tr><td>_5_MAT_Auswahl</td><td>=VERWEIS(2;1/(INDEX(_5_MAT;;1)=Daten!&#36;A24);INDEX(_5_MAT;;VERGLEICH(Daten!&#36;B24;INDEX(_5_MAT;1;);0)))</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C24</td><td><Span style='color:#222222'>=_5_MAT_Auswahl</Span></td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='5' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#aaeeee'><td>Zelle</td><td>Gültigkeitstyp</td><td>Operator</td><td>Wert1</td><td>Wert2</td></tr><tr><td>B24</td><td>Liste</td><td> </td><td><Span style='color:#222222'>=INDEX</Span><Span style='color:#0000DD'>(_5_MAT;1;)</Span><Span style='color:#222222'></Span></td><td> </td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='4'>Arbeitsblatt mit dem Namen 'Daten'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td></tr><tr><td style='background-color:#cacaca' align='middle'>36</td><td align='left' >weitere Formelbeispiele</td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>37</td><td align='right' > </td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>38</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >letzte</td><td align='left' style='background-color:#D8E4BC; ' >letzte</td></tr><tr><td style='background-color:#cacaca' align='middle'>39</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >Zeile in</td><td align='left' style='background-color:#D8E4BC; ' >Spalte in</td></tr><tr><td style='background-color:#cacaca' align='middle'>40</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >Spalte A</td><td align='left' style='background-color:#D8E4BC; ' >Zeile 2</td></tr><tr><td style='background-color:#cacaca' align='middle'>41</td><td align='left' style='background-color:#D8E4BC; ' >bezogen auf</td><td align='middle' style='background-color:#FCD5B4; ' >24</td><td align='middle' style='background-color:#FCD5B4; ' >5</td></tr><tr><td style='background-color:#cacaca' align='middle'>42</td><td align='left' style='background-color:#D8E4BC; ' >ganzes Blatt</td><td align='middle' style='background-color:#FCD5B4; ' >Müller</td><td align='middle' style='background-color:#FCD5B4; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>43</td><td align='right' > </td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>44</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >letzte</td><td align='left' style='background-color:#D8E4BC; ' >letzte</td></tr><tr><td style='background-color:#cacaca' align='middle'>45</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >Zeile von</td><td align='left' style='background-color:#D8E4BC; ' >Spalte von</td></tr><tr><td style='background-color:#cacaca' align='middle'>46</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >MAT</td><td align='left' style='background-color:#D8E4BC; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>47</td><td align='left' style='background-color:#D8E4BC; ' >bezogen auf</td><td align='middle' style='background-color:#B7DEE8; ' >5</td><td align='middle' style='background-color:#B7DEE8; ' >3</td></tr><tr><td style='background-color:#cacaca' align='middle'>48</td><td align='left' style='background-color:#D8E4BC; ' >ganzes Blatt</td><td align='middle' style='background-color:#B7DEE8; ' >Schulze</td><td align='middle' style='background-color:#B7DEE8; ' >Geburtstag</td></tr><tr><td style='background-color:#cacaca' align='middle'>49</td><td align='right' > </td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>50</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >erste</td><td align='left' style='background-color:#D8E4BC; ' >erste</td></tr><tr><td style='background-color:#cacaca' align='middle'>51</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >Zeile von</td><td align='left' style='background-color:#D8E4BC; ' >Spalte von</td></tr><tr><td style='background-color:#cacaca' align='middle'>52</td><td align='right' style='background-color:#D8E4BC; ' > </td><td align='left' style='background-color:#D8E4BC; ' >MAT</td><td align='left' style='background-color:#D8E4BC; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>53</td><td align='left' style='background-color:#D8E4BC; ' >bezogen auf</td><td align='middle' style='background-color:#C4BD97; ' >2</td><td align='middle' style='background-color:#C4BD97; ' >1</td></tr><tr><td style='background-color:#cacaca' align='middle'>54</td><td align='left' style='background-color:#D8E4BC; ' >ganzes Blatt</td><td align='middle' style='background-color:#C4BD97; ' > </td><td align='middle' style='background-color:#C4BD97; ' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>55</td><td align='right' > </td><td align='right' > </td><td align='right' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>56</td><td align='right' > </td><td align='left' style='background-color:#D8E4BC; ' >Anzahl</td><td align='left' style='background-color:#D8E4BC; ' >Anzahl</td></tr><tr><td style='background-color:#cacaca' align='middle'>57</td><td align='right' > </td><td align='left' style='background-color:#D8E4BC; ' >Zeilen in</td><td align='left' style='background-color:#D8E4BC; ' >Spalten in</td></tr><tr><td style='background-color:#cacaca' align='middle'>58</td><td align='right' > </td><td align='left' style='background-color:#D8E4BC; ' >MAT</td><td align='left' style='background-color:#D8E4BC; ' >MAT</td></tr><tr><td style='background-color:#cacaca' align='middle'>59</td><td align='right' > </td><td align='middle' style='background-color:#C4BD97; ' >4</td><td align='middle' style='background-color:#C4BD97; ' >3</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_5_MAT</td><td>=Daten!&#36;A&#36;2:&#36;C&#36;5</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C41</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(A2:A37<Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;ZEILE</Span><Span style='color:#222222'>(A&#36;2:A&#36;37)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D41</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(Daten!2:2<Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;SPALTE</Span><Span style='color:#222222'>(Daten!2:2)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C42</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(A2:A37<Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;A&#36;2:A&#36;37)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D42</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(Daten!2:2<Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;Daten!2:2)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C47</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;;1)</Span><Span style='color:#222222'><Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;ZEILE</Span><Span style='color:#222222'>(_5_MAT)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D47</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;1;)</Span><Span style='color:#222222'><Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;SPALTE</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;1;)</Span><Span style='color:#222222'>)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C48</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;;1)</Span><Span style='color:#222222'><Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;INDEX</Span><Span style='color:#222222'>(_5_MAT;;1)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D48</td><td><Span style='color:#222222'>=VERWEIS</Span><Span style='color:#0000DD'>(2;1/</Span><Span style='color:#222222'>(INDEX</Span><Span style='color:#0000DD'>(_5_MAT;1;)</Span><Span style='color:#222222'><Span style='color:#222222'><</Span>>"")</Span><Span style='color:#0000DD'>;INDEX</Span><Span style='color:#222222'>(_5_MAT;1;)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C53</td><td><Span style='color:#222222'>=ZEILE</Span><Span style='color:#0000DD'>(_5_MAT)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D53</td><td><Span style='color:#222222'>=SPALTE</Span><Span style='color:#0000DD'>(_5_MAT)</Span><Span style='color:#222222'></Span></td></tr><tr><td>C59</td><td><Span style='color:#222222'>=ZEILEN</Span><Span style='color:#0000DD'>(_5_MAT)</Span><Span style='color:#222222'></Span></td></tr><tr><td>D59</td><td><Span style='color:#222222'>=SPALTEN</Span><Span style='color:#0000DD'>(_5_MAT)</Span><Span style='color:#222222'></Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Excel] Bereichsnamen - Teil 2 - Formeln in Namen]]></title>
			<link>https://www.clever-excel-forum.de/Thread-Excel-Bereichsnamen-Teil-2-Formeln-in-Namen</link>
			<pubDate>Sat, 06 May 2017 19:54:45 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.clever-excel-forum.de/member.php?action=profile&uid=1">schauan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.clever-excel-forum.de/Thread-Excel-Bereichsnamen-Teil-2-Formeln-in-Namen</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Formeln und Funktionen in Bereichsnamen</span><br /><br />In Bereichsnamen können viele Formeln und Funktionen umgesetzt werden.<br />Dadurch kann man sich eigene Funktionen zusammenstellen und in Zellen nutzen. <br />Die Formeln in den Zellen kann man so einfacher und übersichtlicher gestalten. <br />Der Anwender kann bei entsprechender Benennung einfach auf den Zweck der Funktion schließen.<br />Excel unterstützt immer noch sogenannte Excel4Macro-Funktionen. Viele dieser Funktionen können nur über Bereichsnamen verwendet werden.<br />Dieses Thema beschreibe ich in einem gesonderten Kapitel.<br /><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 1<br />Addition</span><br />Die beiden Zellen A1 und A2 sollen addiert werden. Dazu soll eine Formel genutzt werden, <br />=&#36;A&#36;1+&#36;B&#36;1<br />Über den Namensmanager wird nun ein neuer Name angelegt, <br />_1_Rechnen<br />und mit der Formel versehen. <br />Die Funktion _1_Rechnen kann nun an beliebiger Stelle platziert werden, überall wird die Summe aus A1 und B1 gebildet.<br /><br />Der Name könnte natürlich etwas aussagekräftiger sein. <br />Na ja, die _1_ ist meiner Beispielgliederung geschuldet. Braucht also sonst keiner.<br />Statt Rechnen wäre z.B. SummeA1B1 ganz gut, oder?<br /><br />Übrigens, eine Änderung des Namens im Namensmanager führt automatisch zur Änderung der Formeln in den Zellen.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Formeln'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>12</td><td align='middle' >1</td><td align='middle' >2</td><td align='middle' style='background-color:#FFFF00; ' >3</td><td align='middle' > </td><td align='middle' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>13</td><td align='middle' style='background-color:#FFFF00; ' >3</td><td align='middle' > </td><td align='middle' > </td><td align='middle' > </td><td align='middle' style='background-color:#FFFF00; ' >3</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_1_Rechnen</td><td>=Formeln!&#36;A&#36;12+Formeln!&#36;B&#36;12</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C12</td><td><Span style='color:#222222'>=_1_Rechnen</Span></td></tr><tr><td>A13</td><td><Span style='color:#222222'>=_1_Rechnen</Span></td></tr><tr><td>E13</td><td><Span style='color:#222222'>=_1_Rechnen</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 2<br />Summe der Werte der beiden Zellen aus Spalte A und B in der Formelzeile</span><br />Eine absolute Angabe der Zelladressen könnte z.B. Sinn machen, wenn es sich dabei um Zellen zur Eingabe durch den Benutzer handelt.<br />Für Berechnungen z.B. in Listen sind relative Zellangaben oder eine Kombination aus relativen und absoluten Angaben vorteilhaft. <br />Bei Fortführung der Listen kann man die Formel ohne Anpassung weiterverwenden.<br />Ich habe nun diese Formel definiert<br />=SUMME(&#36;A26:&#36;B26)<br />und unter disem Namen abgelegt<br />_2_SummeLinks<br />Die Funktion berechnet nun die Summe der Zahlen aus Spalte A und B der gleichen Zeile und kann in der Zeile in einer beliebigen Spalte ab C stehen..<br />A und B sind durch das vorangestellte &#36; absolute angaben, de Zeennummern ohne &#36; relativ.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Formeln'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>27</td><td align='middle' >1</td><td align='middle' >3</td><td align='middle' style='background-color:#FFFF00; ' >4</td><td align='middle' style='background-color:#FFFF00; ' >4</td><td align='middle' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>28</td><td align='middle' >1</td><td align='middle' >7</td><td align='middle' style='background-color:#FFFF00; ' >8</td><td align='middle' > </td><td align='middle' style='background-color:#FFFF00; ' >8</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_2_SummeLinks</td><td>=SUMME(Formeln!&#36;A27:&#36;B27)</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C27</td><td><Span style='color:#222222'>=_2_SummeLinks</Span></td></tr><tr><td>D27</td><td><Span style='color:#222222'>=_2_SummeLinks</Span></td></tr><tr><td>C28</td><td><Span style='color:#222222'>=_2_SummeLinks</Span></td></tr><tr><td>E28</td><td><Span style='color:#222222'>=_2_SummeLinks</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Summe der Werte aller Zellen links neben der Formelzeile</span><br />Hier habe ich eine abgewandelte Form der SummeLinks. In der Formel<br />=SUMME(&#36;A26:B26)<br />mit dem Namen<br />_2_SummeVonGanzLinks<br />ist nur noch die Spalte A absolut.  Dadurch wird bei Einsatz der Formel ab Spalte C oder später die Summe aller links daneben befindlichen Zellen berechnet.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Formeln'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>38</td><td align='middle' >1</td><td align='middle' >7</td><td align='middle' style='background-color:#FFFF00; ' >8</td><td align='middle' style='background-color:#FFFF00; ' >16</td><td align='middle' style='background-color:#FFFF00; ' >32</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_2_SummeVonGanzLinks</td><td>=SUMME(Formeln!&#36;A38:XFD3<Span>8</Span>)</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C38</td><td><Span style='color:#222222'>=_2_SummeVonGanzLinks</Span></td></tr><tr><td>D38</td><td><Span style='color:#222222'>=_2_SummeVonGanzLinks</Span></td></tr><tr><td>E38</td><td><Span style='color:#222222'>=_2_SummeVonGanzLinks</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><span style="font-weight: bold;" class="mycode_b"><br />Beispiel 3<br />Berechnung des Bruttopreises aus dem Nettopreis und der Mehrwertsteuer</span><br />Ein kleines praktisches Beispiel ist die Verwendung benannter Bereiche zur Ermittlung des Bruttowertes. <br />Um mit verschiedenen Mehrwertsteuersätzen ohne Formeländerung arbeiten zu können, habe ich eine Eingabezelle mit MwSt benannt.<br />Diese Zelle verwende ich dann in der Formel<br />=A10*(1+MwSt/100)<br />und speichere sie unter dem Namen<br />_3_Brutto<br />Die Formel rechnet nun den Brottowert zu de rlinks daneben befindlichen Zelle.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='4'>Arbeitsblatt mit dem Namen 'Formeln'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td></tr><tr><td style='background-color:#cacaca' align='middle'>46</td><td align='middle' > </td><td align='middle' >19</td><td align='middle' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>47</td><td align='middle' >120</td><td align='middle' style='background-color:#FFFF00; ' >142,8</td><td align='middle' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>48</td><td align='middle' > </td><td align='middle' >150</td><td align='middle' style='background-color:#FFFF00; ' >178,5</td></tr><tr><td style='background-color:#cacaca' align='middle'>49</td><td align='middle' >100</td><td align='middle' style='background-color:#FFFF00; ' >119</td><td align='middle' > </td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_3_Brutto</td><td>=Formeln!XFD46*(1+_3_MwSt/100)</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>B47</td><td><Span style='color:#222222'>=_3_Brutto</Span></td></tr><tr><td>C48</td><td><Span style='color:#222222'>=_3_Brutto</Span></td></tr><tr><td>B49</td><td><Span style='color:#222222'>=_3_Brutto</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Formeln und Funktionen in Bereichsnamen</span><br /><br />In Bereichsnamen können viele Formeln und Funktionen umgesetzt werden.<br />Dadurch kann man sich eigene Funktionen zusammenstellen und in Zellen nutzen. <br />Die Formeln in den Zellen kann man so einfacher und übersichtlicher gestalten. <br />Der Anwender kann bei entsprechender Benennung einfach auf den Zweck der Funktion schließen.<br />Excel unterstützt immer noch sogenannte Excel4Macro-Funktionen. Viele dieser Funktionen können nur über Bereichsnamen verwendet werden.<br />Dieses Thema beschreibe ich in einem gesonderten Kapitel.<br /><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 1<br />Addition</span><br />Die beiden Zellen A1 und A2 sollen addiert werden. Dazu soll eine Formel genutzt werden, <br />=&#36;A&#36;1+&#36;B&#36;1<br />Über den Namensmanager wird nun ein neuer Name angelegt, <br />_1_Rechnen<br />und mit der Formel versehen. <br />Die Funktion _1_Rechnen kann nun an beliebiger Stelle platziert werden, überall wird die Summe aus A1 und B1 gebildet.<br /><br />Der Name könnte natürlich etwas aussagekräftiger sein. <br />Na ja, die _1_ ist meiner Beispielgliederung geschuldet. Braucht also sonst keiner.<br />Statt Rechnen wäre z.B. SummeA1B1 ganz gut, oder?<br /><br />Übrigens, eine Änderung des Namens im Namensmanager führt automatisch zur Änderung der Formeln in den Zellen.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Formeln'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>12</td><td align='middle' >1</td><td align='middle' >2</td><td align='middle' style='background-color:#FFFF00; ' >3</td><td align='middle' > </td><td align='middle' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>13</td><td align='middle' style='background-color:#FFFF00; ' >3</td><td align='middle' > </td><td align='middle' > </td><td align='middle' > </td><td align='middle' style='background-color:#FFFF00; ' >3</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_1_Rechnen</td><td>=Formeln!&#36;A&#36;12+Formeln!&#36;B&#36;12</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C12</td><td><Span style='color:#222222'>=_1_Rechnen</Span></td></tr><tr><td>A13</td><td><Span style='color:#222222'>=_1_Rechnen</Span></td></tr><tr><td>E13</td><td><Span style='color:#222222'>=_1_Rechnen</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Beispiel 2<br />Summe der Werte der beiden Zellen aus Spalte A und B in der Formelzeile</span><br />Eine absolute Angabe der Zelladressen könnte z.B. Sinn machen, wenn es sich dabei um Zellen zur Eingabe durch den Benutzer handelt.<br />Für Berechnungen z.B. in Listen sind relative Zellangaben oder eine Kombination aus relativen und absoluten Angaben vorteilhaft. <br />Bei Fortführung der Listen kann man die Formel ohne Anpassung weiterverwenden.<br />Ich habe nun diese Formel definiert<br />=SUMME(&#36;A26:&#36;B26)<br />und unter disem Namen abgelegt<br />_2_SummeLinks<br />Die Funktion berechnet nun die Summe der Zahlen aus Spalte A und B der gleichen Zeile und kann in der Zeile in einer beliebigen Spalte ab C stehen..<br />A und B sind durch das vorangestellte &#36; absolute angaben, de Zeennummern ohne &#36; relativ.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Formeln'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>27</td><td align='middle' >1</td><td align='middle' >3</td><td align='middle' style='background-color:#FFFF00; ' >4</td><td align='middle' style='background-color:#FFFF00; ' >4</td><td align='middle' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>28</td><td align='middle' >1</td><td align='middle' >7</td><td align='middle' style='background-color:#FFFF00; ' >8</td><td align='middle' > </td><td align='middle' style='background-color:#FFFF00; ' >8</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_2_SummeLinks</td><td>=SUMME(Formeln!&#36;A27:&#36;B27)</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C27</td><td><Span style='color:#222222'>=_2_SummeLinks</Span></td></tr><tr><td>D27</td><td><Span style='color:#222222'>=_2_SummeLinks</Span></td></tr><tr><td>C28</td><td><Span style='color:#222222'>=_2_SummeLinks</Span></td></tr><tr><td>E28</td><td><Span style='color:#222222'>=_2_SummeLinks</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><br /><span style="font-weight: bold;" class="mycode_b">Summe der Werte aller Zellen links neben der Formelzeile</span><br />Hier habe ich eine abgewandelte Form der SummeLinks. In der Formel<br />=SUMME(&#36;A26:B26)<br />mit dem Namen<br />_2_SummeVonGanzLinks<br />ist nur noch die Spalte A absolut.  Dadurch wird bei Einsatz der Formel ab Spalte C oder später die Summe aller links daneben befindlichen Zellen berechnet.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='6'>Arbeitsblatt mit dem Namen 'Formeln'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>38</td><td align='middle' >1</td><td align='middle' >7</td><td align='middle' style='background-color:#FFFF00; ' >8</td><td align='middle' style='background-color:#FFFF00; ' >16</td><td align='middle' style='background-color:#FFFF00; ' >32</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_2_SummeVonGanzLinks</td><td>=SUMME(Formeln!&#36;A38:XFD3<Span>8</Span>)</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>C38</td><td><Span style='color:#222222'>=_2_SummeVonGanzLinks</Span></td></tr><tr><td>D38</td><td><Span style='color:#222222'>=_2_SummeVonGanzLinks</Span></td></tr><tr><td>E38</td><td><Span style='color:#222222'>=_2_SummeVonGanzLinks</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table><span style="font-weight: bold;" class="mycode_b"><br />Beispiel 3<br />Berechnung des Bruttopreises aus dem Nettopreis und der Mehrwertsteuer</span><br />Ein kleines praktisches Beispiel ist die Verwendung benannter Bereiche zur Ermittlung des Bruttowertes. <br />Um mit verschiedenen Mehrwertsteuersätzen ohne Formeländerung arbeiten zu können, habe ich eine Eingabezelle mit MwSt benannt.<br />Diese Zelle verwende ich dann in der Formel<br />=A10*(1+MwSt/100)<br />und speichere sie unter dem Namen<br />_3_Brutto<br />Die Formel rechnet nun den Brottowert zu de rlinks daneben befindlichen Zelle.<br /><br /><table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='4' style='font-family:Calibri; color:#000000; background-color:#FFFFFF; font-size:11px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='60pt'><col width='60pt'><col width='60pt'></colgroup><tr style='background-color:#FAFAFA'><td align='middle' colspan='4'>Arbeitsblatt mit dem Namen 'Formeln'</td></tr><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td></tr><tr><td style='background-color:#cacaca' align='middle'>46</td><td align='middle' > </td><td align='middle' >19</td><td align='middle' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>47</td><td align='middle' >120</td><td align='middle' style='background-color:#FFFF00; ' >142,8</td><td align='middle' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>48</td><td align='middle' > </td><td align='middle' >150</td><td align='middle' style='background-color:#FFFF00; ' >178,5</td></tr><tr><td style='background-color:#cacaca' align='middle'>49</td><td align='middle' >100</td><td align='middle' style='background-color:#FFFF00; ' >119</td><td align='middle' > </td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><tr style='background-color:#eeaaee'><td>Name</td><td>Bezug</td></tr><tr><td>_3_Brutto</td><td>=Formeln!XFD46*(1+_3_MwSt/100)</td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Calibri; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Zelle</td><td>Formel</td></tr><tr><td>B47</td><td><Span style='color:#222222'>=_3_Brutto</Span></td></tr><tr><td>C48</td><td><Span style='color:#222222'>=_3_Brutto</Span></td></tr><tr><td>B49</td><td><Span style='color:#222222'>=_3_Brutto</Span></td></tr></table><table style='font-family:Arial; font-size:7pt'><tr><td style='color:#333333'>Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg</td></tr></table>]]></content:encoded>
		</item>
	</channel>
</rss>