Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Was ratet ihr? "Auslesen" | Herbers Excel-Forum


Betrifft: Was ratet ihr? "Auslesen" von: Steve
Geschrieben am: 13.02.2012 21:40:12

Guten Abend allersetiz,

was ratet ihr mir?

Ich exportiere Blatt 1 inhalte in ein *.txt file und importiere sie auch wieder von diesem und es funktioniert gut.

Aber ich habe 2 probleme.

- Vie kann ich nach dem import die betrags angaben in einer reihe wieder als nummer deklarieren, da nach dem import jeder eintrag als text erkannt wird?

- Kan man mit einer formel die zellen mit formelinhalte überspringen da beim export nur die berechnungen und nicht di eformeln exportiert werden.

Oder habt ihr einen anderen rat wie ich die daten extern speichern kann und in einer neuen tabelle wieder importieren mit den ganzen formatierungen?

Danke an alle und noch einen schönen abend.

Steve

  

Betrifft: AW: Warum der Export in ein txt-File? von: JoWe
Geschrieben am: 13.02.2012 21:47:31




  

Betrifft: AW: Warum der Export in ein txt-File? von: Steve
Geschrieben am: 13.02.2012 21:50:47

Hallo JoWe,

Das schin mir die beste wahl, aber es stellt sich jetzt als etwas kompliziert oder gar falsch heraus.

Ich dachte schon an einen export in eine excel tabelle, oder gibt es eine bessere wahl?


  

Betrifft: AW: Warum der Export in ein txt-File? von: JoWe
Geschrieben am: 13.02.2012 21:57:07

Hi Steve,
Deine Daten liegen in einer Excel-Tabelle vor? Dann kopiere doch einfach das Blatt1 in eine neue leere Arbeitsmappe (rechte Maustaste auf das Registerelement "Tabelle1", verschieben/kopieren, in eine 'neue Arbeitsmappe', Kopie erstellen). Die so neu erstellte Arbeitsmappe speichern.
Gruß
Jochen


  

Betrifft: AW: Warum der Export in ein txt-File? von: Steve
Geschrieben am: 13.02.2012 23:08:35

Ich wollte nicht das ganze blatt speichern wegen eventuellen formeländerungen.

Daher wollte ich nur bereiche koppieren die keine formeln beinhalten und das er maximal so weit kopiert wie die zellen beschrieben sind.
Und das müsste vom blatt 1 und blatt 2 in ein neues excel file kopiert werden wen möglich mit "speicherwahl vom neuen file". und mit einem anderen code wieder retur kopiert werden ohne die zellen mit den formeln zu löschen.

Hat jemand einen beispiel code?

Danke Steve


  

Betrifft: AW: Warum der Export in ein txt-File? von: Josef Ehrensberger
Geschrieben am: 13.02.2012 23:38:18


Hallo Steve,

ich brauche ja nicht zu wissen, wofür das gut ist;-))

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub exportToTxt()
  Dim vntSheets As Variant
  Dim rng As Range, rngConstants As Range
  Dim strFile As String
  Dim ff As Integer, lngIndex As Long
  
  vntSheets = Array("Tabelle1", "Tabelle2") 'Tabellenblätter
  
  strFile = "E:\Temp\const.txt" 'Pfad der Textdatei
  
  ff = FreeFile
  Open strFile For Output As ff
  For lngIndex = 0 To UBound(vntSheets)
    With Sheets(vntSheets(lngIndex))
      On Error Resume Next
      Set rngConstants = .UsedRange.SpecialCells(xlCellTypeConstants)
      On Error GoTo 0
      If Not rngConstants Is Nothing Then
        For Each rng In rngConstants.Cells
          If Len(rng) Then
            Print #ff, vntSheets(lngIndex) & vbTab & rng.Address(0, 0) & vbTab & rng
          End If
        Next
      End If
    End With
  Next
  Close #ff
  
  Set rngConstants = Nothing
  Set rng = Nothing
End Sub


Sub importFromTxt()
  Dim strFile As String
  Dim vntInput As Variant, strTmp As Variant
  Dim ff As Integer
  
  strFile = "E:\Temp\const.txt" 'Pfad der Textdatei
  
  ff = FreeFile
  
  Open strFile For Input As #ff
  Do While Not EOF(ff)
    Input #ff, strTmp
    vntInput = Split(strTmp, vbTab)
    Sheets(vntInput(0)).Range(vntInput(1)) = vntInput(2)
  Loop
  Close #ff
  
End Sub




« Gruß Sepp »



  

Betrifft: AW: Warum der Export in ein txt-File? von: Steve
Geschrieben am: 14.02.2012 07:52:19

Hallo Sepp,

Besten dank, es funktioniert ja sehr gut !

Hättest du eine gute alternative?

ich brauche ja nicht zu wissen, wofür das gut ist;-))
:D

Steve


  

Betrifft: AW: Warum der Export in ein txt-File? von: Josef Ehrensberger
Geschrieben am: 14.02.2012 08:47:01


Hallo Steve,

Alternative zu was? Wie gesagt, ich weiß nicht wofür das gut ist bzw. was genau du damit bezweckst.




« Gruß Sepp »



  

Betrifft: AW: Warum der Export in ein txt-File? von: Steve
Geschrieben am: 14.02.2012 08:59:04

Hallo Sepp,

Ich wollte einige daten ab zelle B6 in Blatt1 und das gleiche in Blatt2 auslesen weil ich viel ausprobiere und da die formeln wechseln und ich nicht immer wieder das gleiche reinschreiben möchte, dachte ich es wäre sehr interessant die zellen ohne formeln auslesen zu können und in die neue tabelle wieder einfügen, so das ich die ausgelesene daten mit den "Neuen" formeln berechnen kann.

Ich dachte daher an ein *.txt file, aber es könnte auch eine excel tabelle sein, nur eben das was wechselt sind die formeln daher kann ich nicht das ganze blatt kopieren.

Gruss Steve


  

Betrifft: AW: Warum der Export in ein txt-File? von: Josef Ehrensberger
Geschrieben am: 14.02.2012 09:29:18


Hallo Steve,

dazu würde ich die Werte in eine Exceltabelle kopieren, dann bleiben auch die Formate erhalten.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub exportValues()
  Dim objWB As Workbook, objSh As Worksheet
  Dim strFile As String
  Dim vntSheets As Variant
  Dim rng As Range, rngValues As Range
  Dim lngIndex As Long, lngRow As Long, lngFormat As Long
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
  End With
  
  vntSheets = Array("Tabelle1", "Tabelle2")
  
  strFile = Application.GetSaveAsFilename("Werte_" & ThisWorkbook.Name, "Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
    "*.xls; *.xlsx; *.xlsm")
  
  If strFile = CStr(False) Then Exit Sub
  
  Set objWB = Workbooks.Add(xlWBATWorksheet)
  Set objSh = objWB.Sheets(1)
  
  For lngIndex = 0 To UBound(vntSheets)
    Set rngValues = Nothing
    On Error Resume Next
    Set rngValues = ThisWorkbook.Sheets(vntSheets(lngIndex)).UsedRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    If Not rngValues Is Nothing Then
      For Each rng In rngValues.Cells
        lngRow = lngRow + 1
        objSh.Cells(lngRow, 1) = vntSheets(lngIndex)
        objSh.Cells(lngRow, 2) = rng.Address
        rng.Copy objSh.Cells(lngRow, 3)
      Next
    End If
  Next
  
  getFileExtAndFormat objWB, "", lngFormat
  objWB.SaveAs strFile, FileFormat:=lngFormat
  objWB.Close
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'exportValues'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Modul - Modul1"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
    .DisplayAlerts = True
  End With
  
  
  Set objSh = Nothing
  Set objWB = Nothing
  Set rng = Nothing
  Set rngValues = Nothing
End Sub


Sub importValues()
  Dim objWB As Workbook
  Dim rng As Range
  Dim strFile As String
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
  End With
  
  strFile = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
    "*.xls; *.xlsx; *.xlsm")
  
  If strFile = CStr(False) Then Exit Sub
  
  Set objWB = Workbooks.Open(strFile)
  
  For Each rng In objWB.Sheets(1).Columns(1).SpecialCells(xlCellTypeConstants)
    rng.Offset(0, 2).Copy ThisWorkbook.Sheets(rng.Text).Range(rng.Offset(0, 1).Text)
  Next
  
  objWB.Close False
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'importValues'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Modul - Modul1"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
    .DisplayAlerts = True
  End With
  
  Set objWB = Nothing
  Set rng = Nothing
End Sub


Private Function getFileExtAndFormat(ByRef WB As Workbook, ByRef strExt As String, ByRef lngFormat As Long)
  With WB
    If Val(Application.Version) < 12 Then
      strExt = ".xls": lngFormat = -4143
    Else
      Select Case WB.FileFormat
        Case 51: strExt = ".xlsx": lngFormat = 51
        Case 52:
          If .HasVBProject Then
            strExt = ".xlsm": lngFormat = 52
          Else
            strExt = ".xlsx": lngFormat = 51
          End If
        Case 56: strExt = ".xls": lngFormat = 56
        Case Else: strExt = ".xlsb": lngFormat = 50
      End Select
    End If
  End With
End Function






« Gruß Sepp »