MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 11.04.2019, 09:10   #1
thomasreick
MOF User
MOF User
Standard VBA - Inhalt einer .odc-Datei per VBA editieren

Hallo zusammen,
ist weniger ein Excel-Problem denn ein VBA-Problem
aufgrund einer Änderung von Serveradressen ergibt sich die Notwendigkeit bei mehreren hundert Usern die bereits vorhandenen Datenquellverbindungen auf eine neue IP-Adresse umzustellen.
Mein Ansatz ist folgender
  • Unter Verwendung von FileSystemObject die Dateien in einer Schleife "selektieren"
  • Die gefundene *.odc umbenennen in *.txt
  • Den Inhalt dieser *.txt per FileSystemObject.Textstream in eine Stringvariable einlesen
  • in der Stringvariable einen Replace alter gegen neue IP durchführen
  • Die Stringvariable zurück in die *txt schreieben
  • die *.txt wieder zu *.odc umbenennen
  • nächste *.odc nehmen

Fragen:
ist das so machbar oder gibt s eine elegantere/klügere Möglichkeit?
Beim Umbenennen tritt LFZ 53 Datei nicht vorhanden auf, Was ist die Erklärung dafür?

Code zur Zeit folgender:
Code:

Sub subIpChanger()
'Code zum ändern aller IP-Adressen in *.odc-Dateien eines Ordners
Dim oDlg As Object
Dim oFso As Object, oFol As Object, oFil As Object, oTs As Object
Dim sFol As String, sFilOdc As String, sFiltxt As String
Dim sString As String
Const sIpOld As String = "Die.Alte.IP.Adresse", sIpNew As String = "Die.Neue.IP.Adresse"
  'ordner wählen mit dialog
  sFol = fctVerzeichnisAuswaehlen '<=Function liefert Ordnernamen aus FileDialog
  Set oFso = CreateObject("Scripting.FileSystemObject")
  Set oFol = oFso.getfolder(sFol)
  
  'mit Schleife durch alle enthaltenen files gehen der endung 'odc' lautet
    For Each oFil In oFol.Files
    
    'odc-Datei mit DSO-Bibliothek öffnen und in string einlesen
      If Right(oFil.Name, 3) = "odc" Then
      sFilOdc = oFil.Name
      Select Case Left(sFilOdc, 1)
      Case "+"
      'mitgelieferte Neuanlagen Datenquellen hier unwichtig
      Case Else
        Debug.Print sFilOdc
        
        'umbenennen in txt
          sFiltxt = Left(sFilOdc, Len(sFilOdc) - 4) & ".txt"
          Debug.Print sFiltxt

          Name sFol & Chr(95) & sFilOdc As sFol & Chr(95) & sFiltxt 'hier kommt Fehler 53-Datei  nicht gefunden
        
        DoEvents
        
          Set oTs = oFso.opentextfile(sFol & Chr(95) & sFiltxt, 1)
            sString = oTs.readall
            oTs.Close
          Set oTs = Nothing
        Debug.Print sString
        
        'in string sString REPLACE alte IP gegen neue IP
          sString = Replace(sString, sIpOld, sIpNew)
          Debug.Print sString
        
        'odc-Datei speichern
          Set oTs = oFso.opentextfile(sFol & Chr(95) & sFiltxt, 2)
            With oTs
              .write sString
            End With
            oTs.Close
          Set oTs = Nothing
        
        'umbenennen in odc
          Name sFol & Chr(95) & sFiltxt As sFol & Chr(95) & sFilOdc
      
      End Select
    
    Else
    End If
    Next
  Set oFso = Nothing
  Set oFso = Nothing
End Sub

__________________

Ich bitte um Input.

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.04.2019, 09:53   #2
Der Steuerfuzzi
MOF Profi
MOF Profi
Standard

Hallo,

Du brauchst die Datei nicht in .txt umbenennen. Du kannst Sie auch mit der .odc-Endung ein einen String lesen!

Nimm das umbenennen heraus und ändere das Öffnen (2x) so ab:
Code:

Set oTs = oFso.opentextfile(oFil.Path, 1)

__________________

Gruß
Michael

Geändert von Der Steuerfuzzi (11.04.2019 um 10:05 Uhr).
Der Steuerfuzzi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.04.2019, 09:57   #3
hubert17
MOF User
MOF User
Standard

Hallo,

genau wie Michael gesagt hat, hier der Code, wie er bei mir gelaufen ist:

Code:

Option Explicit

Sub subIpChanger()
'Code zum ändern aller IP-Adressen in *.odc-Dateien eines Ordners
Dim oDlg As Object
Dim oFso As Object, oFol As Object, oFil As Object, oTs As Object
Dim sFol As String, sFilOdc As String, sFiltxt As String
Dim sString As String
Const sIpOld As String = "Die.Alte.IP.Adresse", sIpNew As String = "Die.Neue.IP.Adresse"
  'ordner wählen mit dialog
  sFol = fctVerzeichnisAuswaehlen '<=Function liefert Ordnernamen aus FileDialog
  Set oFso = CreateObject("Scripting.FileSystemObject")
  Set oFol = oFso.getfolder(sFol)
  
  'mit Schleife durch alle enthaltenen files gehen der endung 'odc' lautet
    For Each oFil In oFol.Files
    
    'odc-Datei mit DSO-Bibliothek öffnen und in string einlesen
      If Right(oFil.Name, 3) = "odc" Then
      sFilOdc = oFil.Name
      Select Case Left(sFilOdc, 1)
      Case "+"
      'mitgelieferte Neuanlagen Datenquellen hier unwichtig
      Case Else
        Debug.Print sFilOdc
                
        DoEvents
        
          Set oTs = oFso.opentextfile(sFol & sFilOdc)
            sString = oTs.readall
            oTs.Close
          Set oTs = Nothing
        Debug.Print sString
        
        'in string sString REPLACE alte IP gegen neue IP
          sString = Replace(sString, sIpOld, sIpNew)
          Debug.Print sString
        
        'odc-Datei speichern
          Set oTs = oFso.opentextfile(sFol & sFilOdc, 2)
            With oTs
              .write sString
            End With
            oTs.Close
          Set oTs = Nothing
      
      End Select
    
    Else
    End If
    Next
  Set oFso = Nothing
  Set oFso = Nothing
End Sub

__________________

Gruß
Hubert
hubert17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.04.2019, 09:59   #4
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Michael,
habe ich versucht (denk dir einfach die Umbenennungs-Anweisungen weg)
geht aber nicht. Vielleicht weil Textstream eine txt sehen will???

Thomas

__________________

Ich bitte um Input.

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.04.2019, 10:16   #5
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

@Michael:
Habe deinen Code nicht gesehen.
Probiere ich gleich mal

@Hubert danke, prüfe ich gleich hier durch.

Thomas

__________________

Ich bitte um Input.

Vielen Dank

Thomas Reick

Geändert von thomasreick (11.04.2019 um 10:17 Uhr). Grund: @Hubert ergänzt
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.04.2019, 12:38   #6
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

@Hubert, @Michael

herzlichen Dank hat (fast) genau so geklappt, wie ich mir das vorgestellt habe. Muss das Ergebnis jetzt noch auf Funktionalität prüfen und noch ein bißchen Feinschliff machen.

Danke, Thema ist erledigt, mach ich zu.

Thomas

__________________

Ich bitte um Input.

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.04.2019, 07:48   #7
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

... muss das leider wieder aufmachen.

Die odc befinden sich in Benutzerverzeichnis des angemeldeten Benutzers und dort in einem Unterverzeichnis namens "Meine Datenquellen".
Laut Explorer sind die darin enthaltenen Dateien schreibgeschütz.

Damit schlägt die Anweisung
Code:

        'String in odc-Datei schreiben
          Set oTs = oFso.opentextfile(oFil.Path, 2)
              oTs.write sString <= hier tritt ein Fehler auf, auch wenn anderes Verzeichnis genutzt wird!
            oTs.Close
          Set oTs = Nothing
leider fehl.

Frage:
wie muss ich vorgehen, um doch die gewünschte Änderung an den odc vornehmen zu können?
Etwa vorher Datei woanders hin kopieren, andern und dann zurückkopieren?

__________________

Ich bitte um Input.

Vielen Dank

Thomas Reick

Geändert von thomasreick (15.04.2019 um 08:05 Uhr). Grund: code eingefügt
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.04.2019, 07:56   #8
Der Steuerfuzzi
MOF Profi
MOF Profi
Standard

Hallo Thomas,

leider ist der Code nicht eingefügt. Um welches Verzeichnis geht es denn? Vermutlich C:\Users\Username\Documents\Meine Datenquellen. Normalerweise hat ein Benutzer Zugriff auf sein Verzeichnis, ich kann zumindest in dieses Verzeichnis schreiben.

__________________

Gruß
Michael

Geändert von Der Steuerfuzzi (15.04.2019 um 07:59 Uhr).
Der Steuerfuzzi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.04.2019, 08:07   #9
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Guten Morgen,
Code hier, habe ich eben auch im Vor-Post eingefügt.
Code:

        'String in odc-Datei schreiben
          Set oTs = oFso.opentextfile(oFil.Path, 2)
              oTs.write sString
            oTs.Close
          Set oTs = Nothing
Bei 'oTs.Write sString' tritt der Fehler auf, auch wenn es ein anderes Verzeichnis ist.

Ist der TS-Ansatz möglicherweise nicht sinnvoll?

__________________

Ich bitte um Input.

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.04.2019, 08:23   #10
Der Steuerfuzzi
MOF Profi
MOF Profi
Standard

Ist die Datei schon vorhanden oder willst Du eine neue Datei erstellen? Wenn Du eine neue Datei erstellen willst, musst Du bei OpenTextFile als drittes Argument True verwenden (Standard ist False und da ist neu erstellen nicht zulässig):
https://docs.microsoft.com/de-de/off...extfile-method

__________________

Gruß
Michael
Der Steuerfuzzi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.04.2019, 09:00   #11
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Michael,
danke für deinen Input.
Mittlerweile wurde das von einem anderen Kollegen hier gelöst.
Dir einen schöne Woche
Thread mache ich zu.
Thomas.

__________________

Ich bitte um Input.

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.04.2019, 09:01   #12
Der Steuerfuzzi
MOF Profi
MOF Profi
Standard

Wäre schön zu wissen, woran es lag. Vielleicht hat das Problem irgendjemand auch mal, dann kann er von Deiner Lösung hier eventuell profitieren.

__________________

Gruß
Michael
Der Steuerfuzzi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.04.2019, 09:08   #13
thomasreick
Threadstarter Threadstarter
MOF User
MOF User
Standard

ich denke das Problem ist Fehler 40...., 40 cm VOR dem Bildschirm....
Werde aber mal schauen, das entsprechend hinzubekommen...
VG
Tgomas

__________________

Ich bitte um Input.

Vielen Dank

Thomas Reick
thomasreick ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.