Thema Datum  Von Nutzer Rating
Antwort
01.02.2023 08:24:58 Peter
NotSolved
07.02.2023 18:48:25 Fire
NotSolved
Rot VBA+SQL
08.02.2023 07:17:36 Peter
NotSolved
08.02.2023 19:34:14 Fire
NotSolved

Ansicht des Beitrags:
Von:
Peter
Datum:
08.02.2023 07:17:36
Views:
367
Rating: Antwort:
  Ja
Thema:
VBA+SQL

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Sub Rekla2021_Starten()

If Trim(ActiveWorkbook.Name) = "REKLA 2021.xls" Then

    Dim db_Open As Boolean
    db_Open = False
    
    Felder_leeren
    Setzen_DDN_AbweichFiliale
    AuswahlFiliale_unterdruecken
    AuswahlFiliale_fuellen db_Open
    
    DialogSheets("ReklaDialog").Show
    
    ActiveWorkbook.Save
        
ElseIf Trim(ActiveWorkbook.Name) = "REKLA 2021.xls" Then

    MsgBox "Falsche Arbeitsmappe für diesen Button ausgewählt.", vbOKOnly
    
End If

End Sub

Sub Blattschutz_aufheben()
    ActiveSheet.Unprotect deinpasswort
End Sub


Sub txf_vorgangsNr_BeiÄnderung()

PruefeObeineZahl

End Sub

Sub txf_reklamBetrag_BeiÄnderung()

PruefeObeineZahl

End Sub

Sub ddn_auswahlFiliale_BeiÄnderung()
    
End Sub

Sub ddn_auswahlFiliale_Klicken()
    
End Sub

Sub txf_rechnungsNr_BeiÄnderung()

PruefeObeineZahl

End Sub

Public Function bekommeBlattvomCodeName(CodeName As String, _
  Optional Sheet As Object, _
  Optional InWorkbook As Workbook) As Boolean
 
    If InWorkbook Is Nothing Then
        Set InWorkbook = ThisWorkbook
    End If
    
    For Each Sheet In InWorkbook.Sheets
        If StrComp(Sheet.Name, CodeName, vbTextCompare) = 0 Then
            bekommeBlattvomCodeName = True
            Exit For
        End If
    Next
End Function

Sub btn_DatenEinlesen_Klicken()

    Dim db_Stat As Boolean
    Dim diag As Object
    Dim mydrop As Object
    Dim mydrop1 As Object
    Dim mylabel As Object
    Dim mytxfvorgang As Object
    Dim mytxfrechnung As Object
    Dim myarray
    Dim aktAbweichFiliale As Integer
    Dim aktAuswahlFiliale As Integer
    Dim NameAuswahlFiliale As String
    Dim txf_vorgangsNr As Long
    Dim txf_rechnungsNr As Variant
    Dim abweichungFiliale As Integer
    
    'Dim statussetzen As String 'Test

    Set diag = DialogSheets("ReklaDialog")
    Set mydrop = diag.DropDowns("ddn_abweichFiliale")
    Set mydrop1 = diag.DropDowns("ddn_auswahlFiliale")
    Set mytxfvorgang = diag.EditBoxes("txf_vorgangsNr")
    Set mytxfrechnung = diag.EditBoxes("txf_rechnungsNr")
    
    'Set statussetzen = diag.EditBoxes("txf_rechnungsNr") 'Test
    
    
    abweichungFiliale = 0

    aktAbweichFiliale = mydrop.ListIndex
    aktAuswahlFiliale = mydrop1.ListIndex
    
    If (mytxfvorgang.Text <> "") Then
        'txf_vorgangsNr = diag.EditBox("txf_vorgangsNr").Value
        txf_vorgangsNr = CVar(mytxfvorgang.Text)
    Else
        MsgBox "Geben Sie bitte eine gültige Vorgangsnummer an.", vbInformation, "Fehler:"
        Exit Sub
    End If
    
    If (mytxfrechnung.Text <> "") Then
        txf_rechnungsNr = CDec(mytxfrechnung.Text)
    Else
        MsgBox "Geben Sie bitte eine Rechnungsnummer an.", vbInformation, "Fehler:"
        Exit Sub
    End If
        
    ' Wenn das DropdownFeld "Auswahl Filiale" auf Nein gesetzt wurde
    If (aktAbweichFiliale = 1) Then
        
        abweichungFiliale = 1
        FindeTabellenblatt db_Stat, NameAuswahlFiliale, abweichungFiliale, txf_vorgangsNr, txf_rechnungsNr
    
    Else
        
        NameAuswahlFiliale = mydrop1.List(aktAuswahlFiliale)
        abweichungFiliale = 2
        FindeTabellenblatt db_Stat, NameAuswahlFiliale, abweichungFiliale, txf_vorgangsNr, txf_rechnungsNr
         
    End If

End Sub
Sub btn_StatusSetzen_Klicken()

Dim db_Status As Boolean
Const adOpenForwardOnly As Long = 0
'Const adLockReadOnly As Long = 1
Const adCmdText As Long = 1
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sConnect As String
Dim anzahlDS As Integer
Dim sSQL As String
Dim AuftragNr As Integer
Dim RechnungNr As Integer
'Dim Rechnungsposition As Integer
'Dim sSQLr As String

'Dim filialeKurz

Dim diag As Object
Dim i As Integer

Set diag = DialogSheets("ReklaDialog")

If db_Status = False Then
    
    'sSQL = "SELECT KURZNAME FROM sani97.dbo.Filiale Order By FilialeNr "
    sSQL = "SELECT * FROM sani.dbo.AuftragStatusZuordnung, Rechnungsposition" '* from AuftragStatusZuordnung, Rechnungsposition
    'sSQL = "SELECT * FROM sani97.dbo.AuftragStatusZuordnung JOIN AuftragNr where RechnungNr" 'sposition"
    'AuftragNr, Vorgangnr anstatt *
    'sSQLr = "SELECT RechnungsNr FROM sani97.dbo.Rechnungsposition"
    'sSQL = "SELECT AuftragNr FROM sani97.dbo.AuftragStatusZuordnung INNER JOIN AuftragsStatusZuordnung ON Rechnungsposition.RechnungNr = AuftragsStatusZuordnung.AuftragNr" WHERE (((Rechnungsposition.RechnungNr) Is Not Null And (Rechnungsposition.RechnungNr) <> 0) And ((Rechnungsposition.Vorgangnr) Is Not Null And (Rechnungsposition.Vorgangnr) <> 0))
    
    
    
    sConnect = "DSN=sani97;" & _
    "UID=sani_user;" & _
    "PWD=sani97;" & _
    "IFSN=sani97sql;" & _
    "DB=sani97;" & _
    "applicationname=REKLA-EXCEL"
    

    'On Error GoTo Login_Error
        db.Open sConnect
        MsgBox sConnect
        db_Status = True
        
        'Erzeugen des Recordsets mit Schreibrechten
        MsgBox sSQL
        rs.Open sSQL, sConnect, adOpenUnspecified, adLockOptimistic, adCmdText
        'MsgBox sSQLr
'       rs.Open sSQLr, sConnect, adOpenUnspecified, adLockOptimistic, adCmdText
        'adOpenKeyset
        
        
        With rs

'        .MoveFirst
'       .Find Criteria:=KriteriumAngeben, SearchDirection:=adSearchForward
        
        If .Fields("RechnungNr") = True Then
            MsgBox "Ist vorhanden"
            Else
            If .Fields("AuftragNr") = True Then
            MsgBox "Ist vorhanden"
        End If
        
End If
        
'        .Find Criteria:="AuftragNr='Zahl'", SearchDirection:=adSearchForward
        
'        If .EOF = True Then
'            MsgBox "Kein passender Datensatz gefunden"
'        Else
'            .Fields(Spaltenname).Value = "Gewünschten Wert eintragen"
'           .Fields("AuftragNr").Value = "Gewünschten Wert eintragen"
'        End If
'        .Close   'schließt das Recordset
    End With


'        'Überprüfung ob Daten zurückgeliefert wurden
'        If Not rs.EOF And rs.RecordCount > 0 Then
'
'            filialeKurz = rs.GetRows
'            anzahlDS = rs.RecordCount
'
'            'MsgBox "Anzahl an Datensätzen = " & anzahlDS
'
'            With diag.DropDowns("ddn_auswahlFiliale")
'               .ListFillRange = anzahlDS - 1
'               .DropDownLines = 20
'                For i = 0 To anzahlDS - 1
'                    .AddItem CStr(filialeKurz(0, i))
'                    'ThisWorkbook.DialogSheets("ReklaDialog").DropDowns(2).AddItem (filialeKurz(0, 1))
'                Next
'             End With
            
'        Else
'            MsgBox "Keine Daten zu der Vorgangsnummer in SaniVision gefunden.", vbCritical
'            Exit Sub
        
        
        

        rs.Close
        db.Close
        Set rs = Nothing
        Set db = Nothing
        db_Status = False

    
        MsgBox "Es existiert bereits eine Datenbankverbindung zu SaniViison.", vbInformation
        

Exit Sub

Login_Error:

MsgBox "Error #: " & Err.Number & " : Es konnte keine Verbindung zu SaniVision hergestellt werden. Bitte wenden Sie sich an Ihren Administrator.", vbCritical

End If
End Sub
Sub btn_ReklaErstellen_Klicken()

    Dim b As Integer

    For b = 1 To Sheets.Count

        If (Sheets(b).Name <> "ReklaDialog" And Sheets(b).Name <> "WICHTIGE HINWEISE") Then

            'MsgBox (Sheets(b).Name)
            Call ErmittleZuDruckendeReklas(Sheets(b).Name)

        Else

        End If
    Next b
    
    
    'Call ErmittleZuDruckendeReklas("10")
    
    MsgBox "Ihre Rechnungsreklamation wurden erfolgreich an den Drucker gesendet.", vbInformation

End Sub

Sub ErmittleZuDruckendeReklas(wTBName As String)

  Dim objwCell  'da stand nix
  Dim objwrange As Range
  Dim objwsheet As Worksheet
  Dim objwworkbook As Workbook
  Dim C As Integer
  
  
  Dim wletztegefZeile As Integer
  Dim woFilialeKurz As String
  Dim woReklaNr As String
  Dim woReklaBetrag As String
  Dim woVorgangsNr As Long
  Dim woKostentraeger As String
  Dim woKunde As String
  Dim woRechnungsNr As Variant
  Dim woErstelltDatum As Date
  Dim woRueckgabeDatum As Date
  
  'Neue Zeilen
  
  'Const MissingValue As Long = -10000000
  
  'If IsNumeric(.Cells(C, 3).Value) Then
   'woVorgangsNr = CLng(.Cells(C, 3).Value)
   'Else
   'woVorgangsNr = MissingValue
'End If

   'Ende neue Zeilen
  
  
  Set objwworkbook = Application.Workbooks("REKLA 2021.xls")
  Set objwsheet = objwworkbook.Sheets(wTBName)
  
    woFilialeKurz = ""
    woReklaNr = 0
    woReklaBetrag = 0 '"" '0
    woVorgangsNr = 0 '"" '0
    woKostentraeger = ""
    woKunde = ""
    woRechnungsNr = 0
    woErstelltDatum = Empty
    woRueckgabeDatum = Empty
  
    'Hier wir die letzte beschriebene Zeile der Spalte A ermittelt
    With Workbooks("REKLA 2021.xls").Worksheets(wTBName)
      wletztegefZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
    End With
    
    'MsgBox "letzte, befüllte Zeille = " & wletztegefZeile
    
    For C = 4 To wletztegefZeile
        
        With Workbooks("REKLA 2021.xls").Worksheets(wTBName)
        
            If Trim(.Cells(C, 1)) <> "" Then
            
                If (Trim(.Cells(C, 4)) <> "x" And Trim(.Cells(C, 4)) <> "X") Then
                
                    'MsgBox "noch nicht gedruckt!! Tabellenblatt = " & wTBName & " Zeile = " & c
                    
                                 
                
                    woReklaNr = .Cells(3, 1).Value & .Cells(C, 1).Value
                    woReklaBetrag = FormatNumber(.Cells(C, 2).Value) 'Format(.Cells(C, 2).Value = Empty)
                    
                    woVorgangsNr = .Cells(C, 3).Value
                    
                    'Then woVorgangsNr = CLng(.Cells(C, 3).Value)
                    'Else woVorgangsNr = MissingValue End If
                    
                    
                    woKostentraeger = .Cells(C, 8).Value
                    woKunde = .Cells(C, 9).Value
                    woRechnungsNr = .Cells(C, 10).Value
                    woErstelltDatum = .Cells(C, 11).Value
                    woRueckgabeDatum = .Cells(C, 12).Value
                
                    woFilialeKurz = Filialbezeichnung_ermitteln(wTBName)
                
                    Call Word_Dokument_von_Excel_aus_steuern(woFilialeKurz, woReklaNr, woReklaBetrag, woVorgangsNr, woKostentraeger, woKunde, woRechnungsNr, woErstelltDatum, woRueckgabeDatum)
                    .Cells(C, 4).Value = "X"
                    
                    ActiveWorkbook.Save
        
                Else
                    'MsgBox "bereits gedruckt" & .Cells(c, 4) & " Zeile = " & c

                End If
                
            Else
           
            End If
            
        End With
    Next C
     
End Sub


Sub Word_Dokument_von_Excel_aus_steuern(wFilialeKurz As String, _
                                        wReklaNr As String, _
                                        wReklaBetrag As String, _
                                        wVorgangsNr As Long, _
                                        wKostentraeger As String, _
                                        wKunde As String, _
                                        wRechnungsNr As Variant, _
                                        wErstelltDatum As Date, _
                                        wRueckgabeDatum As Date)

Dim myWord, objWW, ws As Object
Dim strWordDokument As String
Dim sDruckerAktuell As String

'strWordDokument = "C:\temp\BL-1100581-Rechnungsrekla.dotx"
strWordDokument = "O:\Bereiche\Verwaltung\Debitoren\Rekla\Formular\BL-1100581-Rechnungsrekla.dotx"

'Fehlerroutine für die Objectabfrage aktivieren
On Error Resume Next

'Abfragen einer besthenden WORD-Instanz um wiederholtes starten zu verhindern
Set myWord = GetObject("Word.Application")
If Err.Number <> 0 Then
    'Fehlervariable leeren wenn Instanz noch nicht besteht
    Err.Clear
    'Zuweisung der Instanz
    Set myWord = CreateObject("Word.Application")
    'Instanz öffnen
    'Um das ganze etwas im Hintergrund laufen zu lassen
    'kann man den Status "wdWindowStateMinimize" verwenden
    'myWord.Visible = False: objWW.WindowState = wdWindowStateMinimize
    myWord.Visible = False
Else
    'Instanz besteht bereits
    myWord.Activate
    'Instanz in der Vordergrund bringen oder
    'mit "wdWindowStateMinimize" im Hintergrund ausführen
    'mit "wdWindowStateMaximize" nicht im Hintergrund ausführen
    myWord.Visible = False
End If

'Hier muss der Dateiname stehen der verwendet werden soll
'Es sollte aber eine Dokumentvorlage verwendet werden
'um keine Änderungen an den Textmarken beim einfügen zu verursachen
'myWord.Documents.Open (strWordDokument)
myWord.Documents.Add (strWordDokument)

'Die Textmarken "a1, a2, a3" müssen im Dokument bereits bestehen
'Dann werden nach dem öffnen des Dokuments die Werte von Tabelle1
'A1, B1 und C1 in die jeweiligen Textmarken geschrieben

'If myWord.ActiveDocument.Bookmarks.Exists("wFiliale") = True Then
'    'myWord.ActiveDocument.Bookmarks("wFiliale").Select
'    'myWord.ActiveDocument.Bookmarks("wFiliale").Range.Text = Worksheets("10").Range("B5")
'    myWord.ActiveDocument.Bookmarks("wFiliale").Range.Text = wFiliale
'End If

'With myWord.ActiveDocument.Bookmarks
'    If .Exists("wReklaNr") = True Then
'        Set ReklaRange = ActiveDocument.Bookmarks("wReklaNr").Range
'        ReklaRange.Text = wReklaNr
'        'myWord.ActiveDocument.Bookmarks("wReklaNr").Range.Text = wReklaNr
'    End If
'
'    ' Textmarke recykeln
'        .Add Range:=wReklaNr, Name:="wReklaNr"
'End With

With myWord.ActiveDocument

    If .Bookmarks.Exists("wFiliale") = True Then
        .Bookmarks("wFiliale").Range.Text = wFilialeKurz
    End If

    If .Bookmarks.Exists("wReklaNr") = True Then
        .Bookmarks("wReklaNr").Range.Text = wReklaNr
    End If

    If .Bookmarks.Exists("wKostentraeger") = True Then
        .Bookmarks("wKostentraeger").Range.Text = wKostentraeger
    End If

    If .Bookmarks.Exists("wKunde") = True Then
        .Bookmarks("wKunde").Range.Text = wKunde
    End If

    If .Bookmarks.Exists("wReklaBetrag") = True Then
        .Bookmarks("wReklaBetrag").Range.Text = wReklaBetrag
    End If

    If .Bookmarks.Exists("wRechnungsNr") = True Then
        .Bookmarks("wRechnungsNr").Range.Text = wRechnungsNr
    End If
    
    If .Bookmarks.Exists("wVorgangsNr") = True Then
        .Bookmarks("wVorgangsNr").Range.Text = wVorgangsNr
    End If

    If .Bookmarks.Exists("wErstelltDatum") = True Then
        .Bookmarks("wErstelltDatum").Range.Text = wErstelltDatum
    End If

    If .Bookmarks.Exists("wRueckgabeDatum") = True Then
        .Bookmarks("wRueckgabeDatum").Range.Text = wRueckgabeDatum
    End If
    
'Felder auf Formular-Kopie
    If .Bookmarks.Exists("kwFiliale") = True Then
        .Bookmarks("kwFiliale").Range.Text = wFilialeKurz
    End If

    If .Bookmarks.Exists("kwReklaNr") = True Then
        .Bookmarks("kwReklaNr").Range.Text = wReklaNr
    End If

    If .Bookmarks.Exists("kwKostentraeger") = True Then
        .Bookmarks("kwKostentraeger").Range.Text = wKostentraeger
    End If

    If .Bookmarks.Exists("kwKunde") = True Then
        .Bookmarks("kwKunde").Range.Text = wKunde
    End If

    If .Bookmarks.Exists("kwReklaBetrag") = True Then
        .Bookmarks("kwReklaBetrag").Range.Text = wReklaBetrag
    End If

    If .Bookmarks.Exists("kwRechnungsNr") = True Then
        .Bookmarks("kwRechnungsNr").Range.Text = wRechnungsNr
    End If
    
    If .Bookmarks.Exists("kwVorgangsNr") = True Then
        .Bookmarks("kwVorgangsNr").Range.Text = wVorgangsNr
    End If

    If .Bookmarks.Exists("kwErstelltDatum") = True Then
        .Bookmarks("kwErstelltDatum").Range.Text = wErstelltDatum
    End If

    If .Bookmarks.Exists("kwRueckgabeDatum") = True Then
        .Bookmarks("kwRueckgabeDatum").Range.Text = wRueckgabeDatum
    End If

End With
  
'For Each ws In Worksheets
'    MsgBox ws.Name
'Next ws

'Aktuellen Standarddrucker merken
sDruckerAktuell = Application.ActivePrinter
MsgBox "Aktiver Drucker = " & sDruckerAktuell
myWord.ActivePrinter = "\\server-28\Canon Farbe"

'myWord.ActiveDocument.msoBlackWhiteBlack = False
'MsgBox "Farbeinstellungen des Druckers: " & myWord.ActivePrinter.ColorMode
'myWord.ActivePrinter.ColorMode = Color

'Das aktive WordDokument drucken
myWord.ActiveDocument.PrintOut

'Den vorherigen Standarddrucker wieder setzen
myWord.ActivePrinter = "\\server-28\Canon"
'Dokument schliessen ohne speichern
myWord.ActiveDocument.Close savechanges:=False
'myWord.ActiveDocument.Close savechanges:=True

'Speichern mit fixem Namen
'myWord.ActiveDocument.SaveAs Filename:="DokumentName", FileFormat:=wdFormatDocument
'Speichern mit Variable
'myWord.ActiveDocument.SaveAs Filename:=Variable, FileFormat:=wdFormatDocument

'WORD-Instanz schliessen
myWord.Application.Quit (True)
'Variable leeren
Set myWord = Nothing

End Sub

'-------------------------------------------------

'Sub Test2()
'
''Im Excel VBA-Editor für die Datei mit diesem Makro unter Extras-Verweise _
'den Verweis auf die Microsoft Word x.y Object Library aktivieren!!
'Dim WinWord, WinDoc As Word.Document, docSerienbrief As Word.Document
'Dim sFile As String
'Dim strCon As String
'Dim strWOrdvorlage As String
'Dim strDatenQuelle As String
'
'strWOrdvorlage = "C:\Users\Noffke\Desktop\BL-1100581-Rechnungsrekla.docx"
'strDatenQuelle = "C:\Users\Noffke\Desktop\REKLA 2015.xls"
'
'sFile = strWOrdvorlage
'Set WinWord = CreateObject("Word.Application")
'
'With WinWord
'    .Visible = True
'    'Vorlagedatei öffnen
'    Set WinDoc = .Documents.Open(sFile)
'        With WinDoc
'            With .MailMerge
'                'Datenquelle öffnen
'                .OpenDataSource Name:=strDatenQuelle, _
'                Connection:="Provider=Microsoft.Jet.OLEDB.4.0;" _
'                & "Data Source=" & strDatenQuelle & ";" _
'                & "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" _
'                & "Jet OLEDB:Engine ", _
'                SQLStatement:="SELECT * FROM `Tabelle1$`"
'                'Serienbrief mit allen Daten in neuem Dokument erstellen
'                .Destination = wdSendToNewDocument
'                .SuppressBlankLines = True
'                    With .DataSource
'                        .FirstRecord = wdDefaultFirstRecord
'                        .LastRecord = wdDefaultLastRecord
'                    End With
'                .Execute Pause:=False
'
'                Set docSerienbrief = WinWord.ActiveDocument
'                'Datenquelle wieder schliessen
'                .DataSource.Close
'            End With
'
'        'Vorlagedatei wieder schliessen
'        .Close savechanges:=False
'        End With
'
'    'Serienbrief - Drucken - Seitenvorschau
'    docSerienbrief.Application.WindowState = wdWindowStateMinimize
'    If MsgBox("Serienbrief Drucken ?", vbYesNo + vbQuestion, _
'        "Serienbrief-Erstellung - Drucken - Seitenvorschau") = vbYes Then
'        docSerienbrief.Application.WindowState = wdWindowStateMaximize
'        docSerienbrief.PrintPreview
'        ' docSerienbrief.PrintOut
'    End If
'
'    'Serienbrief - Speichern
'    docSerienbrief.Application.WindowState = wdWindowStateMinimize
'    If MsgBox("Serienbrief Speichern ?", vbYesNo + vbQuestion, _
'        "Serienbrief-Erstellung-Speicehrn") = vbYes Then
'        docSerienbrief.Application.WindowState = wdWindowStateMaximize
'        docSerienbrief.Application.Dialogs(wdDialogFileSaveAs).Show
'    End If
'
'    docSerienbrief.Application.WindowState = wdWindowStateMaximize
'End With
'
'Set docSerienbrief = Nothing
'Set WinWord = Nothing
'Set WinDoc = Nothing
'
'End Sub

'-----------------------------------------------------------------------

Sub btn_Abbrechen_Klicken()

End Sub

Sub Felder_leeren()

ThisWorkbook.DialogSheets("ReklaDialog").EditBoxes("txf_vorgangsNr").Text = ""
ThisWorkbook.DialogSheets("ReklaDialog").EditBoxes("txf_reklamBetrag").Text = ""
ThisWorkbook.DialogSheets("ReklaDialog").EditBoxes("txf_rechnungsNr").Text = ""
ThisWorkbook.DialogSheets("ReklaDialog").DropDowns("ddn_auswahlFiliale").List = ""

End Sub

Sub ddn_abweichFiliale_BeiÄnderung()

    Dim diag As Object
    Dim mydrop As Object
    Dim mydrop1 As Object
    Dim mylabel As Object
    Dim myarray
    Dim aktAbweichFiliale As Integer

    Set diag = DialogSheets("ReklaDialog")
    Set mydrop = diag.DropDowns("ddn_abweichFiliale")
    Set mydrop1 = diag.DropDowns("ddn_auswahlFiliale")
    Set mylabel = diag.Labels("Bezeichnung 7")

    aktAbweichFiliale = mydrop.ListIndex
    
    ' Wenn das DropdownFeld "Auswahl Filiale" auf Nein gesetzt wurde
    If (aktAbweichFiliale = 1) Then
        
         mydrop1.Visible = False
         mylabel.Visible = False
    
    Else
         mydrop1.Visible = True
         mylabel.Visible = True
         
    End If

End Sub

Sub PruefeObeineZahl()

Dim sZuPruefendesEingabefeld As EditBox

Set sZuPruefendesEingabefeld = ActiveDialog.EditBoxes(Application.Caller)

If Not IsNumeric(sZuPruefendesEingabefeld.Text) And sZuPruefendesEingabefeld.Text <> "" Then
  Beep
  MsgBox "Buchstaben oder Sonderzeichen sind nicht erlaubt !", vbInformation, "Fehler:"
  sZuPruefendesEingabefeld.Text = Left(sZuPruefendesEingabefeld.Text, _
    Len(sZuPruefendesEingabefeld.Text) - 1)
  SendKeys "{end}"
End If

End Sub

Sub Setzen_DDN_AbweichFiliale()

         Dim diag As Object
         'Dim mylist As Object
         Dim mydrop As Object
         Dim myarray
         Dim x As Integer

         Set diag = DialogSheets("ReklaDialog")
         'Set mylist = diag.ListBoxes("List Box 4")
         Set mydrop = diag.DropDowns("ddn_abweichFiliale")


         'mylist.RemoveAllItems
         mydrop.RemoveAllItems

         myarray = Array("Nein", "Ja")

         For x = 0 To 1
            'mylist.AddItem myarray(x)
            mydrop.AddItem myarray(x)
         Next x
         
         mydrop.ListIndex = 1
         
End Sub

Sub AuswahlFiliale_unterdruecken()

         Dim diag As Object
         Dim mydrop As Object
         Dim mylabel As Object

         Set diag = DialogSheets("ReklaDialog")
         Set mydrop = diag.DropDowns("ddn_auswahlFiliale")
         Set mylabel = diag.Labels("Bezeichnung 7")
         
         
         mydrop.Visible = False
         mylabel.Visible = False


End Sub

Function Filialbezeichnung_ermitteln(dbTBName As String)

Const adOpenForwardOnly As Long = 0
Const adLockReadOnly As Long = 1
Const adCmdText As Long = 1
Dim db1 As New ADODB.Connection
Dim rs4 As New ADODB.Recordset
Dim db_Status As Boolean
Dim sConnect4 As String
Dim sSQL4 As String
Dim rsFilialeKurz
Dim dbFilialeKurz As String
Dim dbFiliale As Integer
db_Status = False


If db_Status = False Then

    dbFiliale = CInt(dbTBName)
    
    sSQL4 = "SELECT KURZNAME FROM sani97.dbo.Filiale WHERE FilialeNr = " & dbFiliale
     
    sConnect4 = "DSN=sani97;" & _
    "UID=sani_user;" & _
    "PWD=sani97;" & _
    "IFSN=sani97sql;" & _
    "DB=sani97;" & _
    "applicationname=REKLA-EXCEL"

    'On Error GoTo Login_Error
        db1.Open sConnect4
        db_Status = True
        
        'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
        rs4.Open sSQL4, sConnect4, adOpenKeyset, adLockReadOnly, adCmdText

        'Überprüfung ob Daten zurückgeliefert wurden
        If Not rs4.EOF And rs4.RecordCount > 0 Then
            
            rsFilialeKurz = rs4.GetRows
            dbFilialeKurz = rsFilialeKurz(0, 0)
            
            Filialbezeichnung_ermitteln = dbFilialeKurz
            Exit Function
                  
        Else
            MsgBox "Die Filale wurde nicht in SaniVision gefunden.", vbCritical
            Filialbezeichnung_ermitteln ""
            Exit Function
        End If

        rs4.Close
        db1.Close
        Set rs4 = Nothing
        Set db1 = Nothing
        db_Status = False

Else
    
        MsgBox "Es existiert bereits eine Datenbankverbindung zu SaniViison.", vbInformation
        Exit Function

End If

Exit Function

Login_Error:

MsgBox "Error #: " & Err.Number & " : Es konnte keine Verbindung zu SaniVision hergestellt werden. Bitte wenden Sie sich an Ihren Administrator.", vbCritical
            
End Function

Sub AuswahlFiliale_fuellen(db_Status As Boolean)

Const adOpenForwardOnly As Long = 0
Const adLockReadOnly As Long = 1
Const adCmdText As Long = 1
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sConnect As String
Dim anzahlDS As Integer
Dim sSQL As String
Dim filialeKurz

Dim diag As Object
Dim i As Integer

Set diag = DialogSheets("ReklaDialog")

If db_Status = False Then
    
    sSQL = "SELECT KURZNAME FROM sani97.dbo.Filiale Order By FilialeNr "
    
    sConnect = "DSN=sani97;" & _
    "UID=sani_user;" & _
    "PWD=sani97;" & _
    "IFSN=sani97sql;" & _
    "DB=sani97;" & _
    "applicationname=REKLA-EXCEL"

    'On Error GoTo Login_Error
        db.Open sConnect
        db_Status = True
        
        'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
        rs.Open sSQL, sConnect, adOpenKeyset, adLockReadOnly, adCmdText

        'Überprüfung ob Daten zurückgeliefert wurden
        If Not rs.EOF And rs.RecordCount > 0 Then
            
            filialeKurz = rs.GetRows
            anzahlDS = rs.RecordCount
            
            'MsgBox "Anzahl an Datensätzen = " & anzahlDS
            
            With diag.DropDowns("ddn_auswahlFiliale")
               .ListFillRange = anzahlDS - 1
               .DropDownLines = 20
                For i = 0 To anzahlDS - 1
                    .AddItem CStr(filialeKurz(0, i))
                    'ThisWorkbook.DialogSheets("ReklaDialog").DropDowns(2).AddItem (filialeKurz(0, 1))
                Next
             End With
            
        Else
            MsgBox "Keine Daten zu der Vorgangsnumemr in SaniVision gefunden.", vbCritical
            Exit Sub
        End If

        rs.Close
        db.Close
        Set rs = Nothing
        Set db = Nothing
        db_Status = False

Else
    
        MsgBox "Es existiert bereits eine Datenbankverbindung zu SaniViison.", vbInformation
        Exit Sub

End If

Exit Sub

Login_Error:

MsgBox "Error #: " & Err.Number & " : Es konnte keine Verbindung zu SaniVision hergestellt werden. Bitte wenden Sie sich an Ihren Administrator.", vbCritical
            

End Sub

Sub FindeTabellenblatt(db_Status As Boolean, NameAuswlFil As String, abwFil As Integer, vorgangsNr As Long, RechnungsNr As Variant)


Const adOpenForwardOnly As Long = 0
Const adLockReadOnly As Long = 1
Const adCmdText As Long = 1
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim rs1 As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset
Dim rs3 As New ADODB.Recordset
Dim sConnect As String
Dim anzahlDS As Integer
Dim sSQL As String
Dim sSQL1 As String
Dim sSQL2 As String
Dim sSQL3 As String
Dim rsfilialeNr
Dim rsabwfilialeNr
Dim rsKunde
Dim rsKTR
Dim filialeNr As String
Dim abwfilialeNr As String
Dim kunde As String
Dim ktr As String
Dim Filiale_vorhanden As Boolean

Dim diag As Object
Dim i As Integer

Set diag = DialogSheets("ReklaDialog")

' Es soll eine abweichende Filiale zum Vorgang genommen werden
sSQL = "SELECT FilialeNr FROM sani97.dbo.Filiale WHERE KURZNAME = '" & NameAuswlFil & "' "

' Es soll die Filiale des Vorgangs genommen werden
sSQL1 = "SELECT FilialeNr FROM sani97.dbo.Vorgang WHERE VorgangNr = " & vorgangsNr
                
' Ermitelt den Kunden zum Vorgang
sSQL2 = "SELECT NAME1, NAME2, KundenNr FROM sani97.dbo.Kunden WHERE KundenNr = (SELECT KundenNr FROM sani97.dbo.Vorgang WHERE dbo.Vorgang.VorgangNr = " & vorgangsNr & ")"
'sSQL2 = "SELECT kd.NAME2, kd.NAME1, ktr.NAME1, ktr.NAME2 FROM sani97.dbo.Kunden kd, sani97.dbo.Kostentraeger ktr WHERE kd.KundenNr = (SELECT vor.KundenNr FROM sani97.dbo.Vorgang vor WHERE vor.VorgangNr = " & vorgangsNr & ") AND kd.KKNr = ktr.KTNr"

' Ermittlung des Kostenträgers zur Rechnungsnummer
sSQL3 = "SELECT ktr.NAME1, ktr.NAME2 FROM sani97.dbo.Rechnung rg, sani97.dbo.Kostentraeger ktr WHERE rg.KTNr = ktr.KTNr AND rg.RechnungNr = " & RechnungsNr

anzahlDS = 0

If db_Status = False Then

    If NameAuswlFil <> "" Then
        
        sConnect = "DSN=sani97;" & _
        "UID=sani_user;" & _
        "PWD=sani97;" & _
        "IFSN=sani97sql;" & _
        "DB=sani97;" & _
        "applicationname=REKLA-EXCEL"

        'On Error GoTo Login_Error
        db.Open sConnect
        db_Status = True
        
        
        'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
        rs.Open sSQL, sConnect, adOpenKeyset, adLockReadOnly, adCmdText
        
        
        ' Überprüfung ob Daten zurückgeliefert wurden
        If Not rs.EOF And rs.RecordCount > 0 Then
            
            rsfilialeNr = rs.GetRows
            filialeNr = rsfilialeNr(0, 0)
            
            Filiale_vorhanden = istTabellenblatt_vorhanden(filialeNr)
            
            If Filiale_vorhanden = True Then
            
                'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
                rs1.Open sSQL1, sConnect, adOpenKeyset, adLockReadOnly, adCmdText
            
                ' Überprüfung ob Daten zurückgeliefert wurden
                If Not rs1.EOF And rs1.RecordCount > 0 Then
                    
                        rsabwfilialeNr = rs1.GetRows
                        anzahlDS = rs1.RecordCount
            
                        abwfilialeNr = "(" & rsabwfilialeNr(0, 0) & ")"
                        
                        'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
                        rs2.Open sSQL2, sConnect, adOpenKeyset, adLockReadOnly, adCmdText
                        
                        If Not rs2.EOF And rs2.RecordCount > 0 Then
                        
                            rsKunde = rs2.GetRows
                            kunde = rsKunde(1, 0) & ", " & rsKunde(0, 0) & "    (" & rsKunde(2, 0) & ")"
                            
                            'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
                            rs3.Open sSQL3, sConnect, adOpenKeyset, adLockReadOnly, adCmdText
                            
                            If Not rs3.EOF And rs3.RecordCount > 0 Then
                            
                                rsKTR = rs3.GetRows
                                ktr = rsKTR(0, 0) & " " & rsKTR(1, 0)

                                                      
                                TabellenblattFilaleBearbeiten filialeNr, vorgangsNr, abwfilialeNr, RechnungsNr, kunde, ktr
                                'Sheets(filialeNr(0, 0)).Select
                                
                            Else
                            
                                MsgBox "Es wurde kein Kostenträger zur Rechnung " & RechnungsNr & " gefunden (evtl. falsche RechnungsNr). Bitte in SaniVision überprüfen.", vbInformation
                                
                            End If
                            
                            rs3.Close
                    
                        Else
                        
                            MsgBox "Es wurde kein Kunde zu diesem Vorgang gefunden. Bitte in SaniVision überprüfen.", vbInformation
                            rs2.Close
                        
                        End If
                        
                        rs2.Close
                
                Else
                
                    MsgBox "Die abweichenden Filiale " & abwfilialeNr & " wurde in SaniVision nicht gefunden.", vbInformation
                
                End If
                
            Else
                
                MsgBox "Für die Filiale " & filialeNr & " ist noch kein Tabellenblatt angelegt. Bitte anlegen, damit dieses gefüllt werden kann.", vbInformation
                Exit Sub
            End If
        
        Else
            
            MsgBox "Die Filiale " & filialeNr & " wurde in SaniVision nicht gefunden.", vbInformation
        
        End If
        
        rs1.Close
        
    Else
    
            sConnect = "DSN=sani97;" & _
            "UID=sani_user;" & _
            "PWD=sani97;" & _
            "IFSN=sani97sql;" & _
            "DB=sani97;" & _
            "applicationname=REKLA-EXCEL"

            'On Error GoTo Login_Error
            db.Open sConnect
            db_Status = True
        
            'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
            rs1.Open sSQL1, sConnect, adOpenKeyset, adLockReadOnly, adCmdText

            ' Überprüfung ob Daten zurückgeliefert wurden
            If Not rs1.EOF And rs1.RecordCount > 0 Then
            
                rsfilialeNr = rs1.GetRows
            
                filialeNr = rsfilialeNr(0, 0)
                abwfilialeNr = ""
            
                Filiale_vorhanden = istTabellenblatt_vorhanden(filialeNr)
            
                If Filiale_vorhanden = True Then
                
                        'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
                        rs2.Open sSQL2, sConnect, adOpenKeyset, adLockReadOnly, adCmdText
                        
                        If Not rs2.EOF And rs2.RecordCount > 0 Then
                        
                            rsKunde = rs2.GetRows
                            kunde = rsKunde(1, 0) & ", " & rsKunde(0, 0) & "    (" & rsKunde(2, 0) & ")"
                            
                            'Erzeugen des Recordsets - hier befinden sich dann die anzuzeigenden Daten
                            rs3.Open sSQL3, sConnect, adOpenKeyset, adLockReadOnly, adCmdText
                            
                            If Not rs3.EOF And rs3.RecordCount > 0 Then
                            
                                rsKTR = rs3.GetRows
                                ktr = rsKTR(0, 0) & " " & rsKTR(1, 0)

                                                      
                                TabellenblattFilaleBearbeiten filialeNr, vorgangsNr, abwfilialeNr, RechnungsNr, kunde, ktr
                                'Sheets(filialeNr(0, 0)).Select
                                
                            Else

                                MsgBox "Es wurde kein Kostenträger zur Rechnung " & RechnungsNr & " gefunden (evtl. falsche RechnungsNr). Bitte in SaniVision überprüfen.", vbInformation
                                
                            End If
                            
                            rs3.Close
                                    
                        Else
                        
                            MsgBox "Es wurde kein Kunde zu diesem Vorgang gefunden. Bitte in SaniVision überprüfen.", vbInformation
                            
                        End If
                        
                        rs2.Close
                
                Else
                
                    MsgBox "Für die Filiale " & filialeNr & " ist noch kein Tabellenblatt angelegt. Bitte anlegen, damit dieses gefüllt werden kann.", vbInformation
                    
                End If
           
            'Sheets(filialeNr(0, 0)).Select
            
            Else
                MsgBox "Keine Daten zu der Vorgangsnummer in SaniVision gefunden.", vbCritical

            End If
            
            rs1.Close
    
    End If

        db.Close
        Set rs = Nothing
        Set rs1 = Nothing
        Set rs2 = Nothing
        Set db = Nothing
        db_Status = False

Else
    
        MsgBox "Es existiert bereits eine Datenbankverbindung zu SaniViison. Bitte beenden Sie Excel und starten Sie es neu.", vbInformation
        Exit Sub

End If

Exit Sub

Login_Error:

MsgBox "Error #: " & Err.Number & " : Es konnte keine Verbindung zu SaniVision hergestellt werden. Bitte wenden Sie sich an Ihren Administrator.", vbCritical

End Sub

Function istTabellenblatt_vorhanden(TBvorhName As String)
Dim a As Integer
For a = 1 To Sheets.Count
    If Sheets(a).Name = TBvorhName Then
        istTabellenblatt_vorhanden = True
        Exit Function
    End If
Next a

istTabellenblatt_vorhanden = False
'Sheets("Muster").Select
'Sheets("Muster").Copy Before:=Sheets(6)
'ActiveSheet.Name = "Jahr"
End Function


Sub TabellenblattFilaleBearbeiten(TBName As String, TBVorgangsNr As Long, abwTBName As String, TBRechnungsNr As Variant, TBKunde As String, TBKTR As String)

  Dim objCell
  Dim objrange As Range
  Dim objsheet As Worksheet
  Dim objworkbook As Workbook
  
  Set objworkbook = Application.Workbooks("REKLA 2021.xls")
  Set objsheet = objworkbook.Sheets(TBName)
  
  Dim diag As Object
  Dim mytxfreklamBetrag As Object
  
  Dim letztegefZeile As Integer
  Dim letzteReklaNr As String
  Dim intletzteReklaNr As Integer
  Dim naechsteReklaNr As String
  Dim intnaechsteReklaNr As Integer
  Dim reklaBetrag As Currency
  Dim i As Integer
  
  Set diag = DialogSheets("ReklaDialog")
  Set mytxfreklamBetrag = diag.EditBoxes("txf_reklamBetrag")
  
  If bekommeBlattvomCodeName(TBName, objsheet, Workbooks("REKLA 2021.xls")) Then
  
    'MsgBox "WS CodeName = " & ws.CodeName & " WS Name = " & ws.Name
    'Sheets(TBName).Select
    
    'Hier wir die letzte beschriebene Zeile der Spalte A ermittelt
    'letztegefZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    With Workbooks("REKLA 2021.xls").Worksheets(TBName)
      letztegefZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
      letzteReklaNr = .Cells(letztegefZeile, 1)
    End With
    
    
    If letztegefZeile = 3 Then
        
        naechsteReklaNr = abwTBName & "/001"
    
    Else
        'MsgBox "letzte, befüllte Zelle = " & letztegefZeile
        'MsgBox "letzte Rekla-Nr. = " & letzteReklaNr
        intletzteReklaNr = CInt(Right(Trim(letzteReklaNr), 3))
        intnaechsteReklaNr = intletzteReklaNr + 1
        naechsteReklaNr = abwTBName & "/" & Format(intnaechsteReklaNr, "000")
    
    End If

    
    If (mytxfreklamBetrag.Text <> "") Then
    
        reklaBetrag = CCur(mytxfreklamBetrag.Text)
    Else
    
        MsgBox "Bitte geben Sie den zu reklamierenden Betrag ein.", vbInformation
        Exit Sub
        
    End If
    
    
    'MsgBox "naechste Rekla-Nr. = " & naechsteReklaNr
    
    With Workbooks("REKLA 2021.xls").Worksheets(TBName)
            .Cells(letztegefZeile + 1, 1).Value = naechsteReklaNr
            .Cells(letztegefZeile + 1, 2).Value = reklaBetrag
            .Cells(letztegefZeile + 1, 3).Value = TBVorgangsNr
            .Cells(letztegefZeile + 1, 8).Value = TBKTR
            .Cells(letztegefZeile + 1, 9).Value = TBKunde
            .Cells(letztegefZeile + 1, 10).Value = TBRechnungsNr
            .Cells(letztegefZeile + 1, 11).Value = Date
            .Cells(letztegefZeile + 1, 12).Value = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
            
    End With
    
    ActiveWorkbook.RefreshAll
    ActiveWorkbook.Save
    
    'Workbooks("REKLA 2015.xls").Worksheets(TBName).Cells(letztegefZeile + 1, 1).Value = naechsteReklaNr
     
  Else
  
    MsgBox "Das Arbeitsblatt wurde nicht in der Arbeitsmappe gefunden.", vbInformation
    
  End If
  
End Sub

 

Es geht inspliziet um die Sub btn_StatusSetzen_Klicken()


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
01.02.2023 08:24:58 Peter
NotSolved
07.02.2023 18:48:25 Fire
NotSolved
Rot VBA+SQL
08.02.2023 07:17:36 Peter
NotSolved
08.02.2023 19:34:14 Fire
NotSolved