<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: vba code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 16 May 2008 21:11:44 GMT</pubDate>
    <description>DZone Snippets: vba code</description>
    <item>
      <title>Add lines of code to module in design view using VBEIDE</title>
      <link>http://snippets.dzone.com/posts/show/5436</link>
      <description>Sometimes you'll need to add code programmatically to your Form or Report Module, for example, when you need to add the same code to all controls of a certain type on a form. When the form has a handful of controls it's no big deal, but when there may be dozens or hundreds of controls it can be daunting. The code below will cycle through all of the controls on your form, determine if the control type has to be updated, check to see if the control already has an event defined, and if not, create the event and append the code. Otherwise it'll print the name of the procedure it didn't modify. Prior to running the code please add the reference "Microsoft Visual Basic for Applications Extensibility 5.3" to your project. &lt;br /&gt;&lt;br /&gt;Note: The form specified in strForm below must be in design view prior to running the code in order for this to work. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can call the procedure using:&lt;br /&gt;AddCodeToControls("Form_myForm", "Msgbox " &amp; chr(34) &amp; "Hello World" &amp; chr(34) , "BeforeUpdate"&lt;br /&gt;&lt;br /&gt;&lt;Code&gt;&lt;br /&gt;' This code was originally written by Juan Soto at AccessExperts.net.&lt;br /&gt;' It is not to be altered or distributed,&lt;br /&gt;' except as part of an application.&lt;br /&gt;' You are free to use it in any application,&lt;br /&gt;' provided the copyright notice is left unchanged.&lt;br /&gt;'&lt;br /&gt;' Code Courtesy of&lt;br /&gt;' Juan Soto at AccessExperts.net&lt;br /&gt;&lt;br /&gt;Public Function AddCodeToControls(strFormName As String, strCode As String, strProcedure As String)&lt;br /&gt;    On Error Resume Next&lt;br /&gt;    Dim VBAEditor As VBIDE.VBE&lt;br /&gt;    Dim VBProj As VBIDE.VBProject&lt;br /&gt;    Dim VBComp As VBIDE.VBComponent&lt;br /&gt;    Dim CodeMod As VBIDE.CodeModule&lt;br /&gt;    Dim obj As Object&lt;br /&gt;    Dim frm As Form&lt;br /&gt;    Dim ctl As Access.Control&lt;br /&gt;    Dim lngHeaderLine As Long&lt;br /&gt;    &lt;br /&gt;    Set VBAEditor = Application.VBE&lt;br /&gt;    Set VBProj = VBAEditor.ActiveVBProject&lt;br /&gt;    Set VBComp = VBProj.VBComponents(strFormName)&lt;br /&gt;    Set CodeMod = VBComp.CodeModule&lt;br /&gt;    Set frm = Forms(strform)&lt;br /&gt;    For Each ctl In frm.Controls&lt;br /&gt;        If ctl.ControlType = acCheckBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox _&lt;br /&gt;            Or ctl.ControlType = acTextBox Then&lt;br /&gt;            'Search if object already has an after update event&lt;br /&gt;            lngHeaderLine = CodeMod.ProcStartLine(ctl.Name &amp; "_" &amp; strProcedure, vbext_pk_Proc)&lt;br /&gt;            If Err &gt; 0 Then&lt;br /&gt;                'Procedure does not exist, create it&lt;br /&gt;                lngHeaderLine = CodeMod.CreateEventProc(strProcedure, ctl.Name)&lt;br /&gt;                CodeMod.InsertLines lngHeaderLine + 1, strCode&lt;br /&gt;            Else&lt;br /&gt;                'Procedure does exist, print name for manual editing later&lt;br /&gt;                Debug.Print ctl.Name &amp; "_" &amp; strProcedure &amp; " Not Modified"&lt;br /&gt;            End If&lt;br /&gt;        End If&lt;br /&gt;    Next ctl&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;/Code&gt;</description>
      <pubDate>Mon, 28 Apr 2008 01:38:04 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5436</guid>
      <author>AccessExpert (Juan Soto)</author>
    </item>
    <item>
      <title>Calculate Last Day of Last Month</title>
      <link>http://snippets.dzone.com/posts/show/5076</link>
      <description>VB/VBA/VB.NET one-liner to calculate the end of last month. Useful for SSRS/RDL Expressions and Excel/Office Formulas. Note that it does not use string parsing, which can cause localization problems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;DateAdd("d", -1.0 * DatePart("d", Today), Today)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 01 Feb 2008 22:51:12 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5076</guid>
      <author>jokeyxero (xero)</author>
    </item>
    <item>
      <title>Calculate First Day of Current Month</title>
      <link>http://snippets.dzone.com/posts/show/5075</link>
      <description>VB/VBA/VB.NET one-liner to calculate the start of the current month. Useful for SSRS/RDL Expressions and Excel/Office Formulas. Note that it does not use string parsing, which can cause localization problems.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;DateAdd("D", -1.0 * DatePart("D", Today) + 1, Today)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 01 Feb 2008 22:48:45 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5075</guid>
      <author>jokeyxero (xero)</author>
    </item>
    <item>
      <title>Calculate First Day of Last Month</title>
      <link>http://snippets.dzone.com/posts/show/5074</link>
      <description>VB/VBA/VB.NET one-liner to calculate the start of the previous month. Useful for SSRS/RDL Expressions and Excel/Office Formulas. Note that it does not use string parsing, which can cause localization problems.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;DateAdd("D", -1.0 * DatePart("D", Today) + 1, DateAdd("m", -1, Today))&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 01 Feb 2008 22:47:11 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5074</guid>
      <author>jokeyxero (xero)</author>
    </item>
    <item>
      <title>Excel : Make a query on a Oracle database and return the result (useful for sheet formulas)</title>
      <link>http://snippets.dzone.com/posts/show/4518</link>
      <description>// This should be pasted in a module of the workbook&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Function ORAQUERY(strHost As String, strDatabase As String, strSQL As String, strUser As String, strPassword As String)&lt;br /&gt;  Dim strConOracle, oConOracle, oRsOracle&lt;br /&gt;  Dim StrResult As String&lt;br /&gt;  &lt;br /&gt;  StrResult = ""&lt;br /&gt;  &lt;br /&gt;  strConOracle = "Driver={Microsoft ODBC for Oracle}; " &amp; _&lt;br /&gt;         "CONNECTSTRING=(DESCRIPTION=" &amp; _&lt;br /&gt;         "(ADDRESS=(PROTOCOL=TCP)" &amp; _&lt;br /&gt;         "(HOST=" &amp; strHost &amp; ")(PORT=1521))" &amp; _&lt;br /&gt;         "(CONNECT_DATA=(SERVICE_NAME=" &amp; strDatabase &amp; "))); uid=" &amp; strUser &amp; " ;pwd=" &amp; strPassword &amp; ";"&lt;br /&gt;  Set oConOracle = CreateObject("ADODB.Connection")&lt;br /&gt;  Set oRsOracle = CreateObject("ADODB.Recordset")&lt;br /&gt;  oConOracle.Open strConOracle&lt;br /&gt;  Set oRsOracle = oConOracle.Execute(strSQL)&lt;br /&gt;  Do While Not oRsOracle.EOF&lt;br /&gt;      If StrResult &lt;&gt; "" Then&lt;br /&gt;        StrResult = StrResult &amp; Chr(10) &amp; oRsOracle.Fields(0).Value&lt;br /&gt;      Else&lt;br /&gt;        StrResult = oRsOracle.Fields(0).Value&lt;br /&gt;      End If&lt;br /&gt;    oRsOracle.MoveNext&lt;br /&gt;  Loop&lt;br /&gt;  oConOracle.Close&lt;br /&gt;  Set oRsOracle = Nothing&lt;br /&gt;  Set oConOracle = Nothing&lt;br /&gt;  ORAQUERY = StrResult&lt;br /&gt;End Function&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 10 Sep 2007 15:26:22 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4518</guid>
      <author>bouffon69 (Sylvain Le Courtois)</author>
    </item>
    <item>
      <title>VBA procedure to pen an Excel workbook and refresh all datas in the QueryTables and PivotTable objects</title>
      <link>http://snippets.dzone.com/posts/show/4503</link>
      <description>// description of your code here&lt;br /&gt;// Can also use the Workbook Open event ( Private Sub Workbook_Open() )&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Sub Auto_Open()&lt;br /&gt;Application.DisplayAlerts = False&lt;br /&gt;    ChDir "T:\EXPLOIT\TSMENV\EXCEL\politiques"&lt;br /&gt;    Workbooks.Open Filename:="t:\EXPLOIT\TSMENV\EXCEL\politiques\politiques.xls", _&lt;br /&gt;        UpdateLinks:=3&lt;br /&gt;    For i = 1 To ActiveWorkbook.PivotCaches.Count&lt;br /&gt;        ActiveWorkbook.PivotCaches(i).RefreshOnFileOpen = False&lt;br /&gt;    Next&lt;br /&gt;    For i = 1 To ActiveWorkbook.Sheets.Count&lt;br /&gt;        For j = 1 To ActiveWorkbook.Sheets(i).QueryTables.Count&lt;br /&gt;            ActiveWorkbook.Sheets(i).QueryTables(j).RefreshOnFileOpen = False&lt;br /&gt;        Next&lt;br /&gt;    Next&lt;br /&gt;    ActiveWorkbook.RefreshAll&lt;br /&gt;    ActiveWorkbook.RefreshAll&lt;br /&gt;    ActiveWorkbook.RefreshAll&lt;br /&gt;    ActiveWorkbook.Save&lt;br /&gt;    ActiveWindow.Close&lt;br /&gt;    Application.Quit&lt;br /&gt;End Sub&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 07 Sep 2007 07:44:29 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4503</guid>
      <author>bouffon69 (Sylvain Le Courtois)</author>
    </item>
    <item>
      <title>feiertage berechnen / calculate holidays</title>
      <link>http://snippets.dzone.com/posts/show/4409</link>
      <description>// noch nicht fertig&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Option Compare Database&lt;br /&gt;&lt;br /&gt;    'zun&#228;chst auf Modulebene im Klassenmodul definiert,&lt;br /&gt;        'und zwar als dynamisches Array des Typs FTag&lt;br /&gt;Dim arrFTage() As FTag&lt;br /&gt;Dim typFTag As FTag&lt;br /&gt;&lt;br /&gt;    'Da &#246;ffentliche Datentypen in Klassenmodulen nicht zul&#228;ssig sind,&lt;br /&gt;        'm&#252;ssen Sie hier zwingend das Schl&#252;sselwort Private verwenden&lt;br /&gt;Private Type FTag&lt;br /&gt;    Tag As Byte&lt;br /&gt;    Monat As Byte&lt;br /&gt;    Name As String&lt;br /&gt;    Land As String&lt;br /&gt;End Type&lt;br /&gt;&lt;br /&gt;'Klassenmodul ein und setzen dessen Name Eigenschaft auf clsFeiertage&lt;br /&gt;    'Innerhalb der Klasse erstellen Sie eine &#246;ffentliche Funktion&lt;br /&gt;    'Ostersonntag(), der Sie als Parameter die Jahreszahl &#252;bergeben&lt;br /&gt;    'Damit ist schon die erste Variable der Formel bekannt.&lt;br /&gt;Public Function Ostersonntag(lngJahr As Long) As Variant&lt;br /&gt;&lt;br /&gt;Dim strFehler As String&lt;br /&gt;Dim lngTag As Long&lt;br /&gt;Dim bytMonat As Byte&lt;br /&gt;Dim bytA As Byte&lt;br /&gt;Dim bytB As Byte&lt;br /&gt;Dim bytM As Byte&lt;br /&gt;Dim bytN As Byte&lt;br /&gt;Dim lngE As Long&lt;br /&gt;Dim lngD As Long&lt;br /&gt;&lt;br /&gt;    'Berechnen von A, B und C&lt;br /&gt;bytA = lngJahr Mod 19&lt;br /&gt;bytB = lngJahr Mod 4&lt;br /&gt;bytC = lngJahr Mod 7&lt;br /&gt;    'Ermitteln von M und N&lt;br /&gt;bytM = 0&lt;br /&gt;bytN = 0&lt;br /&gt;    'gem&#228;&#223; der "Tabelle" in getMundN berechnet und zur&#252;ckgibt&lt;br /&gt;strFehler = getMundN(bytM, bytN, lngJahr)&lt;br /&gt;&lt;br /&gt;If strFehler = "" Then&lt;br /&gt;        'Berechnung fortsetzen&lt;br /&gt;        'Berechnen von D&lt;br /&gt;    lngD = ((19 * bytA) + bytM) Mod 30&lt;br /&gt;    lngE = ((2 * bytB) + (4 * bytC) + (6 * lngD) + bytN) Mod 7&lt;br /&gt;        'Tag berechnen&lt;br /&gt;    lngTag = 22 + lngD + lngE&lt;br /&gt;        'Ausnahmen pr&#252;fen&lt;br /&gt;        'Ist Ostersonntag gr&#246;&#223;er als 31, f&#228;llt Ostern in den April.&lt;br /&gt;        'Der Tag wird dann wie folgt berechnet: Ostersonntag =D+E-9.&lt;br /&gt;    If lngTag &gt; 31 Then&lt;br /&gt;        bytMonat = 4&lt;br /&gt;        lngTag = lngD + lngE - 9&lt;br /&gt;        &lt;br /&gt;            'weitere Ausnahmen pr&#252;fen&lt;br /&gt;        If lngTag = 26 Then&lt;br /&gt;                'Ist Ostersonntag der 26. April f&#228;llt Ostern&lt;br /&gt;                'auf den 19. April&lt;br /&gt;            lngTag = 19&lt;br /&gt;        ElseIf lngTag = 25 Then&lt;br /&gt;                'Ist Ostersonntag der 25. April und gleichzeitig&lt;br /&gt;                'A &gt; 10 und D = 28, dann ist Ostersonntag der 18. April&lt;br /&gt;            If (bytA &gt; 10) And (bytB = 28) Then&lt;br /&gt;                lngTag = 18&lt;br /&gt;            End If&lt;br /&gt;        End If&lt;br /&gt;        &lt;br /&gt;    Else&lt;br /&gt;    &lt;br /&gt;        bytMonat = 3&lt;br /&gt;    End If&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;    'G&#252;ltigkeitspr&#252;fung durchf&#252;hren&lt;br /&gt;    'Pr&#252;fen, ob das Datum g&#252;ltig ist.&lt;br /&gt;If (bytMonat &gt; 0) And (lngTag &gt; 0) Then&lt;br /&gt;&lt;br /&gt;    Ostersonntag = DateSerial(lngJahr, bytMonat, lngTag)&lt;br /&gt;    &lt;br /&gt;        'pr&#252;fen, ob das berechnete Datum ein Sonntag ist.&lt;br /&gt;    If Weekday(Ostersonntag, vbSunday) &gt; 1 Then&lt;br /&gt;    &lt;br /&gt;        strFehler = "Berechnungsfehler: Ostersonntag " &amp; _&lt;br /&gt;         "liegt nicht an einem Sonntag!"&lt;br /&gt;        &lt;br /&gt;        Ostersonntag = strFehler &amp; vbCrLf &amp; "Berechnungergebnis: " _&lt;br /&gt;         &amp; Format(Ostersonntag, "dd.MM.yyyy", vbSunday)&lt;br /&gt;    End If&lt;br /&gt;Else&lt;br /&gt;&lt;br /&gt;    Ostersonntag = strFehler&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Private Function getMundN(ByRef bytM As Byte, ByRef bytN As Byte, _&lt;br /&gt; lngJahr As Long) As String&lt;br /&gt; &lt;br /&gt;getMundN = ""&lt;br /&gt;&lt;br /&gt;Select Case lngJahr&lt;br /&gt;    Case 1582 To 1699:&lt;br /&gt;        bytM = 22&lt;br /&gt;        bytN = 2&lt;br /&gt;    Case 1700 To 1799:&lt;br /&gt;        bytM = 23&lt;br /&gt;        bytN = 3&lt;br /&gt;    Case 1800 To 1899:&lt;br /&gt;        bytM = 23&lt;br /&gt;        bytN = 4&lt;br /&gt;    Case 1900 To 2099:&lt;br /&gt;        bytM = 24&lt;br /&gt;        bytN = 5&lt;br /&gt;    Case 2100 To 2199:&lt;br /&gt;        bytM = 24&lt;br /&gt;        bytN = 6&lt;br /&gt;    Case 2200 To 2299:&lt;br /&gt;        bytM = 25&lt;br /&gt;        bytN = 0&lt;br /&gt;    Case 2300 To 2399:&lt;br /&gt;        bytM = 26&lt;br /&gt;        bytN = 1&lt;br /&gt;    Case 2400 To 2499:&lt;br /&gt;        bytM = 25&lt;br /&gt;        bytN = 1&lt;br /&gt;Case Else&lt;br /&gt;    getMundN = "Die Jahreszahl muss zwischen 1581 und 2500 liegen!"&lt;br /&gt;End Select&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Public Function Ostermontag(lngJahr As Long) As Variant&lt;br /&gt;    Dim varTemp As Variant&lt;br /&gt;    varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Ostermontag = DateAdd("d", 1, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        Ostermontag = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;Public Function Karfreitag(lngJahr As Long) As Variant&lt;br /&gt;    Dim varTemp As Variant&lt;br /&gt;    varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Karfreitag = DateAdd("d", -2, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        Karfreitag = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;Public Function Pfingstsonntag(lngJahr As Long) As Variant&lt;br /&gt;    Dim varTemp As Variant&lt;br /&gt;    varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Pfingstsonntag = DateAdd("d", 49, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        Pfingstsonntag = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;Public Function Pfingstmontag(lngJahr As Long) As Variant&lt;br /&gt;    Dim varTemp As Variant&lt;br /&gt;    varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Pfingstmontag = DateAdd("d", 50, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        fingstmontag = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;Public Function Rosenmontag(lngJahr As Long) As Variant&lt;br /&gt;    Dim varTemp As Variant&lt;br /&gt;    varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Rosenmontag = DateAdd("d", -48, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        Rosenmontag = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;Public Function Fastnacht(lngJahr As Long) As Variant&lt;br /&gt;    Dim varTemp As Variant&lt;br /&gt;    varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Fastnacht = DateAdd("d", -47, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        Fastnacht = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;Public Function Aschermittwoch(lngJahr As Long) As Variant&lt;br /&gt;    Dim varTemp As Variant&lt;br /&gt;    varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Aschermittwoch = DateAdd("d", -46, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        Aschermittwoch = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;Public Function Himmelfahrt(lngJahr As Long) As Variant&lt;br /&gt;    Dim varTemp As Variant&lt;br /&gt;    varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Himmelfahrt = DateAdd("d", 39, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        Himmelfahrt = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;Public Function Fronleichnam(lngJahr As Long) As Variant&lt;br /&gt;        Dim varTemp As Variant&lt;br /&gt;        varTemp = Ostersonntag(lngJahr)&lt;br /&gt;    If IsDate(varTemp) Then&lt;br /&gt;        Fronleichnam = DateAdd("d", 60, varTemp)&lt;br /&gt;    Else&lt;br /&gt;        Fronleichnam = varTemp 'Fehlermeldung zur&#252;ckgeben&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;'############################################################&lt;br /&gt;    'Zum Lesen der Datei reicht eine private Prozedur,&lt;br /&gt;        'der Sie den Dateinamen einschlie&#223;lich des Pfads&lt;br /&gt;        'der Textdatei &#252;bergeben&lt;br /&gt;Private Sub FeiertageLesen(strDateiname As String)&lt;br /&gt;&lt;br /&gt;Dim lngDatei As Long&lt;br /&gt;Dim strFehler As String&lt;br /&gt;Dim strZeile As String&lt;br /&gt;Dim varZeile As Variant&lt;br /&gt;Dim lngZeile As Long&lt;br /&gt;&lt;br /&gt;On Error GoTo FEHLER&lt;br /&gt;&lt;br /&gt;lngDatei = FreeFile()&lt;br /&gt;&lt;br /&gt;    ' Datei &#246;ffnen.&lt;br /&gt;Open strDateiname For Input As #lngDatei&lt;br /&gt;&lt;br /&gt;    'Auslesen der Eintr&#228;ge und einf&#252;gen in das Array&lt;br /&gt;ReDim arrFTage(1)&lt;br /&gt;lngZeile = -1&lt;br /&gt;&lt;br /&gt;    'lesen sie in einer Schleife zeilenweise aus&lt;br /&gt;    'Schleife bis Dateiende.&lt;br /&gt;Do While Not EOF(lngDatei)&lt;br /&gt;    Input #lngDatei, strZeile&lt;br /&gt;    &lt;br /&gt;    If Trim(strZeile) &gt; "" Then&lt;br /&gt;        On Error Resume Next&lt;br /&gt;        &lt;br /&gt;            'Jede Zeile splitten Sie mit Hilfe der Split-Funktion in ein Array&lt;br /&gt;        varZeile = Split(strZeile, ";")&lt;br /&gt;        &lt;br /&gt;        typFTag.Tag = varZeile(0)&lt;br /&gt;        typFTag.Monat = varZeile(1)&lt;br /&gt;        typFTag.Name = varZeile(2)&lt;br /&gt;        typFTag.Land = varZeile(3)&lt;br /&gt;        &lt;br /&gt;        On Error GoTo FEHLER&lt;br /&gt;    &lt;br /&gt;    End If&lt;br /&gt;    &lt;br /&gt;        'Array vergr&#246;&#223;ern&lt;br /&gt;    lngZeile = lngZeile + 1&lt;br /&gt;    arrFTage(lngZeile) = typFTag&lt;br /&gt;    ReDim Preserve arrFTage(UBound(arrFTage) + 1)&lt;br /&gt;    Debug.Print strZeile&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;Close #lngDatei&lt;br /&gt;&lt;br /&gt;    'Texdatei &#246;ffnen&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;'---------------------------------------------------------&lt;br /&gt;FEHLER:&lt;br /&gt;&lt;br /&gt;If Err.Number = 52 Then&lt;br /&gt;    strFehler = "Die Datei " &amp; strDateiname &amp; _&lt;br /&gt;    " ist nicht vorhanden oder kann nicht ge&#246;ffnet werden!"&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;    'Debug.Print Err.Number &amp; ": " &amp; Err.Description&lt;br /&gt;If strFehler &gt; "" Then&lt;br /&gt;    On Error Resume Next&lt;br /&gt;    MsgBox strFehler&lt;br /&gt;    Close #lngDatei&lt;br /&gt;    Exit Sub&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Public Function FixFeiertag(datDatum As Date, _&lt;br /&gt;    strDateiname As String, Optional strLand) As String&lt;br /&gt;    &lt;br /&gt;    'Pr&#252;ft ob es sich bei dem Datum um einen fixen Feiertag handelt&lt;br /&gt;    'Falls ja, wird der Name des Feiertags zur&#252;ckgegeben&lt;br /&gt;    &lt;br /&gt;Dim bytFehler As Byte&lt;br /&gt;Dim bytTag As Byte&lt;br /&gt;Dim bytMonat As Byte&lt;br /&gt;Dim lngZage&lt;br /&gt;&lt;br /&gt;bytFehler = 0&lt;br /&gt;FixFeiertag = ""&lt;br /&gt;&lt;br /&gt;On Error GoTo FEHLER&lt;br /&gt;&lt;br /&gt;    'Array durchsuchen&lt;br /&gt;        'weil bei einem noch nicht initialisierten Array&lt;br /&gt;        'das Abrufen der oberen Indexgrenze mit ubound einen&lt;br /&gt;        'Laufzeitfehler verursacht.&lt;br /&gt;If UBound(arrFTage) &gt;= 0 Then&lt;br /&gt;        'zun&#228;chst aus dem Parameter datDatum der Tag&lt;br /&gt;            'und der Monat ermittelt und in zwei Variablen gespeichert&lt;br /&gt;    bytTag = Day(datDatum)&lt;br /&gt;    bytMonat = Month(datDatum)&lt;br /&gt;    &lt;br /&gt;        'Danach durchl&#228;uft eine Schleife das Array.&lt;br /&gt;            'F&#252;r den Fall, dass der optionale Parameter strLand&lt;br /&gt;            'nicht &#252;bergeben wurde, wird nur gepr&#252;ft,&lt;br /&gt;            'ob Monat und Tag des aktuellen Array-Eintrags mit den Werten&lt;br /&gt;            'in den beiden Variablen &#252;bereinstimmen&lt;br /&gt;        'Wird zus&#228;tzlich das Land angegeben, wird auch dieses in die Pr&#252;fung einbezogen.&lt;br /&gt;    For lngZeile = LBound(arrFTage) To UBound(arrFTage)&lt;br /&gt;        typFTag = arrFTage(lngZeile)&lt;br /&gt;        &lt;br /&gt;        If IsMissing(strLand) Then&lt;br /&gt;        &lt;br /&gt;            If (bytTag = typFTag.Tag) _&lt;br /&gt;            And (bytMonat = typFTag.Monat) Then&lt;br /&gt;                    'der Name des Feiertags als R&#252;ckgabewert festgelegt&lt;br /&gt;                FixFeiertag = typFTag.Name&lt;br /&gt;                Exit For&lt;br /&gt;            End If&lt;br /&gt;            &lt;br /&gt;        Else&lt;br /&gt;    &lt;br /&gt;            If (bytTag = typFTag.Tag) _&lt;br /&gt;            And (bytMonat = typFTag.Monat) _&lt;br /&gt;            And (strLand = typFTag.Land) Then&lt;br /&gt;                    'der Name des Feiertags als R&#252;ckgabewert festgelegt&lt;br /&gt;                FixFeiertag = typFTag.Name&lt;br /&gt;                Exit For&lt;br /&gt;            End If&lt;br /&gt;            &lt;br /&gt;        End If&lt;br /&gt;        &lt;br /&gt;    Next lngZeile ' &lt;- befindet sich im For oder nicht?&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Exit Function&lt;br /&gt;&lt;br /&gt;'---------------------------------------------------------&lt;br /&gt;FEHLER:&lt;br /&gt;    'Ist dies die Zahl 9, war das Array noch nicht initialisiert&lt;br /&gt;        'und die Prozedur FeiertageLesen wird aufgerufen&lt;br /&gt;bytFehler = bytFehler + 1&lt;br /&gt;If Err.Number = 9 Then&lt;br /&gt;    If bytFehler = 1 Then&lt;br /&gt;        FeiertageLesen strDateiname&lt;br /&gt;        Resume&lt;br /&gt;    Else&lt;br /&gt;        Exit Function&lt;br /&gt;    End If&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Methoden zum Erfassen von Feiertagen&lt;br /&gt;'Wenn Sie dem Benutzer der Anwendung, der die Klasse verwendet,&lt;br /&gt;'die M&#246;glichkeit geben m&#246;chten, feste Feiertage &#252;ber ein Formular&lt;br /&gt;'oder eine UserForm zu erfassen, sollten Sie dazu schon in der&lt;br /&gt;'Klasse eine Methode vorsehen, die an die Textdatei eine Zeile&lt;br /&gt;'mit neuen Werten anh&#228;ngt. Diese Methode soll hier&lt;br /&gt;'FeierTagSchreiben lauten (Listing 4). Ihr &#252;bergeben Sie die zu&lt;br /&gt;'schreibenden Werte f&#252;r die einzelne Spalte sowie den Dateinamen&lt;br /&gt;'und den Pfad der Textdatei. Die Methode schreibt diese Daten&lt;br /&gt;'dann in die Textdatei.&lt;br /&gt;Public Sub FeierTagSchreiben(strDateiname As String, _&lt;br /&gt; bytTag As Byte, bytMonat As Byte, strName As String, strLand As String)&lt;br /&gt;&lt;br /&gt;Dim lngDatei As Long&lt;br /&gt;Dim strFehler As String&lt;br /&gt;Dim strZeile As String&lt;br /&gt;Dim varZeile As Variant&lt;br /&gt;Dim lngZeile As Long&lt;br /&gt;Dim bytFehler As Byte&lt;br /&gt;bytFehler = 0&lt;br /&gt;&lt;br /&gt;On Error GoTo FEHLER&lt;br /&gt;&lt;br /&gt;lngDatei = FreeFile()&lt;br /&gt;    'Datei &#246;ffnen.&lt;br /&gt;Open strDateiname For Append As #lngDatei&lt;br /&gt;    'Textdatei &#246;ffnen und Daten schreiben&lt;br /&gt;Print #lngDatei, bytTag &amp; ";" &amp; bytMonat &amp; ";" &amp; strName &amp; ";" &amp; strLand&lt;br /&gt;Close #lngDatei&lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;'---------------------------------------------------------&lt;br /&gt;FEHLER:&lt;br /&gt;bytFehler = bytFehler + 1&lt;br /&gt;If Err.Number = 52 Then&lt;br /&gt;    strFehler = "Die Datei " &amp; strDateiname &amp; _&lt;br /&gt;     " ist nicht vorhanden oder kann nicht ge&#246;ffnet werden!"&lt;br /&gt;ElseIf Err.Number = 55 Then&lt;br /&gt;    If bytFehler &lt; 5 Then&lt;br /&gt;        Resume&lt;br /&gt;    Else&lt;br /&gt;        strFehler = "In die Datei konnte nicht geschrieben werden!"&lt;br /&gt;    End If&lt;br /&gt;End If&lt;br /&gt;        &lt;br /&gt;If strFehler &gt; "" Then&lt;br /&gt;    On Error Resume Next&lt;br /&gt;    MsgBox strFehler&lt;br /&gt;    Close #lngDatei&lt;br /&gt;    &lt;br /&gt;    Exit Sub&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 10 Aug 2007 14:31:42 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4409</guid>
      <author>berot3 (berot3)</author>
    </item>
    <item>
      <title>Detect a field edit in Excel and refresh a Query</title>
      <link>http://snippets.dzone.com/posts/show/3613</link>
      <description>&lt;code&gt;&lt;br /&gt;Private Sub Worksheet_Change(ByVal Target As Range)&lt;br /&gt;    Dim wks As Worksheet&lt;br /&gt;    Set wks = ActiveSheet&lt;br /&gt;&lt;br /&gt;    If Target.Row = 1 And Target.Column = 1 Then&lt;br /&gt;      wks.QueryTables(1).Refresh&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;    Set wks = Nothing&lt;br /&gt;End Sub&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 02 Mar 2007 04:29:25 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3613</guid>
      <author>davetrane (David Davis)</author>
    </item>
    <item>
      <title>VBA DDE WORD EXCEL</title>
      <link>http://snippets.dzone.com/posts/show/3112</link>
      <description>// This is just sample code of some dde commands&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Sub RUNEXCELMACRO()&lt;br /&gt;'RUN MACRO&lt;br /&gt;aChan = DDEInitiate(App:="Excel", Topic:="System")&lt;br /&gt;DDEExecute Channel:=aChan, Command:="[Run(" &amp; Chr(34) &amp; _&lt;br /&gt;    "Personal.xls!Macro1" &amp; Chr(34) &amp; ")]"&lt;br /&gt;DDETerminate Channel:=aChan&lt;br /&gt;'POKE&lt;br /&gt;Chan = DDEInitiate(App:="Excel", Topic:="System")&lt;br /&gt;DDEExecute Channel:=Chan, Command:="[OPEN(" &amp; Chr(34) _&lt;br /&gt;    &amp; "C:\Sales.xls" &amp; Chr(34) &amp; ")]"&lt;br /&gt;DDETerminate Channel:=Chan&lt;br /&gt;Chan = DDEInitiate(App:="Excel", Topic:="Sales.xls")&lt;br /&gt;DDEPoke Channel:=Chan, Item:="R1C1", Data:="1996 Sales"&lt;br /&gt;DDETerminate Channel:=Chan&lt;br /&gt;'This example opens the Microsoft Excel workbook Book1.xls and retrieves the contents of cell R1C1.&lt;br /&gt;Chan = DDEInitiate(App:="Excel", Topic:="System")&lt;br /&gt;DDEExecute Channel:=Chan, Command:="[OPEN(" &amp; Chr(34) _&lt;br /&gt;    &amp; "C:\My Documents\Book1.xls" &amp; Chr(34) &amp; ")]"&lt;br /&gt;DDETerminate Channel:=Chan&lt;br /&gt;Chan = DDEInitiate(App:="Excel", Topic:="C:\DATA\SBS.xls")&lt;br /&gt;msg = DDERequest(Channel:=Chan, Item:="R2C1")&lt;br /&gt;msg = msg &amp; " " &amp; DDERequest(Channel:=Chan, Item:="R2C2")&lt;br /&gt;MsgBox msg&lt;br /&gt;DDETerminateAll&lt;br /&gt;'This example opens a channel to the System topic in Microsoft Excel and then uses the Topics item to return a list of available topics. The example inserts the topic list, which includes all open workbooks, after the selection.&lt;br /&gt;aChan = DDEInitiate(App:="Excel", Topic:="System")&lt;br /&gt;TOPICLIST = DDERequest(Channel:=aChan, Item:="Topics")&lt;br /&gt;Selection.InsertAfter TOPICLIST&lt;br /&gt;DDETerminate Channel:=aChan&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 08 Dec 2006 22:50:58 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3112</guid>
      <author>millerjohneric (John Miller)</author>
    </item>
    <item>
      <title>work days between two dates without cycling through dates</title>
      <link>http://snippets.dzone.com/posts/show/808</link>
      <description>I was thinking about how to optimize figuring out the work days between two dates and came up with this function.  It doesn't take into account holidays.  You would have to take out the workdays for holidays from the number if you want to take into account holidays, but that should be easy enough.&lt;br /&gt;&lt;br /&gt;4GL Version&lt;br /&gt;&lt;code&gt; &lt;br /&gt;# workdays&lt;br /&gt;# returns the number of working days between two dates&lt;br /&gt;FUNCTION workdays( dt_begin, dt_end )&lt;br /&gt;&lt;br /&gt;DEFINE&lt;br /&gt;   dt_begin             DATE,&lt;br /&gt;   dt_end               DATE,&lt;br /&gt;   dt_first_sunday      DATE,&lt;br /&gt;   dt_last_saturday     DATE,&lt;br /&gt;   int_workdays         INTEGER&lt;br /&gt;&lt;br /&gt;   # get first sunday&lt;br /&gt;   LET dt_first_sunday = dt_begin + ((7 - WEEKDAY(dt_begin)) MOD 7)&lt;br /&gt;&lt;br /&gt;   # get last saturday&lt;br /&gt;   LET dt_last_saturday = dt_end + ((-1 * (WEEKDAY(dt_end) + 1)) MOD 7)&lt;br /&gt;&lt;br /&gt;   # get work weeks between first sunday and last saturday&lt;br /&gt;   LET int_workdays = (((dt_last_saturday - dt_first_sunday) + 1) / 7) * 5&lt;br /&gt;   &lt;br /&gt;   # if first sunday is not begin date&lt;br /&gt;   IF dt_first_sunday &lt;&gt; dt_begin THEN&lt;br /&gt;&lt;br /&gt;      # assume first sunday is after begin date&lt;br /&gt;      # add workdays from begin date to first sunday&lt;br /&gt;      LET int_workdays = int_workdays + (6 - WEEKDAY(dt_begin))&lt;br /&gt;&lt;br /&gt;   END IF&lt;br /&gt;&lt;br /&gt;   # if last saturday is not end date&lt;br /&gt;   IF dt_last_saturday &lt;&gt; dt_end THEN&lt;br /&gt;&lt;br /&gt;      # assume last saturday is before end date&lt;br /&gt;      # add workdays from last saturday to end date&lt;br /&gt;      LET int_workdays = int_workdays + WEEKDAY(dt_end)  &lt;br /&gt;  &lt;br /&gt;   END IF&lt;br /&gt;&lt;br /&gt;   # return working days&lt;br /&gt;   RETURN int_workdays&lt;br /&gt;&lt;br /&gt;END FUNCTION&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;VBA Version&lt;br /&gt;&lt;code&gt;&lt;br /&gt;' WorkDays&lt;br /&gt;' returns the number of working days between two dates&lt;br /&gt;Public Function WorkDays(ByVal dtBegin As Date, ByVal dtEnd As Date) As Long&lt;br /&gt;&lt;br /&gt;   Dim dtFirstSunday As Date&lt;br /&gt;   Dim dtLastSaturday As Date&lt;br /&gt;   Dim lngWorkDays As Long&lt;br /&gt;&lt;br /&gt;   ' get first sunday in range&lt;br /&gt;   dtFirstSunday = dtBegin + ((8 - Weekday(dtBegin)) Mod 7)&lt;br /&gt;&lt;br /&gt;   ' get last saturday in range&lt;br /&gt;   dtLastSaturday = dtEnd - (Weekday(dtEnd) Mod 7)&lt;br /&gt;&lt;br /&gt;   ' get work days between first sunday and last saturday&lt;br /&gt;   lngWorkDays = (((dtLastSaturday - dtFirstSunday) + 1) / 7) * 5&lt;br /&gt;&lt;br /&gt;   ' if first sunday is not begin date&lt;br /&gt;   If dtFirstSunday &lt;&gt; dtBegin Then&lt;br /&gt;&lt;br /&gt;      ' assume first sunday is after begin date&lt;br /&gt;      ' add workdays from begin date to first sunday&lt;br /&gt;      lngWorkDays = lngWorkDays + (7 - Weekday(dtBegin))&lt;br /&gt;&lt;br /&gt;   End If&lt;br /&gt;&lt;br /&gt;   ' if last saturday is not end date&lt;br /&gt;   If dtLastSaturday &lt;&gt; dtEnd Then&lt;br /&gt;&lt;br /&gt;      ' assume last saturday is before end date&lt;br /&gt;      ' add workdays from last saturday to end date&lt;br /&gt;      lngWorkDays = lngWorkDays + (Weekday(dtEnd) - 1)&lt;br /&gt;&lt;br /&gt;   End If&lt;br /&gt;&lt;br /&gt;   ' return working days&lt;br /&gt;   WorkDays = lngWorkDays&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 13 Oct 2005 23:24:13 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/808</guid>
      <author>Will_Rickards (Will Rickards)</author>
    </item>
  </channel>
</rss>
